前提・実現したいこと
キーボードから元号・年・月・日付を取得して、
アメリカ式の表示で返したいです。
例)
令和 2(年) 6(月) 22(日)
→June 22th, 2020
平成 21(年) 7(月) 22(日)
→July 22th, 2000
またメソッド(datetimeなど)は使用しません。
(ここでは使用できませんが、もし和暦を西暦にするのに使えるメソッド、利用できるメソッドがあればご教授ください。)
追記:(閏年は考慮しません)
発生している問題・エラーメッセージ
大まかなプログラムは記述したのですが、
昭和64年は1月7日まで、それ以降は平成、
平成31は4月30日まで、それ以降は令和
というような境界部分の記述ができておらず、
たとえば 存在しないはずの 「昭和64年2月1日」 と入力すると
February 1st, 1989
と出力できてしまいます。(本来ならば1989年は2月1日から平成と入力しなければならない)
該当のソースコード
Python
1month = {1:"January", 2:"February", 3:"March", 4:"April", 5:"May", 6:"June", 7:"July", 8:"August", 9:"September", 10:"October", 11:"November", 12:"December"} 2head_days = {1:"1st", 2:"2nd", 3:"3rd"} 3showa = {} 4a = 1925 5for i in range(64): 6 a = a + 1 7 showa[ i + 1 ] = a 8heisei = {} 9b = 1988 10for i in range(31): 11 b = b + 1 12 heisei[ i + 1 ] = b 13reiwa = {} 14c = 2018 15for i in range(10): 16 c = c + 1 17 reiwa[ i + 1 ] = c 18 19ja_age = input("元号を入力してください(昭和、平成、令和)") # 元号を入力 20 21if ja_age == "昭和": 22 year = input("年を入力してください(昭和何年?)") 23 if 1 <= int(year) <= 64: 24 output_year = showa[int(year)] 25 else: 26 print("エラー:昭和は1~64年で入力してください") 27elif ja_age == "平成": 28 year = input("年を入力してください(平成何年?)") 29 if 1 <= int(year) <= 31: 30 output_year = heisei[int(year)] 31 else: 32 print("エラー:平成は1~31年で入力してください") 33elif ja_age == "令和": 34 year = input("年を入力してください(令和何年?)") 35 if 1 <= int(year) <= 10: 36 output_year = reiwa[int(year)] 37 else: 38 print("エラー:令和は1~10年で入力してください") 39else: 40 print("エラー:昭和、平成、令和のいずれかを入力してください") 41 42ja_month = input("月を入力してください") # 月を入力 43ja_int_month = int(ja_month) 44 45ja_day = input("日付を入力してください") # 日付を入力 46ja_int_day = int(ja_day) 47 48if ja_int_month == 1 or ja_int_month == 3 or ja_int_month == 5 or ja_int_month == 7 or ja_int_month == 8 or ja_int_month == 10 or ja_int_month == 12: # 1,3,5,7,8,10,12月の時 49 output_month = month[ja_int_month] 50 if 1 <= ja_int_day <= 3: 51 output_day = head_days[ja_int_day] 52 print( str(output_month) + " " + output_day + ", " + str(output_year)) #出力 53 elif not 4 <= ja_int_day <= 31 : 54 print("エラー:" + ja_month + "月の日付には1〜31の数値を入力してください") 55 else: 56 print( str(output_month) + " " + ja_day + "th, " + str(output_year)) #出力 57 58elif ja_int_month == 4 or ja_int_month == 6 or ja_int_month == 9 or ja_int_month == 11: # 4,6,9,11月の時 59 output_month = month[ja_int_month] 60 if 1 <= ja_int_day <= 3: 61 output_day = head_days[ja_int_day] 62 print( str(output_month) + " " + output_day + ", " + str(output_year)) #出力 63 elif not 4 <= ja_int_day <= 30: 64 print("エラー:" + ja_month + "月の日付には1〜30の数値を入力してください") 65 else: 66 print( str(output_month) + " " + ja_day + "th, " + str(output_year)) #出力 67 68 69elif ja_int_month == 2: # 2月の時 70 output_month = month[ja_int_month] 71 if 1 <= ja_int_day <= 3: 72 output_day = head_days[ja_int_day] 73 print( str(output_month) + " " + output_day + ", " + str(output_year)) #出力 74 elif not 4 <= ja_int_day <= 28: 75 print("エラー:" + ja_month + "月の日付には1〜28の数値を入力してください") 76 else: 77 print(str(output_month) + " " + ja_day + "th, " + str(output_year)) #出力 78else: 79 print("エラー:月には1〜12の数値を入力してください")
(元号が間違ってても出力されるのはちょっと便利にも感じますが、、、)
回答2件
あなたの回答
tips
プレビュー