如何重复输入直到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)