転職のためにPythonでAIとIoTを学ぶ
2025年の1~6月いっぱいまでの期間でPythonを使ってAIとIoTの知識を学び、転職のためのポートフォリオを作ることになった。学んだ記録をつけて、学習を振り返るために記録を残す。
2025年1月10日:Pythonで学習タイマーを作ってみた
import datetime import time import sys # 現在の時限を取得する(文字列で比較する) def get_current_period(timetable, current_time): for i, (start, end) in enumerate(timetable, 1): if start <= current_time <= end: return i return "休憩中" # 終了までの残り時間を分単位で取得する(datetimeオブジェクトで計算する) def get_remaining_minutes(start, end): start_time = datetime.datetime.strptime(start, "%H:%M") end_time = datetime.datetime.strptime(end, "%H:%M") remaining_time = end_time - start_time return remaining_time.seconds // 60 def main(): timetable = [ ("09:30", "10:15"), ("10:25", "11:10"), ("11:20", "12:05"), ("12:55", "13:40"), ("13:50", "14:35"), ("14:45", "15:30"), ] # 下校時刻だけを文字列で設定していてdatetimeオブジェクトで比較できないので冗長を許容 end_time = datetime.datetime.strptime("15:30", "%H:%M").strftime("%H:%M") while True: current_time = datetime.datetime.now().strftime("%H:%M") if current_time >= end_time: print("下校時間です!お疲れさまでした。(スクリプトを終了します)") # スクリプトを終了 sys.exit() break period = get_current_period(timetable, current_time) if period != "休憩中": start, end = timetable[period - 1] remaining = get_remaining_minutes(current_time, end) print(f"現在{period}時限目です。授業はあと{remaining}分で終わります。") else: print("休憩中です") # 下校までの残り時間 remaining_to_end = get_remaining_minutes(current_time, end_time) print(f"下校まであと{remaining_to_end}分です。") # 5分間隔で実行すための待機 time.sleep(300) # Pythonのスクリプトが直接実行された場合にのみ実行する if __name__ == "__main__": main()
実行イメージ(変わらないけども)
PS C:\Users\hoge> python study_timer.py 現在5時限目です。授業はあと29分で終わります。 下校まであと83分です。 現在5時限目です。授業はあと24分で終わります。 下校まであと78分です。
感想
- 時間割を手打ちしたかったので雑に定義したら、9時台がうまく動かなかった。。原因は以下。
>>> "9:00" >= "09:10" True >>> "09:00" >= "09:10" False
- 現在時刻を2回取得していて、授業と下校の残り時間に差ができていたので取得を1回にする
- メソッドの名前をわかりやすくする
- DRYじゃない部分を修正
- いかんともしがたい冗長部分にコメントでいいわけしておく