我使用了这篇文章
中的以下代码from threading import Thread
import time
import os
answer = None
def ask():
global start_time, answer
start_time = time.time()
answer = input("Enter a number:\n")
time.sleep(0.001)
return 0
def timing(t):
global answer
time_limit = t
while True:
time_taken = time.time() - start_time
if answer is not None:
print(f"You took {time_taken} seconds to enter a number.")
time_limit += 3
answer = None
if time_taken > time_limit:
print("Time's up !!! \n"
f"You took {time_taken} seconds.")
os._exit(1)
time.sleep(0.001)
t1 = Thread(target=ask)
t2 = Thread(target=timing, args=(5,))
t1.start()
t2.start()
我想做的是,如果用户在 5 秒之前输入一个数字,他还有 3 秒的时间来输入另一个数字。如此重复,直到时间过去。但我不知道如何让它“回忆”功能“ask”。
我很高兴获得任何帮助。
也许你可以稍微改变一下逻辑:
ask()
时,计算final_time
(即从现在开始的未来5秒)timing()
中,您只检查这个final_time
是否仍在将来,如果不是,则退出脚本final_time
增加3秒:import datetime
import os
import time
from threading import Thread
def ask():
global final_time
final_time = datetime.datetime.now() + datetime.timedelta(seconds=5)
while True:
start_time = datetime.datetime.now()
answer = input("Enter a number:\n")
time_taken = (datetime.datetime.now() - start_time).seconds
final_time += datetime.timedelta(seconds=3)
print(f"You took {time_taken} seconds to enter a number.")
print(
f"You have {(final_time - datetime.datetime.now()).seconds} seconds still left."
)
def timing():
while True:
time.sleep(0.001)
if final_time < datetime.datetime.now():
print("Time's up !!!")
os._exit(1)
t1 = Thread(target=ask)
t2 = Thread(target=timing)
t1.start()
t2.start()
打印(例如):
Enter a number:
1
You took 0 seconds to enter a number.
You have 7 still left.
Enter a number:
2
You took 1 seconds to enter a number.
You have 8 still left.
Enter a number:
1
You took 3 seconds to enter a number.
You have 8 still left.
Enter a number:
1
You took 5 seconds to enter a number.
You have 6 still left.
Enter a number:
Time's up !!!