在Python中设置计时器

时间:2014-10-21 14:33:36

标签: python timer

嘿伙计们我正在用python做一个程序。这是一个计算程序,它给你两个从2到10的随机数,然后询问你有多少是2 * 4.

如果你的答案是正确的,它会给你一个观点。现在,我希望程序允许用户计算20秒,当20秒结束时,它会显示你有多少积分。

到目前为止我的代码 - >

__author__ = 'Majky'
import random
import time

a = random.randint(2, 10)
b = random.randint(2, 10)
print("How much is", a, "times", b)
t = 0

odg = int(input("Answer ?"))
sec = 0

while sec < 20:

if odg == a * b:
print("Correct")
t = +1
print("Incorrect")

print("Your points are", t)

3 个答案:

答案 0 :(得分:0)

您可以使用time.sleep(20)功能等待20秒。

此函数暂停执行指定的秒数。参数可以是浮点数,以指示更精确的睡眠时间。

实际的暂停时间可能小于请求的时间,因为任何捕获的信号将在执行该信号的捕获例程后终止sleep()。此外,由于系统中其他活动的安排,暂停时间可能比任意数量的请求时间长。

答案 1 :(得分:0)

你将要使用threading,并打开一个计算该时间的并行线程(可能通过使用time.sleep())并返回一次,一旦返回,主线程将停止执行并返回结果。
在主程序中使用sleep()将暂停执行该时间,这不是我想要的。您希望用户能够在计时器运行时与程序进行交互。这就是使用线程模块中的线程的原因。

以下是使用线程的快速示例(如果您需要任何特定的话,请调整它):

import random
import time

def main():
  thread_stop = threading.Event()
  thread = threading.Thread(target=user_thread,  args=(2, thread_stop))

  time.sleep(20)

  thread_stop.set()


def user_thread(arg1, stop_event):
  t = 0
  while(not stop_event.is_set()):
      a = random.randint(2, 10)
      b = random.randint(2, 10)
      print("How much is", a, "times", b)

      odg = int(input("Answer ?"))

      if odg == a * b:
        print("Correct")
        t += 1
      else:
        print("Incorrect")

  print("Your points are", t)

main()


这里还有一个使用信号的例子,如果20秒结束并且计算结果,则会在回答中间停止用户。此示例使用信号,这本身就是一个控制执行流程的有趣模块,您应该在有机会时检查其文档。
我也意识到你的代码中有另一个错误,我忽略了,现在在两个例子中都得到纠正,当你想增加“t”时,使用“t + = 1”,因为“t = + 1”是不正确,最后一个表达式只是每次都将“正”分配给t,所以不会增加。干杯!

import signal

t = 0
#Here we register a handler for timeout
def handler(signum, frame):
  #print "Time is up!"
  raise Exception("Time is up.")

#function to execute your logic where questions are asked
def looped_questions():
  import random
  global t
  while 1:
    #Here is the logic for the questions
    a = random.randint(2, 10)
    b = random.randint(2, 10)
    print("How much is", a, "times", b)
    odg = int(input("Answer ?"))
    if odg == a * b:
      t += 1
      print("Correct")
    else:
      print("Incorrect")

#Register the signal handler
signal.signal(signal.SIGALRM, handler)

#Set the timeout
signal.alarm(20)

try:
  looped_questions()
except Exception, exc:
  print exc
  #Here goes the results logic
  print("Your points are", t)

此外,不要忘记添加到健全性检查,以便无效的用户输入不会破坏您的代码。我会把它留给你;)

答案 2 :(得分:0)

您可以使用time.time()执行此类操作。

import time
...
start = time.time()
answer = raw_input('enter solution')
finish = time.time()
if finish - start > 20:
    #failure condition
else:
    #success condition