我是编程新手,已经开始学习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): “))
答案 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)
您可以将lambda
与iter
结合使用,以便在输入中添加字符串以向用户发送消息,并使用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必须是可调用的,因为我们已经添加了用户输出消息,我们已经调用了该函数。