簡體   English   中英

如何使計時器在python中並發運行

[英]How to make a timer run concurrently in python

我正在閱讀Zed Shaw的《學習Python的艱難方法》,作為一項練習,我們被要求創建一個游戲。 我想創建一個押韻游戲,該押韻游戲會打印出一個單詞,而玩家有5秒鍾的時間來猜測一個與押記單詞押韻的單詞。

我能夠在沒有計時器的情況下使游戲正常運行。 但是,我不知道如何使計時器與游戲同時運行。 下面是代碼:

#libraries
libs = [about, cake, chart, score]
#points 
p = 0
#timer
class countdown(object):

    def __init__(self, timer):
        self.timer = timer

        while timer != 0:

            print "timer: %i" % timer
            sleep(1)
            timer -= 1

        else:
            exit("You ran out of time!")

class engine(object):
    # randomly select a library    
    i = randint(0, len(libs)-1)

    randlib = libs[i].words.split(' ')     

    rhymeword = sample(randlib, 1)

    print rhymeword
    guess = raw_input("> ")

    while guess not in randlib:

        print rhymeword
        guess = raw_input("> ")

    else:
        # to reset the timer    
        timer = 5
        # points assignment
        if guess in libs[i].onesyl.split(' '):
            p += 1
            print "Points: %s" % p
        elif guess in libs[i].twosyl.split(' '):
            p += 2
            print "Points: %s" % p
        elif guess in libs[i].threesyl.split(' '):
            p += + 3
        print "Points: %s" % p

t = countdown(5)
e = engine()

t.start()
e.start()

我想做的是在用戶嘗試猜測時讓計時器倒數,然后在輸入正確答案后重新啟動計時器。

我在python文檔中研究了多處理,但是不確定如何使它工作。

真的,這是一個糟糕的設計,如果您想要這樣的計時器,您應該查看gui或至少curses ...您的輸出可能不會看起來像您希望的那樣

所有這些我想這大概是您想要的行為

import sys,time,threading

def wait_for_secs(N):
    for i in range(N):
        print N-i
        time.sleep(1)
    print "OUT OF TIME!!!"
    sys.exit(1)

threading.Thread(target=wait_for_secs,args=(15,)).start()
answer = raw_input("5+6*3=? >")
print "You Answered:",answer
sys.exit(0)

您可以使用標准模塊信號制作一個簡單的計時器。 這是一個例子:

import signal, sys

def handler(signum, frame):
    #print 'Signal handler called with signal', signum
    print "You ran out of time!"
    sys.exit()


def engine():    
    guess = raw_input("> ")
    print "fast enough to input",guess

# Set the signal handler and a 5-second alarm
signal.signal(signal.SIGALRM, handler)
signal.alarm(5)

engine()

signal.alarm(0)          # Disable the alarm

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM