[英]Python While loop breakout issues
所以我對 Python 和一般編程很陌生。 我的問題是關於我在 while 循環中的標志。 這有效,但不像我認為的那樣。 我假設我不理解某些東西,所以如果有人能夠解釋,那就太好了。
據我了解,一旦滿足我的條件之一,這應該會跳出循環。 因此,如果我輸入“q”,它應該會中斷並停止循環。 但是發生的事情是它一直在循環,然后它就爆發了。 所以它會通過最后一個提示並打印異常。
(Python 版本為 3.8.5)
# Statement that tells the user what we need.
print("Enter two numbers and I will tell you the sum of the numbers.")
# Lets the user know they can press 'q' to exit the program.
print("Press 'q' at anytime to exit.")
keep_going = True
# Loop to make the program keep going until its told to stop.
while keep_going:
# Prompt for user to input first number and store it in a variable.
first_number = input("First number: ")
# Create a break when entering the first number.
if first_number == 'q':
keep_going = False
# Prompt for user to input second number and store it in a variable.
second_number = input("Second number: ")
# Create a break when entering the second number.
if second_number == 'q':
keep_going = False
# Exception for non integers being input "ValueError"
try:
# Convert input to integers and add them.
# storing the answer in a variable.
answer = int(first_number) + int(second_number)
except ValueError:
# Tell the user what they did wrong.
print("Please enter a number!")
else:
# Print the sum of the numbers
print(f"\nThe answer is: {answer}")
使用此代碼,它會像我期望的那樣立即爆發。
while True:
first_number = input("First number: ")
if first_number == 'q':
break
second_number = input("Second number: ")
if second_number == 'q':
break
我只是想了解區別是什么以及它應該如何工作。 我覺得我錯過了什么或誤解了什么。 我試過查找這個,但還沒有找到答案。
提前致謝!
while
循環的條件只在循環體的迭代之間檢查,所以如果你在循環中間改變條件,當前的迭代將在循環終止之前完成。 如果要立即中斷循環,則需要break
(無論條件如何都會自動中斷循環)或continue
(跳轉到下一次迭代,因此如果條件不再為真則終止循環)。
使用while True:
當您想停止循環時使用break
通常比嘗試通過設置和取消設置標志來控制循環要簡單得多。
FWIW,而不是復制和粘貼代碼來輸入兩個數字,並有兩種不同的方法來打破循環,我可能會將它們全部放入 function 並使用Exception
打破循環,如下所示:
print("Enter two numbers and I will tell you the sum of the numbers.")
print("Press 'q' at anytime to exit.")
def input_number(prompt: str) -> int:
"""Ask the user to input a number, re-prompting on invalid input.
Exception: raise EOFError if the user enters 'q'."""
while True:
try:
number = input(f"{prompt} number: ")
if number == 'q':
raise EOFError
return int(number)
except ValueError:
print("Please enter a number!")
while True:
try:
numbers = (input_number(n) for n in ("First", "Second"))
print(f"The answer is: {sum(numbers)}")
except EOFError:
break
這使得擴展程序以處理兩個以上的輸入變得更容易; 嘗試在“第一”和“第二”之后添加“第三”::)
一旦你運行程序並輸入“q”,是的, keep_going
確實會設置為False
,但這並不意味着它會打破循環,它只會使keep_going
等於False
,因此在NEXT ITERATION將停止循環. 這是為什么? 因為它會像這樣while keep_going:
-> while False:
所以因為它不是True
因此不再執行程序。
現在根據您提到的目標。 您可以通過這種方式添加break
。
if first_number == 'q':
keep_going = False
break
# Prompt for user to input second number and store it in a variable.
second_number = input("Second number: ")
# Create a break when entering the second number.
if second_number == 'q':
keep_going = False
break
我還想建議以這種方式使用它,它只是在代碼上發生的事情方面更具體,但當然這取決於你。
first_number = input("First number: ")
# Create a break when entering the first number.
if first_number == 'q':
keep_going = False
break
# Prompt for user to input second number and store it in a variable.
# Create a break when entering the second number.
else:
second_number = input("Second number: ")
if second_number =='q':
keep_going = False
break
While 循環一直執行,直到它們的給定條件為假。 循環只會在需要時檢查其條件(程序執行移至循環頂部)。 幾乎在所有情況下,當循環的整個主體運行時都會發生這種情況。 看這里:
keep_going = True
while keep_going:
keep_going = False
# keep_going is False, but this will still print once
# because the loop has not checked its condition again.
print("Will execute once")
即使將keep_going
設置為 False, “將執行一次”也會打印一次。 發生這種情況是因為 while 循環在其整個主體運行之前不會重新檢查其條件。
但是, break
語句是不同的。 無論如何, break
語句都會導致循環立即退出。
keep_going = True
while keep_going:
break # Exits the while loop immediately. The condition is not checked.
print("Will never print")
在這里,即使keep_going
為True
,也不會打印任何內容。 不管條件如何, break
都會退出循環。
continue
語句會將程序執行移回循環的開頭,並再次檢查您的條件。
在此示例中, continue
將程序執行發送回循環的開頭。 由於keep_going
設置為False
,因此不會打印任何內容,因為 while 循環將在意識到其條件評估為 false 后退出。
keep_going = True
while keep_going:
keep_going = False
continue
print("Will never print")
首先,希望您在學習 Python 時玩得愉快!
兩種方式都可以工作並停止循環,但有區別:
在第一種方法中,您將keep_going
變量更改為 false,因此,當while
循環發現keep_going
已變為False
時,循環將停止。 但是,檢查僅在循環結束時發生(在您的情況下,是在您完成except
或else
部分之后),即使您為變量first_number
輸入q
,循環也不會立即停止。
在第二個解決方案中,您使用 Python 中的break
關鍵字,在您輸入q
for first_number
后立即脫離循環。
從技術上講,如果您想在檢測到q
時立即從循環中break
,則需要中斷,否則,如果您希望完成整個循環,但不為下一輪再次運行, keep_going
設置為False
。
在方案 1 中,即使您輸入了q
結果,
Please enter a number!
將始終顯示,但不適用於場景 2。
這是您的腳本的一些不同方法:
def main():
print("Enter two numbers and I will tell you the sum of the numbers.")
print("Press 'q' at anytime to exit.")
val = []
while True:
check_value = lambda x: 'quit' if x.lower() == 'q' or x.lower() == 'quit' else int(x)
if not val:
value = input("First number: ")
elif len(val) == 2:
answer = sum(val)
print(f"\nThe answer is: {answer}")
print('==='*15 + ' < ' + f'PROGRAM RESTARTING' + ' > ' + '==='*15)
val[:] = []
continue
else:
value = input("Second number: ")
try:
check_ = check_value(value)
val.append(check_)
except ValueError:
print("Please enter a number!")
continue
finally:
if check_ == 'quit':
print('Program is stopping....')
break
else:
pass
if __name__ == '__main__':
main()
它隨時檢查用戶的輸入,無論是“q”、“Q”還是(“退出”或“退出”)或任何組合或大寫字母,因為運行檢查x.lower()
我建議你看看realpython.com尤其是“he Python break and continue Statements”這一段。
長話短說:
使用Break
在任何給定時間終止循環。
使用continue
回滾你離開的地方並再次重復循環(如果值不是 Int,我在我的代碼中使用它)
用戶pass
以保持循環不間斷運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.