こんにちは、kamekoです。2019年4月1日に新しい元号『令和(れいわ)』が発表されました。
PyQでは、実務で実装することもある西暦年を和暦年に変換するクエストを用意しています。 今回、2019年5月1日から元号が変わることにあわせて、PyQの元号を計算するクエストを更新しました。
「令和」が追加されたクエストの内容
西暦年を引数で渡したら、和暦年を返す関数を作成する問題です。
実行結果は以下のようになります。
これまでの問題は西暦年を渡すだけだったので、元号が変更された年は新しい元号の1年になります。 新元号発表を記念し、2問目に西暦の年月日から和暦を表示する問題を追加しました。 追加した問題は、年月日まで考慮して、元号を表示します。
追加した問題の問題文を以下に掲載します。是非、挑戦してみてください。
追加された問題
以下の条件を満たす、処理を関数 convert_to_wareki
に追加してください。
- 引数
y
に西暦の年、m
に月、d
に日を数値で指定します。 - 和暦(元号XX年)を返します。(例. 1974年5月5日は「昭和49年」)
- 昭和開始日以前の日付の場合は、「昭和以前」と返します。
- 各元号の1年は「元年」と返します。(例. 2019年6月1日は「令和元年」)
- 各元号の開始日は辞書
WAREKI_START
に格納されています。 - 辞書
WAREKI_START
は新しい元号から順番に並んでいます。
修正前のコード
WAREKI_START = {'令和': datetime(2019, 5, 1), '平成': datetime(1989, 1, 8), '昭和': datetime(1926, 12, 25)} def convert_to_wareki(y, m, d): """西暦の年月日を和暦の年に変換する.""" return def main(): print('西暦2020年4月1日は、', convert_to_wareki(2020, 4, 1), sep='') print('西暦2019年5月1日は、', convert_to_wareki(2019, 5, 1), sep='') print('西暦2019年4月30日は、', convert_to_wareki(2019, 4, 30), sep='') print('西暦1989年1月8日は、', convert_to_wareki(1989, 1, 8), sep='') print('西暦1989年1月7日は、', convert_to_wareki(1989, 1, 7), sep='') print('西暦1974年5月5日は、', convert_to_wareki(1974, 5, 5), sep='') print('西暦1926年12月25日は、', convert_to_wareki(1926, 12, 25), sep='') print('西暦1926年12月24日は、', convert_to_wareki(1926, 12, 24), sep='') if __name__ == '__main__': main()
実行結果は以下のようになります。
実務では、元号の開始日のデータはデータベースに保存しておき、元号が増えたら新元号のレコードを1行追加するでしょう。プログラミングは、元号のテーブルのデータから、自動でWAREKI_START辞書を生成しているような実装になりますね。あとは、元号が増えてもプログラムの更新は不要となります。
PyQでは、実務で役立つようなコードで学習ができるように心がけて問題作成をしています。