簡體   English   中英

用戶輸入變量在循環結束時具有不正確的值

[英]User-input variable has incorrect value at end of loop

我是編程新手,我正在編寫一個程序來查找用戶輸入的最小和最大數字。

用戶一次輸入一個數字,最后輸入“完成”。 如果用戶輸入“完成”以外的非數字輸入,則應顯示錯誤消息。

當我運行我的代碼時,似乎應該是終止代碼的單詞“done”似乎是執行計算的輸入。

如何讓程序接受輸入並僅在沒有字符串變量的 integer 變量上執行計算?

下面是我的代碼:

largest = None
smallest = None
while True:
    num = input("Enter a number: ")

    if num == "done":
        break

for value in num:
    try:
        imp = int(num)
    except:
        print ("Invalid input")

        continue

    smallest = min(num)

    largest = max(num)

print("Maximum is: ", largest)
print("Minimum is: ", smallest) 

while循環的每次迭代中,您都會覆蓋num的值。 因此,當用戶輸入"done"結束循環時, num的當前值為"done"

考慮使用列表來存儲用戶的每個輸入(只要該輸入不是值"done" )。

例如:

nums = []

while True:
    num = input("Enter a number: ")

    if num == "done":
        break

    nums.append(num)

然后遍歷nums中的值,如下所示:

for num in nums:
    # ...

此外,您可能會考慮在用戶輸入每個值時進行輸入驗證,而不是等待輸入所有值然后跳過任何無效值。 這將創造更好的用戶體驗。

例如:

nums = []

while True:
    num = input("Enter a number: ")

    if num == "done":
        break

    try:
        num_int = int(num)
    except ValueError:
        print("Invalid value, please enter a valid integer.")
        continue

    nums.append(num_int)

# no loop necessary:
smallest = min(nums)
largest = max(nums)

如果您希望用戶輸入多個用空格分隔的數字在最后按回車鍵而不是輸入“完成”(這是乏味的用戶體驗),這里有一個代碼可以為您做到這一點:

nums = list(map(str, input().rstrip().split()))

當您打印 nums 時,它將是所有數字的列表。 這是一種從用戶那里獲取多個輸入的簡單且“ pythonic ”的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM