所以,我正在用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)
无法使用我的其他选项。
谢谢!
答案 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
这是我相信你最初的意图。