0

プログラムは、初めて Expired を出力します。印刷期限が切れる前に、コードが少なくとも4回「期限切れではない」と印刷することを期待しています。誰かが理由を説明して、コードを修正するのを手伝ってくれませんか。ありがとうございました

import time
TIMEOUT =  5

class Timer ():
    def __init__(self):
        self.timeout = time.time()+TIMEOUT
    def isExpired ():
        return time.time() > self.timeout

timing = Timer()

def main():
    while 1:
        if timing.isExpired:
            print "Expired"
            return
        else:
            print "Not expired"
            print "sleeping for 1 second"
            time.sleep(1)

if __name__== "__main__":
    main()
4

2 に答える 2

3

いくつかの問題があります。

  1. isExpiredメソッドに自己引数を指定していません。と定義しdef isExpired(self):ます。

  2. ループの反復ごとに新しい Timer インスタンスを作成しています。timing = Timer()while ループの外側に移動します。

  3. timing.isExpiredメソッド オブジェクト自体への参照です (ブール値のコンテキストでは常に true です)。timing.isExpired()実際に呼び出すには、行う必要があります。

これらはすべて、 とは関係のない基本的な Python の問題ですTimer。クラスの使用方法などについては、Python チュートリアルを参照してください。

于 2012-07-22T21:34:31.807 に答える
1

Timer毎回インスタンスを作成しています。ループから離してください。そうしないと、while ループが終了しません。また、メソッドなので呼び出す必要がありますtiming.isExpired。したがって、コードは次のようになります。

import time
TIMEOUT = 60 * 5

class Timer ():
    def __init__(self):
        self.timeout = time.time()+TIMEOUT
    def isExpired (self):
        return time.time() > self.timeout


def main():
    timing = Timer()
    while 1:
        if timing.isExpired():
            print "Expired"
            return
        else:
            print "Not expired"
            print "sleeping for 1 second"
            time.sleep(1)
于 2012-07-22T21:35:13.743 に答える