0

私は Python をいじっていて、小さな惑星シミュレーターを作っていました。値を受け取り、その値に基づいて 2 番目の値を返すセクションが 1 つあります。これのトラブルシューティングに数時間を費やしましたが、完全に困惑しています。値を追跡するのに役立ついくつかの印刷メッセージを追加しましたが、機能しているように見えますが、機能していません。私はそれが明らかなものであるとほぼ確信しています。私は何を間違っていますか?

問題のコードは次のとおりです。

def assignTerrain(pType):

print("Assigning terrain values to planet type: ", planetType[pType], pType)

if pType == 0:
    print("Value 0 assigned", pType)
    return 0

if pType == 1 or 2:
    temp = random.randint(1, 11)
    print("Value %d assigned" % temp, pType)
    return temp

if pType == 3 or 4:
    print("Value 12 assigned", pType)
    return 12

print("There was an error with pType: ", pType)

サンプルとして、ここに私が得ている出力の例を示します:

Assigning terrain values to planet type:  Asteroid Belt 4
Value 3 assigned 4
Assigning terrain values to planet type:  Asteroid Belt 4
Value 5 assigned 4
Assigning terrain values to planet type:  Asteroid Belt 4
Value 4 assigned 4
Assigning terrain values to planet type:  Asteroid Belt 4
Value 7 assigned 4
Assigning terrain values to planet type:  Asteroid Belt 4
Value 8 assigned 4
Assigning terrain values to planet type:  Asteroid Belt 4
Value 2 assigned 4
Assigning terrain values to planet type:  Asteroid Belt 4
Value 4 assigned 4
Assigning terrain values to planet type:  Asteroid Belt 4
Value 1 assigned 4
Assigning terrain values to planet type:  Asteroid Belt 4
Value 9 assigned 4
Assigning terrain values to planet type:  Asteroid Belt 4
Value 8 assigned 4

pType 4 は最初の 2 つの IF ステートメントをスキップし、3 番目のステートメントから値を受け取る必要があるように思えますが、1 または 2 に引っかかっているようです。何か考えはありますか?

4

2 に答える 2

3

if の代わりに

pType == 1 or 2 

試す

if pType in (1, 2) 

また

if pType == 1 or pType == 2. 

Python のコンパレーターは、あなたが考えているようには機能しません。あなたがしていることは実際に評価されます

if ((pType == 1) or (4))

4 は true であるため、これは常に True です。

于 2013-06-12T05:17:06.353 に答える
2

pType == 1 or 2は、2 つの式 の論理和です。これはまたはでpType == 1ある可能性があり、常にPython に適用されます。したがって、式はの値に関係なく常にです。TrueFalse2TruepType == 1 or 2TruepType

于 2013-06-12T05:15:49.303 に答える