転職のためにPythonでAIとIoTを学ぶ
2025年の1~6月いっぱいまでの期間でPythonを使ってAIとIoTの知識を学び、転職のためのポートフォリオを作ることになった。学んだ記録をつけて、学習を振り返るために記録を残す。
使用教材・機材
現時点の学習のための使用教材・機材は以下の通り。
・2015年製『MacBookPro』メモリ8GB・intelCPU
・『やさしいPython』初版(2018年)
2025年1月8日:Pythonで学習タイマーを作ってみた
import datetime import time import sys # 現在時刻を取得する def current_time_obj(): return datetime.datetime.now() # 現在の時限を取得する def get_current_period(timetable, current_time): for i, (start, end) in enumerate(timetable, 1): if start <= current_time <= end: return i return "休憩中" # 終了までの残り時間を分単位で取得する def get_remaining_time(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 = [ ("9:30", "10:15"), ("10:25", "11:10"), ("11:20", "12:05"), ("12:55", "13:40"), ("13:50", "14:35"), ("14:45", "15:30"), ] # 下校時刻 end_time = "15:30" end_time_obj = datetime.datetime.strptime(end_time, "%H:%M") while True: if current_time_obj().hour >= end_time_obj.hour and current_time_obj().minute >= end_time_obj.minute: print("下校時間です!お疲れさまでした。(スクリプトを終了します)") # スクリプトを終了 sys.exit() break current_time_strftime = current_time_obj().strftime("%H:%M") period = get_current_period(timetable, current_time_strftime) if period != "休憩中": start, end = timetable[period - 1] remaining = get_remaining_time(current_time_strftime, end) print(f"現在{period}時限目です。授業はあと{remaining}分で終わります。") else: print("休憩中です") # 下校までの残り時間 now = current_time_obj() remaining_to_end = end_time_obj - now print(f"下校まであと{remaining_to_end.seconds // 60}分です。") # 5分間隔で実行すための待機 time.sleep(300) # Pythonのスクリプトが直接実行された場合にのみ実行する if __name__ == "__main__": main()
実行イメージ
PS C:\Users\hoge> python study_timer.py 現在5時限目です。授業はあと29分で終わります。 下校まであと83分です。 現在5時限目です。授業はあと24分で終わります。 下校まであと78分です。
感想
- メソッドにreturnを入れないと返り値がNoneになる。rubyではreturnを書くときは「あえてそれを返してます」みたいな意味を含めていたので違和感を感じる。endみたいなもんだと思っておけばいいか。
- あとNoneってなんやねん。。nilのこと?調べておく。
- rubyで言うところの配列、ハッシュがpythonだとリスト、辞書と呼ぶようで慣れない。。あと.freezeされた配列はタプルっていうらしい。
- enumerate関数の使いどころがわかんないけど、リストをループさせるときにenumerateオブジェクトにしておくとindex番号も出力できるよ!みたいなノリの理解をした。
- pythonのmapやsortのメソッドはrubyと似た挙動だが、ブロック処理ができないので、やりたかったらいちいちlambdaで無名関数を作って添える感じになるっぽい。