3

そのため、Python で簡単なゲームを作成して言語に慣れようとしていますが、以前に尋ねられた場合に検索する方法を見つけることができませんでした。:P いずれにせよ、このコード ブロックが実行されると、常に "Position" が .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ステートメントにあります:

mv == 'N'が に評価されたとしても、False空でない文字列'n'は に評価さTruemv == '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

タプルは不変であるため、推奨されます。

ただし、元のコードに固執したい場合は、

 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 に答える