【问题标题】:Checking input in a one line for loop, python在一行for循环中检查输入,python
【发布时间】:2019-01-18 18:20:15
【问题描述】:
lines = [input("Enter the number") for i in range(0,100)]

如果用户输入 7 或更高的数字,我想打破循环。 假设循环是无限的。寻找一种在用户输入时检查输入的方法。

我正在寻找一行代码。

o/p: 1 4 5 2 3 4 2 4 5 6 5 7

【问题讨论】:

  • 7 或更大应该在累积列表中...例如...从一开始就输入 7 是 [][7] 吗?

标签: python python-3.x list for-loop input


【解决方案1】:

我正在寻找一行代码。

这并不总是最好的策略。在这里我建议一个多线解决方案。

要在输入某个值时中断,您可以将列表推导转换为 for 循环。使用list.append 将项目添加到初始化列表。然后break当某个值满足指定条件时。

另外,如下所示,请记住将您的输入转换为int 以便进行比较:

lines = []
for _ in range(100):
    x = int(input('Enter the number:'))
    lines.append(x)
    if x >= 7:
        break

对于无限循环,您可以使用while True

lines = []
while True:
    x = int(input('Enter the number:'))
    # code as before

【讨论】:

    【解决方案2】:

    我认为这是您想要的解决方案。

    list(itertools.takewhile(lambda x: x < 7, iter(lambda: int(input()), None)))
    

    需要itertools,python的内置模块。

    【讨论】:

    • 取决于您是否被允许 itertools 以及是否应包含 7... 但是,[(yield int(input())) for i in itertools.repeat(1)]) 我不会在那里建立一个列表...您可以制作类似于iter(lambda: input(input()), None) ....
    • @JonClements 谢谢你的建议,你真聪明!
    • 如果错过 7 或更高版本是可以的,那么您甚至可以让它不导入并做一些绝对令人呕吐的事情,例如:list(iter(lambda: int(input('enter a number: ')), type('foo', (object,), {'__eq__': lambda self, i: i &gt;= 7})())):p
    • @JonClements 对于整数是可以理解的,但是对于字符串来说,同样的概念是否有效?说,我想在用户输入完成时跳出循环。
    • @ManishSingh 为了明确起见,Jon 推荐在合理的程序中使用这种编码。他只是表明这是可能的。像这样的疯狂技巧应该留给code golf 这样的东西。但如果你喜欢这种东西,请查看我们的姊妹网站Programming Puzzles & Code Golf
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 2014-06-02
    • 2018-02-08
    • 2023-03-27
    • 2022-10-30
    • 2016-07-18
    • 2021-11-29
    相关资源
    最近更新 更多