2013-04-12 63 views
3

因此,我在Python中構建了一個簡單的遊戲,以更熟悉該語言,並且無法找到一種搜索方式,以確定這是否曾被問過。 :P任何方式,當這個代碼塊執行時,我總是以我的「位置」爲.y + 10結束。我rearanged並檢查兩件事情,只是覺得我缺少什麼,我通常會用switch語句python if statement always

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) 

絕我正在使用其他選項。

謝謝!

+2

這個問題想出了一個百遍了,但我仍然無法找到一個標記爲重複。愚蠢的不可探測的問題。 – delnan

+1

@delnan - 在這裏你去... :) - [a](http://stackoverflow.com/questions/13305089/issues-with-a-if-else-loop-in-python?rq=1)[幾個](http://stackoverflow.com/questions/14173108/python-if-elif-else-usage-and-clarification?rq=1)[更多](http://stackoverflow.com/questions/15329646/python -program-error-elif-else-if?rq = 1)[similar](http://stackoverflow.com/questions/15348879/if-else-statment-not-following-the-elif-correctly?rq=1 ) – mata

回答

4

的問題是在你的if語句來的or

即使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 
+1

啊,所以也許mv =='N'或者mv =='n'會更好,但是謝謝你的更簡潔的回答:D – naMretupmoC

11

你的代碼被解釋得有點不同於你的期望。這條線:

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

是被解釋爲:

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

'n'是truthy,所以你if聲明將永遠是True。你必須更明確:

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

或者使用in

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

或者使用.lower()

if mv.lower() == 'n': 
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 

這是我相信你的原意是什麼。