python执行while循环时如何获得实时输入?

python执行while循环时如何获得实时输入?,python,python-3.x,Python,Python 3.x,我正在尝试制作一个计时器(Python3.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循环(以便计时器可以停止)?如果我将

我正在尝试制作一个计时器(Python3.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中键入任何内容,因为循环一直在进行。有什么方法可以解决这个问题吗?

正如评论中所讨论的,这样的方法可能适合您。我不太确定计时器在等待
输入时应该做什么,但这样做可能会有所帮助

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')
编辑:
循环时,打破
循环的唯一方法是键入
N
N
(如果输入是
N
,则使用
.lower()
将输入转换为
N
)。系统时间在进入循环前记录。然后,用户可以键入任何他们想要的内容,只要他们想要,除了
n
。然后,键入
n
将中断循环,再次获取系统时间,并显示开始和结束时间之间的差异。不需要运行计时器,只需要“之前和之后”时间

正如评论中所讨论的,这样的东西可能适合您。我不太确定计时器在等待
输入时应该做什么,但这样做可能会有所帮助

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')
编辑:
循环时,打破
循环的唯一方法是键入
N
N
(如果输入是
N
,则使用
.lower()
将输入转换为
N
)。系统时间在进入循环前记录。然后,用户可以键入任何他们想要的内容,只要他们想要,除了
n
。然后,键入
n
将中断循环,再次获取系统时间,并显示开始和结束时间之间的差异。不需要运行计时器,只需要“之前和之后”时间

如果希望在执行input()时执行代码,则需要使用线程。这会很快变得相当复杂。你确定这就是你需要做的吗?看看哪一个本身是重复的,以帮助你开始。注意:Alex Martelli的基本副本似乎在不同操作系统之间工作时处于不断变化之中。另一个过度使用的选项是使用类似pygame的东西,因此,它将记录您的按键笔划,并检查在循环过程中是否可以使用
select
等待用户输入,而不是像下面的回答那样睡觉。如果您希望在执行输入()时执行代码,则需要使用线程。这会很快变得相当复杂。你确定这就是你需要做的吗?看看哪一个本身是重复的,以帮助你开始。注意:Alex Martelli的基本副本似乎在不同操作系统之间工作时处于不断变化之中。另一个过度使用的选项是使用类似pygame的东西,因此,它将记录您的按键笔划,并在循环过程中检查您是否可以使用
select
等待用户输入,而不是像下面的回答中那样睡觉@BramFran我稍微更改了代码。现在只有一种方法可以中断循环,允许用户继续输入与设置为中断循环的输入不匹配的输入(
n
)。我还添加了一个解释。这正是我所需要的!非常聪明的解决方案。@BramFran我稍微修改了代码。现在只有一种方法可以中断循环,允许用户继续输入与设置为中断循环的输入不匹配的输入(
n
)。我还添加了一个解释。这正是我所需要的!非常聪明的解决方案。