#Pythonで学ぶアルゴリズム< 年号変換 >
##はじめに
基本的なアルゴリズムをPythonで実装し,アルゴリズムの理解を深める.
その第7弾として年号を扱う.
##西暦を年号へ
今回は明治~令和まで変換できるようにした.ただし,後でも記述するが,今回は汎用性のあるプログラムとしたため,年号の基準と年号名だけ追加することでいくらでも拡張することができる.ただし,同じ年の年号(例: 昭和64年と平成元年)は新たな元号とする.
明治~令和までの元年に対する西暦,つまり年号の境界を次に示す.
|年号|西暦|
|:-:|:-:|:-:|:-:|
|明治元年|1868年|
|大正元年|1912年|
|昭和元年|1926年|
|平成元年|1989年|
|令和元年|2019年|
以上を踏まえて,pythonに実装する.
以下にコードと出力を示す.
#####コード
"""
2020/12/18
@Yuya Shimizu
年号変換
"""
def trans2era_name(year):
year_dict = {2019:"令和", 1989:"平成", 1926:"昭和", 1912:"大正", 1868:"明治"} #年号の境界
change = True #変換できたかどうかの判定用変数
#年号判定
for Y in year_dict:
if year >= Y:
year -= Y
if year == 0:
print(year_dict[Y] + "元年")
else:
print(year_dict[Y] + str(year + 1) + "年")
change = False
break
# 年号変換対象外に対してのエラーメッセージ
if change:
print("明治~令和の範囲でのみ変換が可能です")
trans2era_name(1868)
#####出力1(2020年)
令和2年
#####出力2(1868年)
明治元年
#####出力3(1800年)
明治~令和の範囲でのみ変換が可能です
はじめにも述べたように,我ながら汎用性の高いものができたのではないかと思う.コードの説明を少し行う.year_dictの中に年号とその元年の西暦の組を格納している.定義した関数では,forでその辞書型配列を回しているため,year_dictの中身を追加するだけで,年号変換の対象を拡張することができる.ただし,年号変換できなかったときに出力されるエラーメッセージの内容は変える必要があるかもしれない.
※コメント欄の@shiracamusによる改良版ならば,その心配もなく,自動でエラーメッセージも変化してくれる.
##感想
今回取り扱った年号変換は参考文献の確認問題として出題されていたもので,自分で考えてプログラムを作成した.先ほども記述したように,我ながらうまくまとめれられたのではないかと思う.アルゴリズムは学び始めたばかりであるが,アルゴリズムや考え方は大切であると感じられ,いっそうアルゴリズムへの学習意欲が高まった.
##参考文献
Pythonで始めるアルゴリズム入門 伝統的なアルゴリズムで学ぶ定石と計算量
増井 敏克 著 翔泳社