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)

没有办法使用我的其他选项。

谢谢!

4

3 回答 3

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':
于 2013-04-12T22:12:22.393 回答
4

问题出or在您的if-statement 中:

即使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
于 2013-04-12T22:13:33.180 回答
2

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

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

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

但是,如果你想坚持原来的代码,你想使用

 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

这就是我相信你的初衷。

于 2013-04-12T22:12:50.690 回答