#目的
Pythonの練習として作成しました。
整数値で入力された西暦を、和暦に変換します。
##仕様
- 和暦の対象は明治、大正、昭和、平成、令和です。
- 明治元年は1868年としています。
- 明治より古い場合、例外処理としています。
##できること
このような応答になります。
西暦を入力してください。
2020
西暦2020年は令和2年です。
##使うもの
変数、代入、if elif else文、四則演算、文字入力、比較演算、論理演算を用いています。
#コード
int_input = int(input("西暦を入力してください。\n"))
#明治
if(int_input >= 1868 and int_input <=1911):
str_nengo = "明治"
int_year = int_input - 1867
if(int_year == 1):
int_lastYear = int_input - 1864
str_lastYear = "慶応"
print("西暦", int_input , "年は", str_nengo, "元年(", str_lastYear, int_lastYear ,"年)です。\n",sep='')
else:
print("西暦", int_input , "年は", str_nengo, int_year, "年です。\n",sep='')
#大正
elif(int_input >=1912 and int_input <=1925):
str_nengo = "大正"
int_year = int_input - 1911
if(int_year == 1):
int_lastYear = int_input - 1867
str_lastYear = "明治"
print("西暦", int_input , "年は", str_nengo, "元年(", str_lastYear, int_lastYear ,"年)です。\n",sep='')
else:
print("西暦", int_input , "年は", str_nengo, int_year, "年です。\n",sep='')
#昭和
elif(int_input >=1926 and int_input <=1988):
str_nengo = "昭和"
int_year = int_input - 1925
if(int_year == 1):
int_lastYear = int_input - 1911
str_lastYear = "大正"
print("西暦", int_input , "年は", str_nengo, "元年(", str_lastYear, int_lastYear ,"年)です。\n",sep='')
else:
print("西暦", int_input , "年は", str_nengo, int_year, "年です。\n",sep='')
#平成
elif(int_input >=1989 and int_input <=2018):
str_nengo = "平成"
int_year = int_input - 1988
if(int_year == 1):
int_lastYear = int_input - 1925
str_lastYear = "昭和"
print("西暦", int_input , "年は", str_nengo, "元年(", str_lastYear, int_lastYear ,"年)です。\n",sep='')
else:
print("西暦", int_input , "年は", str_nengo, int_year, "年です。\n",sep='')
#令和
elif(int_input >=2019):
str_nengo = "令和"
int_year = int_input - 2018
if(int_year == 1):
int_lastYear = int_input - 1988
str_lastYear = "平成"
print("西暦", int_input , "年は", str_nengo, "元年(", str_lastYear, int_lastYear ,"年)です。\n",sep='')
else:
print("西暦", int_input , "年は", str_nengo, int_year, "年です。\n",sep='')
#例外処理
else:
# if(int_input < 1868):
print("西暦", int_input , "年は、かなり古い時代です。\n",sep='')
##構造
###西暦の入力部分
int_input = int(input("西暦を入力してください。\n"))
int_input
入力された西暦を格納する変数。整数なのでint_
としています。
input()
文字入力
int(input())
整数で入力するよう制限
\n
末尾で改行(改行しなくてもよいです。)
###入力された西暦が、明治時代だった場合の処理
#明治
if(int_input >= 1868 and int_input <=1911):
str_nengo = "明治"
int_year = int_input - 1867
if():
if文。
int_input >= 1868
条件1。入力された西暦が1868年以降であれば。
int_input <=1911
条件2。入力された西暦が1911年以前であれば。
and
論理演算子。ふたつの条件が両方満たされたら明治。
str_nengo
年号を格納する変数。文字列なのでstr_
としています。
int_year
和暦の年を格納する変数。
int_input - 1867
入力された西暦から1867を引くと、明治の年になります。
###明治1年だった場合の処理
if(int_year == 1):
int_lastYear = int_input - 1864
str_lastYear = "慶応"
1年だった場合、前の元号の最終年でもあります。
西暦1868年は明治元年(慶応4年)です。
という表記をしたいです。
なので、もうひとつの条件を追加。
最初のif文の中にネストしたif文を作ります。
if(int_year == 1):
和暦の年int_year
が1だったら。
int_lastYear
さらに前の元号の最終年。ここでは慶応の最終年(4)を求めています。
str_lastYear
前の元号。
これで出力をする準備ができました。
###元年だった場合の出力
print("西暦", int_input , "年は", str_nengo, "元年(", str_lastYear, int_lastYear ,"年)です。\n",sep='')
print()
出力をする関数。,
を使って複数の要素を連結して出力しています。
"西暦"
ここは文字列。文字列をprintする場合はコーテーションで囲む。
int_input
ここは変数。変数をprintする場合は、そのまま。
"元年(", str_lastYear, int_lastYear ,"年)
前の元号と最終年です。
\n
改行。
sep=''
セパレートの指定。デフォルトでは要素の間にスペースが入るので少し間延びして見えます。sep
を空欄で指定すると、スペースなしで出力されます。
###通常の出力(元年じゃない場合)
print("西暦", int_input , "年は", str_nengo, int_year, "年です。\n",sep='')
「元年」部分の処理だけ削除しています。
これで、明治時代は完了です。
つぎは大正、昭和、平成、令和と続きます。
基本的には明治と同様の構造になりますが、
明治はif文
で、
大正、昭和、平成、令和はelif
になっています。
if
に対して、elif
では二つ目以降の条件を設定できます。
###令和の場合
#令和
elif(int_input >=2019):
最終年は確定されないので、条件が一つになります。
###例外処理
else:
# if(int_input < 1868):
print("西暦", int_input , "年は、かなり古い時代です。\n",sep='')
これまでのif
やelif
に対して else
としています。
else
は、ここまでに書かれた条件以外の場合の処理です。
具体的には、西暦が1868年より古かった場合になります。
今回は明治、大正、昭和、平成、令和を対象としているので
数字でいうと1868以降が対象、それ以前はかなり古い時代です、と出力しています。
#終わり
以上になります。
基本的な記述を使った例として作成しました。
お読みいただき、ありがとうございました。
#参考にさせて頂いた情報
##Qiita
Python基礎講座(8 分岐)
##note.nkmk.me
Pythonのprint関数で文字列、数値および変数の値を出力