2013-10-13 16 views
0

我正在爲我朋友的班級做一個簡單的數學考試。學生將只有45秒來解答每個答案。有沒有一種方法可以讓計時器與其餘代碼運行同時計數並達到45次停止?如何讓定時器與Python中的其他代碼同時運行?

測試看起來是這樣的:

test = raw_input("How much is 62x5-23?") 
if test == '287': 
    print "Well done!" 
+0

這可能有助於http://stackoverflow.com/http://stackoverflow.com/questions/18950092/using-countdown-timer-to-jump-out-of-while-loop-python –

+0

希望這有助於:http://stackoverflow.com/問題/ 12435211/python-threading-timer-repeat-function-every-n-seconds –

回答

0

下面是一些代碼,我使用一次(剝離部分頁面現在是在一個域中棚戶手中的網絡上,所以沒有信貸,信用是因爲,黯然):

import signal 

class TimeoutException(Exception): 
    pass 

def timeout(timeout_time, default = None): 
    def timeout_function(f): 
     def f2(*args, **kwargs): 
      def timeout_handler(signum, frame): 
       raise TimeoutException() 

      old_handler = signal.signal(signal.SIGALRM, timeout_handler) 
      signal.alarm(timeout_time) # triger alarm in timeout_time seconds 
      try: 
       retval = f(*args, **kwargs) 
      except TimeoutException, e: 
       if default == None: 
        raise e 
       return default 
      finally: 
       signal.signal(signal.SIGALRM, old_handler) 
      signal.alarm(0) 
      return retval 
     return f2 
    return timeout_function 

# use like this: 
@timeout(45) 
def run(): 
    test = raw_input("How much is 62x5-23? ") 
    if test == '287': 
     print "Well done!" 

# alternatively, pass a value that will be returned when the timeout is reached: 
@timeout(45, False) 
def run2(): 
    test = raw_input("How much is 62x5-23? ") 
    if test == '287': 
     print "Well done!" 

if __name__ == '__main__': 
    try: 
     run() 
    except TimeoutException: 
     print "\nSorry, you took too long." 

    # alternative call: 
    if run2() == False: 
     print "\nSorry, you took too long." 

編輯:可能適用於僅Unix類型OS'es。

+0

我在空閒狀態下複製並粘貼了代碼,但沒有奏效。我是Python新手,所以有一點解釋會非常感謝。謝謝! – VagosLabrou

+0

@VagosLabrou你有沒有在Windows上運行Python?我不知道它是否可以在Windows上工作(信號更像是Unix的東西)。 – robertklep

+0

是的,我正在使用Windows。 – VagosLabrou

相關問題