按下某个键时停止读取输入

时间:2015-02-28 23:29:16

标签: python input while-loop

我是编程新手,已经开始学习Python了。我的工作簿中的一个问题要求我继续接受输入,直到按下一个键。我想出了两个解决方案,我想知道一个是否优先于另一个。有人告诉我,我应该避免产生无限循环的条件,所以我对解决方案1感到好奇。这里是:

解决方案1 ​​

while True:
integer = int(input("Please enter an integer (0 exits): "))
if integer != 0:
    list.append(integer)
else:
    break

解决方案2

integer = int(input(“Enter an integer (0 exits): “))
while integer != 0:
    list.append(integer)
    integer = int(input(“Enter an integer (0 exits): “))

3 个答案:

答案 0 :(得分:1)

更多pythonic方式:

sentinel = 0
[int(n) for n in iter(input,sentinel)]

Input:
1
2
4
0
Result:
[1,2,4]

你需要小心字符串输入,如字符或特殊字符。您需要添加一些try / catch代码来处理这些情况。

答案 1 :(得分:1)

final = []
while True:
    try:
        integer = int(input("Enter an integer (0 exits): "))
        if integer == 0: break
        final.append(integer)
    except:
        print ("Input wasn't a int.")

尝试将其保持尽可能接近现有解决方案并尽可能可读。

答案 2 :(得分:1)

您可以将lambdaiter结合使用,以便在输入中添加字符串以向用户发送消息,并使用try/except来捕获输入的任何无法转换为的值一个int输出一个适当的消息给用户,第二个arg到iter是一个sentinel值,一旦输入就会打破循环。它必须是一个字符串,因为在我们进入try / except:

之前我们不会进行投射
res = []
for val in iter(lambda: input("Please enter an integer (0 exits): "), "0"):
    try:
        res.append(int(val))
    except ValueError:
        print("Integers only")
print(res)

我们需要lambda作为iter的第一个arg必须是可调用的,因为我们已经添加了用户输出消息,我们已经调用了该函数。