![](/img/trans.png)
[英]Proper usage of 'continue' and 'break' in for loop
[英]While Loop Break usage
我對我編寫的這個函數完全發瘋了,而while循環對於上帝的愛是行不通的
while (something something):
print("at anytime enter 0 for both origin and destination to exit the game")
o=input("Enter origin stool's index (Must be int) ")
d=input("Enter destination stool's index (Must be int) ")
if isinstance(o,int) and isinstance(d,int):#if input d,o are int
#do bla bla
elif o==0 and d==0:#to exit manually
print("Exiting Manually...")
break
elif not (isinstance(o,int) and isinstance(d,int)):
print ("Invalid entry, exiting...")
break
當o
AND d
為0時,代碼應該退出,而當o
OR d
不是int時,代碼也應該退出。
但是似乎輸入什么都沒關系,(我嘗試輸入0,0和0,1)返回invalid entry, exiting...
條件怎么了?
在Python 3中, input
函數始終返回一個字符串。 它不像在Python 2中那樣eval
用戶輸入。因此, o
和d
都是字符串,而不是整數。 您需要將input
調用包裝為int(input('...'))
才能將它們轉換為int,因此您的條件條件有機會獲得成功。
在這種情況下,如果用戶輸入的值不是數字,則int
調用將失敗並顯示ValueError
。 解決此問題的標准方法是使用try
except
塊包裝對用戶輸入的所有調用,以處理提供錯誤輸入的用戶。 因此,代碼的相關部分可能看起來像這樣:
try:
o=int(input("Enter origin stool's index (Must be int) "))
d=int(input("Enter destination stool's index (Must be int) "))
except ValueError:
print("Invalid entry, exiting...")
break
附帶說明一下,您在條件句中的邏輯有點奇怪/不完整。 您的第一個條件檢查a
和d
是否均為int,然后進行處理。 然后,您的下一個條件(第一個elif
塊)嘗試將它們與0
進行比較,這將始終失敗,因為如果您進行該測試,則意味着第一個條件失敗了,因此它們不是兩個整數,因此永遠不能等於0
。
當o和d均為整數時,無論它們的值如何,您的第一個“ if”都會過去。 僅當該條件失敗時,它才會繼續到下一個“ elif”。
嘗試更多類似的方法:
if isinstance(o,int) and isinstance(d,int) and (o != 0 or d != 0):
#Conditions met, carry on
else:
break
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.