0

我在玩 Python,正在制作一个小行星模拟器。我有一个部分应该接收一个值并基于该值返回第二个值。我花了几个小时来解决这个问题,但我完全被难住了。我添加了一些打印消息来帮助我跟踪值,它似乎应该工作,但不是。我几乎可以肯定这是显而易见的。我究竟做错了什么?

这是有问题的代码:

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 应该跳过前两个 IF 语句并从第三个语句接收一个值,但看起来它被 1 或 2 捕获了。有什么想法吗?

4

2 回答 2

3

而不是如果

pType == 1 or 2 

尝试

if pType in (1, 2) 

或者

if pType == 1 or pType == 2. 

Python 中的比较器并不像你想象的那样工作。你在做什么实际上评估为

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

哪一个,因为 4 是真的,所以总是真的。

于 2013-06-12T05:17:06.353 回答
2

表达式pType == 1 or 2是两个表达式 的逻辑并集pType == 1,可以是Trueor False, and ,对于 Python2来说总是如此。True因此,表达式pType == 1 or 2始终True与 的值无关pType

于 2013-06-12T05:15:49.303 回答