我有一個簡單的問題:我需要從用戶那里獲取整數輸入并將它們添加到一個集合中。整數個數未知,輸入程序將在用戶輸入“完成”時結束。以下是我的代碼:
s = set()
print('Please type the number, when you're done please type "Done":')
while True:
try:
a = int(input())
s.add(a)
except:
if a == "Done":
break
else:
print('Integer only, please re-type:')
continue
print(s)
但它沒有按預期作業。我的想法很簡單。如果用戶鍵入一個整數,那很好,只需添加到 set s。如果他們輸入了一個字串(這int(input()是錯誤的),那么它將下降到except,如果字串是“完成”,則中斷while True回圈,如果不是,則要求用戶重新輸入并繼續回圈。
如果我先輸入字串并且正常輸入,則以下是錯誤:

我嘗試在開始時使用一個簡單的 if-else 陳述句,但它會在 int(input()) 處導致回溯
uj5u.com熱心網友回復:
使用雙引數形式iter讀取輸入,直到Done輸入。您可以迭代生成的迭代器,處理整數轉換并更新for回圈體中的集合。
s = set()
def get_input():
return input('''Please type the number, when you're done please type "Done": ''')
for x in iter(get_input, "Done"):
# x is guaranteed to *not* be Done here, or the loop
# would have already exited.
try:
a = int(x)
except ValueError:
print("Integer only, please re-type")
continue
s.add(a)
如果您不關心錯誤處理,則可以將其簡化為單個集合理解:
s = {int(x) for x in iter(get_input, "Done")}
uj5u.com熱心網友回復:
當例外發生時,a保持未設定。試試這個。
s = set()
# Notice also correct quoting
print("Please type the number, when you're done please type 'Done':")
while True:
a = input()
try:
n = int(a)
s.add(n)
# Avoid blanket except
except ValueError:
if a == "Done":
break
else:
print('Integer only, please re-type:')
continue
print(s)
uj5u.com熱心網友回復:
首先將輸入作為字串,然后在添加到集合之前將其轉換為整數。這樣您可以檢查用戶輸入的值是否為“完成”,如果是則退出回圈。如下所示(請同時檢查代碼中的一些語法錯誤。
s = {}
print('Please type the number, when you\'re done please type "Done":')
while True:
a = input()
if a == 'Done':
break
else:
try:
s.add(int(a))
except:
print('Integer only, please re-type:')
print(s)
uj5u.com熱心網友回復:
s = set()
b = True
print("Please type the number, when you're done please type 'Done'.")
while b:
try:
a = input("Input: ")
if a == "Done":
b = False
break
a = int(a)
s.add(a)
except ValueError:
print("Whoops, please type an integer!")
print(s)
uj5u.com熱心網友回復:
你可以試試下面的代碼。
s = set()
print('Please type the number, when you\'re done please type "Done":')
while True:
try:
a = input()
if a == "Done":
break
s.add(int(a))
except:
if a == "Done":
break
else:
print('Integer only, please re-type:')
continue
print(s)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/425282.html
