Day 120クールダウン付きスタックで連打を制限する
Pythonコード
1class CoolDownStack:2 def __init__(self):3 self.stack = []4 self.cool_down_time = 3 # クールダウン時間(秒)5 6 def push(self, item):7 import time8 current_time = time.time()9 if self.stack and current_time - self.stack[-1][1] < self.cool_down_time:10 print("クールダウン中です。しばらくお待ちください。")11 return12 self.stack.append((item, current_time))13 14 def pop(self):15 if not self.stack:16 return None17 return self.stack.pop()[0]18 19# スタックの使用例20stack = CoolDownStack()21while True:22 print("1. プッシュ 2. ポップ 3. 終了")23 try:24 choice = int(input("選択: "))25 except ValueError:26 print("無効な入力です。数字を入力してください。")27 continue28 if choice == 1:29 item = input("アイテム: ")30 stack.push(item)31 elif choice == 2:32 print(stack.pop())33 elif choice == 3:34 break35 else:36 print("無効な選択です。")
解説
- 行1〜3: クールダウン付きスタッククラスCoolDownStackを定義します。スタックはリストで実装され、クールダウン時間は3秒に設定されています。__init__メソッドはクラスの初期化に使われます。
- 行5〜10: pushメソッドでアイテムをスタックに追加します。ただし、クールダウン中の場合は追加しません。time.time()は現在の時間を返す関数です。
- 行12〜14: popメソッドでスタックからアイテムを取り出します。スタックが空の場合はNoneを返します。list.pop()はリストの最後の要素を取り除いて返します。
- 行16〜25: スタックの使用例を示します。プッシュ、ポップ、終了の選択肢から選択できます。input()はユーザーの入力を待ちます。
- 行26〜32: try-exceptブロックで入力ミスを処理します。int()は文字列を整数に変換します。ValueErrorは整数への変換に失敗したときに発生します。
- 行10〜36: 補足: print() は画面に文字や値を表示する関数です。
次に試してみよう
- クールダウン時間を変化させる
- スタックの最大サイズを設定する
- スタックに優先度をつけて取り出す