2014-01-20 48 views
0
variable1 = 0 
while variable1 != "1" or variable1 != "2" or variable1 != "3": 
    variable1 = input ("Enter variable1: ") 
print("Succes") 

我的代碼永不熄滅while循環,即使變量賦值1或2或3 我失去了一些東西在這裏或做錯了什麼?我從來沒有閱讀任何有關Python的文檔,或者說while循環中的語句不起作用。根據命題演算,這應該是正確的,因爲True或False或False = True使用或while循環(Python)的

我知道我沒有使用整數。

在此先感謝!

+2

有什麼'!= to'做什麼呢? <不祥的唸誦>殺死'to'!殺死'to'!殺死'to'! inspectorG4dget

+0

當變量1 ='al; dfjakl; fkja; lkajdfj'時會發生什麼? – Joe

+0

'variable1!=到「1」是語法錯誤。爲什麼在那裏「去」? – Izkata

回答

4

你的while循環的條件總是成立。爲了使其爲假,variable1必須等於"1","2""3",這對單個字符串是不可能的。

>>> variable1 == "1" 
>>> 
>>> variable1 != "1" 
False 
>>> variable1 != "2" 
True 
>>> variable1 != "3" 
True 
>>> False or True or True 
True # So the loop will continue execution 

你想對你while循環退出如果variable1等於"1""2",或者"3"

while not (variable1 == "1" or variable1 == "2" or variable1 == "3"): 

如果variable1等於或者"1""2",或者"3",然後將它想像的狀況將得到解決是有益的:

while not (True or False or False): 

while not (True): 

while False: # Exit 
+0

我該如何解決這個問題呢?謝謝您的回答! – Zimano

+0

@Zimano見編輯。 – jayelm

0

而不是 '或',你應該使用 '和'。只要輸入不是「1」,並且它不是「2」,並且它不是「3」,就要繼續詢問輸入。

+0

我不是Python程序員(還)。雖然我的回答在邏輯上有效,但@xndrme提供的解決方案更加優雅。 – Darren

4

您while循環的條件將總是評估,以True因爲variable1將始終不等於"1"或不等於"2"

相反,你會想在這裏使用not in

variable1 = 0 
while variable1 not in ("1", "2", "3"): 
    varible1 = input("Enter variable1: ") 
print("Succes") 

但是,你的代碼結構來看,我認爲你要variable1是一個整數,而不是字符串。

如果是這樣,那麼你就可以在Python的3.x的使用:

variable1 = 0 
while variable1 not in (1, 2, 3): 
    varible1 = int(input("Enter variable1: ")) 
print("Succes") 

,或者,如果你是Python的2.x中,您可以使用此:

variable1 = 0 
while variable1 not in (1, 2, 3): 
    varible1 = int(raw_input("Enter variable1: ")) 
print "Succes" 
+0

最好使用一個集合而不是一個元組來優化查找時間 – inspectorG4dget

+0

我運行它並且永不停止,不應該是'(1,2,3)' –

+0

@xndrme - 通過他的'print'語法判斷爲以及他與字符串進行比較的事實,我假定OP是在Python 3.x上。如果是這樣,'input'將返回一個字符串對象。 – iCodez

1
  1. 您需要更新while循環中的變量
  2. 如果使用input,則需要比較爲int

variable1 = 0 
while variable1 not in {1,2,3}: 
    variable1 = input("Enter variable1: ") 

print("Succes") 
+0

會更好地使用一套而不是一個列表,以優化查詢時間 – inspectorG4dget

+0

+1是的,你有一個點,我會更新答案。 –