我对编程真的很陌生,我正在尝试为幼儿创建数学测验。他们必须在60秒内回答尽可能多的问题。我有一个计时器和一个问题发生器
但是问题是,我无法让它们同时运行,例如,程序等待1秒钟,问一个问题,等到用户回答后,再使用计时器等。我想要计时器在回答问题时继续前进,不要停下来!
这是我的计时器:
timer = 5
time.sleep(1)
timer -= 1
通过定义变量来产生我的问题(我将其缩短为加法运算):
def questions():
first_number = random.randint(1, 50)
second_number = random.randint(1, 50)
print("What is", first_number, "+", second_number,"?")
answer = int(input("Answer: "))
if answer == first_number + second_number:
print("Correct!")
addition_score += 1
else:
print("Wrong!")
中断一个input()
。让我们首先关注一个简单的任务:您想questions()
重复调用,直到总经过时间为60秒或更长时间。您可以通过使用测量时间来做到这一点,该时间time.time()
返回秒数,因为...有一些随机的“时间零” ---没关系。码:
start_time = time.time() # "now" at the start
while time.time() < start_time + 60: # "not 60 seconds later"
questions()
诀窍是不使用time.sleep()
:从技术上讲,该input()
调用已经是“阻塞”,并且您只能同时运行一个阻塞功能(除非您引入线程或多个进程,这在这里是完全过分的)。
即使正确回答了最后一个问题,即使在60秒钟后回答了该问题,也将算作+1。可以通过questions()
返回True或False来更改此逻辑,并且score += 1
仅在返回True且还有剩余时间时才执行零件。
如果您想在60秒后真正打断一下,那会有些困难。尝试例如signal.alarm(60)
(不适用于Windows)。在给定的秒数后,它将发送信号“闹钟”。默认情况下,它会终止进程。如果您想抓住它并做其他事情,请尝试另外做:signal.signal(signal.SIGALRM, signal.default_int_handler)
。它会在60秒后模拟Ctrl-C,您可以使用以下命令进行捕获:
try:
while True: # infinite loop, until interrupted
questions()
except KeyboardInterrupt:
pass # interrupted, now we're out of the loop
(time.time()
此版本不再需要。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句