LoginSignup
0
2

More than 3 years have passed since last update.

Pythonの練習 入力された西暦を和暦に変換する

Posted at

目的

Pythonの練習として作成しました。
整数値で入力された西暦を、和暦に変換します。

仕様

  • 和暦の対象は明治、大正、昭和、平成、令和です。
  • 明治元年は1868年としています。
  • 明治より古い場合、例外処理としています。

できること

このような応答になります。

西暦を入力してください。
2020
西暦2020年は令和2年です。

使うもの

変数、代入、if elif else文、四則演算、文字入力、比較演算、論理演算を用いています。

コード

nengo.py
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='')

これまでのifelifに対して elseとしています。
elseは、ここまでに書かれた条件以外の場合の処理です。

具体的には、西暦が1868年より古かった場合になります。

今回は明治、大正、昭和、平成、令和を対象としているので
数字でいうと1868以降が対象、それ以前はかなり古い時代です、と出力しています。

終わり

以上になります。

基本的な記述を使った例として作成しました。
お読みいただき、ありがとうございました。

参考にさせて頂いた情報

Qiita

Python基礎講座(8 分岐)

note.nkmk.me

Pythonのprint関数で文字列、数値および変数の値を出力

0
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2