2014-10-16 68 views
0

我想從用戶使用raw_input()得到一個字符輸入,看看這是Y還是N.應該做這項工作的代碼如下:python raw_input with while不能正常工作

# 
# Things I have done before 
# 
c = "" 
while c.capitalize() != "Y" or c.capitalize() != "N": 
    c = raw_input("\n\n If you wish to continue, press Y (or N to terminate) ") 

if c.capitalize() == "N": 
    system.exit("Stopped script......check your files if necessary\n\n"); 
else: 
    #Other things to do 

目前,即使按Y或N鍵,我也會反覆得到提示。不知道它有什麼問題。我嘗試使用input()而不是raw_input(),但我認爲我使用的是舊版本的python(2x),這就是爲什麼需要使用raw_input。

任何幫助表示讚賞。

+0

'while c.capitalize()!='N':' – nu11p01n73R 2014-10-16 10:36:55

+0

這真的是我的瘋狂和愚蠢......從一種語言切換到另一種語言正在導致我稍微高漲......暫時。 ... :( – ha9u63ar 2014-10-16 10:43:00

+0

可能重複[如何測試一個變量對多個值?](http://stackoverflow.com/questions/15112125/how-do-i-test-one-variable-against-multiple-值) – fredtantini 2014-10-17 11:08:58

回答

4

有一個在你的邏輯故障:

while c.capitalize() != "Y" or c.capitalize() != "N": 

如果我輸入「Y」,第一項是False,但第二個是TrueFalse or TrueTrue,while塊被執行。如果我輸入「N」,同樣的事情。你必須使用and

while c.capitalize() != "Y" and c.capitalize() != "N": 
+0

是的....傻我!!!謝謝:) – ha9u63ar 2014-10-16 10:38:18

+1

http://en.wikipedia.org/wiki/De_Morgan%27s_laws – 2014-10-16 11:17:20

+0

你好...真正的光滑! – ha9u63ar 2014-10-17 16:19:49

1

你的條件是錯誤的:
如果c=='N',則第一部分(c!=Y)是真實的,所以你會循環(反之,如果c=='Y',C不會是平等的爲 'N')

更改爲

while (c.capitalize() != "Y" and c.capitalize() != "N"): 

或更好:

while (c.capitalize() not in ['Y','N']):