Day 161クールダウン付きボタン判定を時刻差で実装する
Pythonコード
1import time2 3class Button:4 def __init__(self):5 self.last_pressed = 06 self.cool_down = 2 # クールダウン時間(秒)7 8 def press(self):9 current_time = time.time()10 if current_time - self.last_pressed >= self.cool_down:11 self.last_pressed = current_time12 return True13 else:14 return False15 16def main():17 button = Button()18 while True:19 try:20 num = int(input("ボタンを押しますか?(1: 押す、0: やめる)"))21 if num == 1:22 if button.press():23 print("ボタンを押しました。")24 else:25 print("クールダウン中です。")26 elif num == 0:27 break28 else:29 print("不正な入力です。")30 except ValueError:31 print("不正な入力です。")32 33if __name__ == "__main__":34 main()
解説
- 行1〜2: timeモジュールをインポートします。timeモジュールは、時間に関する関数を提供します。ここでは、time.time()関数を使用して現在の時間を取得します。time.time()関数は、1970年1月1日0時0分0秒からの経過時間を秒単位で返します。
- 行3〜6: Buttonクラスを定義します。Buttonクラスには、last_pressed属性とcool_down属性があります。last_pressed属性は、ボタンが最後に押された時間を保持します。cool_down属性は、ボタンを再度押すまでのクールダウン時間を設定します。
- 行8〜14: pressメソッドを定義します。pressメソッドは、ボタンを押したときに呼び出されます。現在の時間とlast_pressed属性を比較して、クールダウン時間が経過しているかどうかを判断します。経過している場合は、last_pressed属性を更新してTrueを返します。経過していない場合は、Falseを返します。
- 行16〜31: main関数を定義します。main関数は、ボタンを押すかどうかを繰り返し問い合わせます。ボタンを押す場合、Buttonクラスのpressメソッドを呼び出して、ボタンを押せるかどうかを判断します。押せる場合は、ボタンを押したことを表示します。押せない場合は、クールダウン中であることを表示します。input()関数は、ユーザーから入力を受け取ります。int()関数は、入力された文字列を整数に変換します。try-except文は、入力ミスなどでエラーが発生した場合に、エラーを捕捉して処理します。
- 行33〜34: main関数を呼び出します。if __name__ == "__main__":は、スクリプトが直接実行された場合にmain関数を呼び出すための条件文です。
- 行29〜34: 行20〜21と行28〜29: print()関数は、画面に文字や値を表示する関数です。
次に試してみよう
- ボタンのクールダウン時間を変更してみましょう。
- ボタンを押した回数をカウントしてみましょう。
- ボタンを押した時間を記録してみましょう。