[英]How to stop Python while I key in a value that indicates "break"
在下面的python代碼中,所需的輸出是從所有鍵入值中找到最大值和最小值(通過輸入函數),當我鍵入“完成”時,它停止(意味着不會彈出不再),而其他非整數字符串將打印“無效輸出”。
但是,即使我鍵入“完成”,彈出窗口仍然出現並且永遠不會結束,我的代碼有什么問題?
lar = None
smal = None
while True:
try:
num = int(input("Enter a number:"))
except:
if num == "done":
break
else:
print("Invalid input")
if lar is None:
lar = num
elif lar <= num:
lar = num
if smal is None:
smal = num
elif smal >= num:
smal = num
print("Maximum is", lar)
print("Minimum is", smal)
引發異常時,輸入的新值永遠不會保存到num
變量中。
您可以在將輸入轉換為整數之前添加 if 語句。
這是一個簡單的例子:
num = input("Enter a number:")
if num == "done":
break
try:
num = int(num)
except ValueErorr:
print("Invalid input")
這是因為您的try/except
:
...
while True:
try:
num = int(input("Enter a number:")) # issue is here
except:
if num == "done":
break
else:
print("Invalid input")
...
當您在終端中輸入“done”時對input()
的結果強制轉換int()
) 時,會引發ValueError
(請參見下面的運行示例):
>>> Enter a number:h
Traceback (most recent call last):
File "main.py", line 5, in <module>
num = int(input("Enter a number:"))
ValueError: invalid literal for int() with base 10: 'h'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "main.py", line 7, in <module>
if num == "done":
NameError: name 'num' is not defined
在這個例子中,給你的while
循環嘗試分配給變量num
的第一個值是“h”,而這個錯誤在int()
上,因為“h”不是以 10 為底的數字(這就是int()
嘗試將字符串轉換為)。 該ValueError
被捕獲在您的塊的except
部分,但隨后if num == "done"
失敗,因為自第一次嘗試失敗以來從未分配過num
。
讓我們看另一個例子:
>>> Enter a number:1
>>> Enter a number:h
Invalid input
>>> Enter a number:
這里我們沒有收到錯誤回溯,但是為什么呢?
事實上,我們給出了一個有效的基數為 10 的整數作為我們的第一個輸入,在本例中為“1”,它已成功分配給變量num
,因此except
塊內的if/else
正確執行,因為num
當前持有“1” .
要解決您的問題,您的循環需要如下所示:
lar = None
smal = None
while True:
# never give variables the same name as keywords
inpt = input('Enter a number (or done): ')
if inpt == 'done':
break
try:
num = int(inpt)
except ValueError as err:
# f-string to display error
print(f'Invalid input: {inpt}')
if not lar:
lar = num
elif lar <= num:
lar = num
if not smal:
smal = num
elif smal >= num:
smal = num
print("Maximum is", lar)
print("Minimum is", smal)
>>> Enter a number (or done): 1
>>> Enter a number (or done): 8
>>> Enter a number (or done): 3
>>> Enter a number (or done): 2
>>> Enter a number (or done): -1
>>> Enter a number (or done): 4
>>> Enter a number (or done): done
Maximum is 8
Minimum is -1
就我個人而言,我會使用內置插件進一步調整:
nums = []
while True:
# never give variables the same name as keywords
inpt = input('Enter a number (or done): ')
if inpt == 'done':
break
try:
num = int(inpt)
except ValueError as err:
# f-string to display error
print(f'Invalid input: {inpt}')
nums.append(num)
print("Maximum is", max(nums))
print("Minimum is", min(nums))
當用戶輸入“完成”時,它會嘗試轉換為 int。 這會引發錯誤並且 num 的值未設置,因此當檢查它是否等於“完成”時,它將永遠不會。 您應該在嘗試轉換為 int 之前設置檢查用戶輸入。
lar = None
smal = None
while True:
try:
user_input =input("Enter a number:")
if user_input == "done":
break
num = int(user_input)
except:
print("Invalid input")
if lar is None:
lar = num
elif lar <= num:
lar = num
if smal is None:
smal = num
elif smal >= num:
smal = num
print("Maximum is", lar)
print("Minimum is", smal)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.