python如果声明总是

时间:2013-04-12 22:10:24

标签: python windows eclipse tkinter python-3.3

所以,我正在用Python构建一个简单的游戏,以便更熟悉这种语言,并且无法找到一种搜索方式。 :P任何方式,当这个代码块执行时,我总是以我的“位置”为.y +10。我已经重新安排并检查了一些事情,但觉得我错过了我通常用switch语句处理的基本部分

mv = input('N,S,E,W?')

if mv == 'N' or 'n':
    Me.Position.Y += 10    
elif mv == 'E' or 'e':
    Me.Position.X += 10    
elif mv == 'W' or 'w':
    Me.Position.X -= 10    
elif mv == 'S' or 's':
    Me.Position.Y -= 10
else:
    print('Stand')

然后:

print('Lage: X:', Me.Position.X, ' Y:', Me.Position.Y, ' Z:', Me.Position.Z)

无法使用我的其他选项。

谢谢!

3 个答案:

答案 0 :(得分:11)

您的代码的解释与您的预期略有不同。这一行:

if mv == 'N' or 'n':

被解释为:

if (mv == 'N') or ('n'):

'n'是真实的,因此您的if声明始终为True。你必须更明确:

if mv == 'N' or mv == 'n':

或使用in

if mv in ['N', 'n']:

或使用.lower()

if mv.lower() == 'n':

答案 1 :(得分:4)

问题在于or声明中的if

即使mv == 'N'评估为False,非空字符串'n'也会评估为True,因此mv == 'N' or 'n'始终为True

你想要的是:

if mv in ['n', 'N']:
    Me.Position.Y += 10

甚至只是:

if mv in 'nN':
    Me.Position.Y += 10

答案 2 :(得分:2)

更好的方法是检查你的答案是否在可能答案的元组中,即

In [1]: mv in ('n', 'N')
Out[1]: True

元组是首选,因为它是不可变的。

但是,如果你想坚持使用原始代码,那么你想使用

 if mv == 'N' or mv == 'n':

因为给出了

 mv ='n'

然后

In [2]: mv == 'n'
Out[2]: True

In [3]: mv == 'N'
Out[3]: False

In [4]: mv == 'N' or 'n'
Out[4]: 'n'

但是

In [5]: mv == 'n' or mv == 'N'
Out[5]: True

这是我相信你最初的意图。