在下面的 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)
uj5u.com熱心網友回復:
這是因為你的try/except:
...
while True:
try:
num = int(input("Enter a number:")) # issue is here
except:
if num == "done":
break
else:
print("Invalid input")
...
當您在終端中輸入“完成”int()的結果時,會拋出一個(參見下面的運行示例):input()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,因此塊if/else內部except正確執行,因為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))
uj5u.com熱心網友回復:
當用戶輸入“完成”時,它會嘗試轉換為 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)
uj5u.com熱心網友回復:
引發例外時,輸入的新值永遠不會保存到num變數中。
您可以在將輸入轉換為整數之前添加 if 陳述句。
這是一個簡單的例子:
num = input("Enter a number:")
if num == "done":
break
try:
num = int(num)
except ValueErorr:
print("Invalid input")
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/473786.html
下一篇:兩個檔案的第二列的數學
