Pythonによる西暦の和暦変換です。
西暦の入力から和暦の元号を表示する問題と、その提出コードの解答例です。
paizaラーニングのレベルアップ問題集「日付セット」からの出典です。
paiza.jp
・問題
西暦年y、月m、日付dが与えられるので、和暦の元号を表示してください。
和暦は、以下の条件を確認し、西暦から変換してください。
明治は1912年7月29日まで
大正は1912年7月30日から1926年12月24日まで
昭和は1926年12月25日から1989年1月7日まで
平成は1989年1月8日から2019年4月30日まで
令和は2019年5月1日から
・入力される値:
整数y m dが次のように、スペース区切りで1行で入力されます。
y m d
入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。
・期待する出力
以下のような形式で、答えを出力してください。
G年m月d日
Gは"明治"、"大正"、"昭和"、"平成"、"令和"のいずれかの元号です。
今回の問題では、元号のみで和暦年は表示しません。
・条件
すべてのテストケースにおいて、以下の条件をみたします。
1873≦y≦3000
1≦m≦12
1≦d≦31
回答時点よりも未来の日付の元号が与えられた場合も「令和」として表示してください。
西暦y年m月d日は、西暦1873年1月1日から、西暦3000年12月31日の間の有効な日付です。
1873年は改暦後であるため、旧暦について考慮する必要はありません。
僕が作成、提出したコードは、以下のとおりです。
#Pythonによる西暦の和暦変換 #https://paiza.jp/works/mondai #提出コードの解答例 #https://neguse-atama.hatenablog.com y, m, d = map(int, input().split()) new_m = m new_d = d if int(m) < 10: m = str(m) new_m = "0" + m if int(d) < 10: d = str(d) new_d = "0" + d date = str(y) + str(new_m) + str(new_d) date = int(date) if date >= 20190501: print("令和年{}月{}日".format(m, d)) elif date >= 19890108: print("平成年{}月{}日".format(m, d)) elif date >= 19261225: print("昭和年{}月{}日".format(m, d)) elif date >= 19120730: print("大正年{}月{}日".format(m, d)) else: print("明治年{}月{}日".format(m, d))
Pythonのバージョンは、3.x に対応します。
解法としては、暦やカレンダーなどの先入観を捨ててから、単純にデジタル表示をイメージした上で、西暦年、月、日付の並びを、そのまま8桁の数値に置き換えて、それらの大小関係を比較してみました。
paizaラーニングのレベルアップ問題集については、ユーザー同士で解答を教え合ったり、コードを公開したりするのは自由としています。
また授業や研修、教材などにも利用できるそうです。