如何重复输入直到Python满足特殊条件?
How to repeat the input until a special condition is meet in Python?
我有一个简单的问题:我需要从用户那里获取整数输入并将它们添加到一个集合中。整数的数量未知,当用户输入“完成”时,输入过程将结束。
以下是我的代码:
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()) 处引起回溯
使用iter
的two-argument形式读取输入,直到输入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")}
发生异常时,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)
首先将输入作为字符串,然后将其转换为整数,然后再添加到集合中。这样您就可以检查用户输入的值是否为“完成”,如果是则退出循环。类似下面的内容(请同时检查您的代码中的一些语法错误。
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)
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)
您可以试试下面的代码。
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)
我有一个简单的问题:我需要从用户那里获取整数输入并将它们添加到一个集合中。整数的数量未知,当用户输入“完成”时,输入过程将结束。 以下是我的代码:
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()) 处引起回溯
使用iter
的two-argument形式读取输入,直到输入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")}
发生异常时,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)
首先将输入作为字符串,然后将其转换为整数,然后再添加到集合中。这样您就可以检查用户输入的值是否为“完成”,如果是则退出循环。类似下面的内容(请同时检查您的代码中的一些语法错误。
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)
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)
您可以试试下面的代码。
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)