[英]How to run a background timer in Python
我目前正在制作一个数学游戏,用户有 60 秒的时间回答尽可能多的问题。 到目前为止,除了计时器应该倒数到 0 或数到 60 然后停止游戏之外,我已经完成了所有工作。 现在,我将计时器设置为 time.clock() 以计数到 60,而当计时器小于该计时器时,游戏将继续运行。 然而,由于某种原因, time.clock() 没有像我预期的那样工作。 我还尝试同时运行两个 while 循环,但也没有用。 任何人都可以在这里帮助我吗? 只是寻找一种在后台运行计时器的方法。
这是我的代码:
score = 0
timer = time.clock()
lives = 3
while timer < 60 and lives > 0:
if score >= 25:
x = random.randint(-100,100)
y = random.randint(-100,100)
answer = int(raw_input("What is %d + %d? " % (x,y)))
if answer == x + y:
print "Correct!"
score += 1
else:
print "Wrong!"
lives -= 1
elif score >= 20:
x = random.randint(-75,75)
y = random.randint(-75,75)
answer = int(raw_input("What is %d + %d? " % (x,y)))
if answer == x + y:
print "Correct!"
score += 1
else:
print "Wrong!"
lives -= 1
elif score >= 15:
x = random.randint(-50,50)
y = random.randint(-50,50)
answer = int(raw_input("What is %d + %d? " % (x,y)))
if answer == x + y:
print "Correct!"
score += 1
else:
print "Wrong!"
lives -= 1
elif score >= 10:
x = random.randint(-25,25)
y = random.randint(-25,25)
answer = int(raw_input("What is %d + %d? " % (x,y)))
if answer == x + y:
print "Correct!"
score += 1
else:
print "Wrong!"
lives -= 1
elif score >= 5:
x = random.randint(-10,10)
y = random.randint(-10,10)
answer = int(raw_input("What is %d + %d? " % (x,y)))
if answer == x + y:
print "Correct!"
score += 1
else:
print "Wrong!"
lives -= 1
elif score >= 0:
x = random.randint(-5,5)
y = random.randint(-5,5)
answer = int(raw_input("What is %d + %d? " % (x,y)))
if answer == x + y:
print "Correct!"
score += 1
else:
print "Wrong!"
lives -= 1
if lives == 0:
print "Oh no! You ran out of lives! Your score was %d." % score
elif timer == 60:
print "Time's up! Your score is %d." % score
else:
print "Goodbye!"
使用time.time()
,它返回纪元时间(即自1970年1月1日UNIX Time以来的秒数)。 您可以将其与开始时间进行比较,以获取秒数:
start = time.time()
while time.time() - start < 60:
# stuff
您可以在任何时候(即使用户正在输入信息)使用带信号的计时器来将您从代码中拉出来,但这要复杂一些。 一种方法是使用信号库:
import signal
def timeout_handler(signal, frame):
raise Exception('Time is up!')
signal.signal(signal.SIGALRM, timeout_handler)
这定义了引发异常的函数,并在发生超时时调用。 现在,您可以将while循环放入try catch块中并设置计时器:
signal.alarm.timeout(60)
try:
while lives > 0
# stuff
except:
# print score
一种更简单的方法是创建一个变量来确定计时器应该运行多长时间。 这是一个例子
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.