スクリプトを実行した日の曜日を自動的に判定することが課題であるとして、以下のような方法はいかがでしょうか。
output_menus_of_training.py
上記コードを output_menus_of_training.py
という名前で保存したとして、実行コマンドと期待される動作は次のようになります:
cmd
1# コマンド
2python output_menus_of_training.py
3# 出力例
4今日(火曜日)は胸・腹です
<以下、コードの軽い説明>
まず datetime
と locale
が上記コードでどのように使われているかについて。
locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8')
はコードが実行されるプロセスにおけるロケールを日本に設定します。
datetime.datetime.today()
はスクリプトを実行した日時に相当する情報を持つ datetime
オブジェクトを返します。
datetime
オブジェクトのメソッド weekday()
は月曜日(0)~日曜日(6)に相当する数字を返します。
従って datetime.datetime.today().weekday()
はスクリプトが実行された日の曜日を0(月)~6(日)で返します。
次にトレーニングの内容を返す部分の修正について。
if 文を用いて場合分けすると、書いたときは分かりやすいのですが、場合分けの数が多くなるとそれだけコードが長くなり可読性が下がります。
また、個人的にはミスも生じやすいと考えています。
そこで辞書型 dict
を用いて曜日(0~6)とトレーニングの内容の対応付けを見やすくします。この方法だと後から内容を追加しても、if 文を追加するよりはだいぶ可読性が良くなるでしょう。
今回は曜日をキーに、トレーニングの内容を値にもつ辞書型オブジェクト trainings
を定義します。
以上から、 trainings[datetime.datetime.today().weekday()]
はスクリプトが実行された日の曜日に対応するトレーニングの内容を文字列として返すことになります。
これを print
文でコマンドプロンプトに出力しています。
<コードの軽い説明 終わり>
上記コード内では辞書型を用いていますが、ご質問者様が作成なさった if 文での場合分けを代わりに用いていただいても問題ありません。
その場合は、例えば次のようになります:
# -*- coding: utf-8 -*-
"""
output_menus_of_training.py
output menus of training according to today's day of the week.
Usage
-----
python output_menus_of_training.py
Reference
----------------
using `datetime` in Japanese timezone
https://note.nkmk.me/python-datetime-day-locale-function/
"""
import datetime
import locale
_ = locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8')
def main():
weekday = datetime.datetime.today().weekday()
if weekday == 0:
print(u'今日(月曜日)は背中・前腕・二頭(21レップ法)です')
elif weekday == 1:
print(u'今日(火曜日)は胸・腹です')
elif weekday == 2:
print(u'今日(水曜日)は肩・僧帽です')
elif weekday == 3:
print(u'今日(木曜日)は腕・腹・ヒラメです')
elif weekday == 4:
print(u'今日(金曜日)は胸・前腕です')
elif weekday == 5:
print(u'今日(土曜日)は肩・僧帽・腹です')
else:
print(u'今日(日曜日)は脚です')
if __name__ == "__main__":
main()