【问题标题】:How can I get real time input while python executes a while loop?python执行while循环时如何获取实时输入?
【发布时间】:2017-01-16 17:34:19
【问题描述】:

我正在尝试制作一个计时器(Python 3.6.0)。我知道还有其他带有更简单计时器的帖子,但我想制作一个更复杂的计时器。这是我的代码:

import time

x = 0

run = input("Start timer? [Y]/[N]")
while run == 'Y':
    time.sleep(1)
    x += 1
    print(x)
else:
    print("end of code")

有没有办法在程序运行时中断 while 循环(以便计时器停止)?如果我将“in = input()”放在“x += 1”行下以便用户可以停止循环,则计时器将停止计数,因为用户必须每秒提供输入。如果我在没有任何输入的情况下运行上述代码,我将无法在 Python Shell 中输入任何内容,因为循环会继续进行。有什么办法可以解决这个问题吗?

【问题讨论】:

  • 如果您希望代码在执行 input() 时执行,则需要使用线程。这很快就会变得相当复杂。你确定这是你需要做的吗?
  • 请参阅here,它本身就是一个副本,以帮助您入门。注意:Alex Martelli 的基本副本似乎在跨不同操作系统工作时不断变化。
  • 另一个过分的选择是使用 pygame 之类的东西,所以它会记录你的击键并在循环期间检查它
  • 或者您可以使用select 等待用户输入,而不是像这个答案here 中那样睡觉

标签: python python-3.x


【解决方案1】:

正如在 cmets 中所讨论的,这样的事情可能适合您。我不太确定计时器在等待input 时应该做什么,但也许这样的事情会有所帮助。

import time

start_timer = input('Do you want to start the timer? Y / N: ')

if start_timer.lower() == 'y':
    print('Type N or n to break the loop')
    start = time.time()
    while start_timer.lower() != 'n':
        start_timer = input()

    end = time.time()
    print('Total loop time: {}'.format(end - start))
else:
    print('Ok, ending')

编辑: 跳出while 循环的唯一方法是键入Nn(使用.lower() 会将输入转换为n,如果它是N)。在进入循环之前记录系统时间。然后,用户可以输入他们想要的任何内容,但n 除外。然后键入n 将中断循环,再次使用系统时间,并显示开始时间和结束时间之间的差异。不需要运行计时器,只需要“之前和之后”时间。

【讨论】:

  • @BramFran 我稍微更改了代码。现在只有一种方法可以打破循环,允许用户继续输入输入,前提是它们与设置为打破循环的输入不匹配(在这种情况下为n)。我还添加了解释。
  • 这正是我所需要的!非常聪明的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-16
相关资源
最近更新 更多