【问题标题】:Stop reading input when a key is pressed按下键时停止读取输入
【发布时间】:2015-05-01 12:44:54
【问题描述】:

我是编程新手,已经开始学习 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): “))

【问题讨论】:

  • 你在问哪个更好?
  • 第二个例子可读性更强,代码更少。
  • 个人喜好(或遵循您工作地点的风格手册)。我更喜欢第一个(显然 cdonts 更喜欢第二个)。我的理由是我不想重复任何代码行,而 while true 对我来说似乎更具可读性。个人喜好。
  • 第二种方案不需要最后一行代码。
  • 两者都不是pythonic,因为您应该使用try/except,您的代码会因大量输入而出错

标签: python input while-loop


【解决方案1】:

更多pythonic方式:

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

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

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

【讨论】:

  • 输入"",看看转换成int会发生什么
  • @PadraicCunningham 我没有转换为 int。
  • @levi OP 正在转换为 int。
  • @Katpoes 但是如果您添加演员表,则与 OP 相同。它会失败。他应该处理这种情况,这取决于他想如何捕捉错误。
  • 我喜欢@Katpoes 解决方案,因为它使用基本的语言结构,并引入了 OP 尚未实现的 try/except。列表推导和交互工具非常酷,但如果您刚刚开始编程,它们并不是容易理解的概念。
【解决方案2】:
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.")

尝试使其尽可能接近您现有的解决方案并尽可能易读。

【讨论】:

    【解决方案3】:

    您可以将lambdaiter 结合使用,以允许您将字符串添加到输入中以向用户提供消息,并使用try/except 来捕获输入的任何无法转换为int 的值,从而输出适当的消息对用户来说,iter 的第二个参数是一个哨兵值,一旦进入就会打破循环。它必须是一个字符串,因为在我们到达 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 的第一个参数必须是可调用的,所以因为我们已经添加了用户输出消息,所以我们已经调用了该函数。

    【讨论】:

      猜你喜欢
      • 2020-04-18
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多