2017-05-09 9 views
0

私は、ターミナルで実行する必要がある時計プログラムを作成しました。私はそれを実行するたびに毎秒秒、分、時間を1ずつ増やします。その後、2:1:2:2を1:それは1を出力し、なぜPython Clock Increment

それが唯一の60そして... 1などによって分インクリメントされる秒まで毎秒1秒をインクリメントする必要があり

私は知りませんその後、3:3:3等...

# Clock 
import time 
import sys 


class Counter: 
    count = 0 
    name = "" 

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

    def Increment(self): 
     Counter.count += 1 

    def Reset(self): 
     Counter.count = 0 


class Clock: 

    seconds = Counter("Seconds") 
    minutes = Counter("Minutes") 
    hours = Counter("Hours") 

    def Tick(self): 
     time.sleep(1) 
     Clock.seconds.Increment() 

     if Clock.seconds.count >= 60: 
      Clock.seconds.Reset() 
      Clock.minutes.Increment() 
      if Clock.minutes.count >= 60: 
       Clock.minutes.Reset() 
       Clock.hours.Increment() 
       if Clock.hours.count >= 12: 
        Clock.ResetClock() 

    def ResetClock(self): 
     Clock.seconds.Reset() 
     Clock.minutes.Reset() 
     Clock.hours.Reset() 

    def SetClock(self, seconds, minutes, hours): 
     self.hours = hours 
     self.minutes = minutes 
     self.seconds = seconds 

    def ReadClock(self): 
     sys.stdout.writelines(" \r Current Time: %d:%d:%d" % (Clock.hours.count, Clock.minutes.count, Clock.seconds.count)) 


clock = Clock() 
while True: 
    clock.Tick() 
    clock.ReadClock() 

答えて

3

あなたはあなたの代わりにCounterクラスのインスタンスレベルの変数のクラスレベルの変数を持っています。これは、変数countがクラス間で共有されていることを意味します。そのため、Incrementが呼び出されるたびにインクリメントされます。

class Counter: 
    def __init__(self, name): 
     self.name = name 
     self.count = 0 

    def Increment(self): 
     self.count += 1 

    def Reset(self): 
     self.count = 0 
+0

エクセレント:

あなたはcountではなく、クラスのインスタンスの一部である必要があります!ありがとうございました!最初の日はpythonを使用しているので、私はそれをもっと理解しています。私は6分で答えを受け入れます。 – Noob