Python学習の一環で、自分の生まれた曜日を確認するプログラムを作成してみました。
Zëllerの公式を使うと、1582年10月15日以降の日付から曜日を計算することができます。
整数(int)として年をyear、月をmonth、日をdayとした時、曜日(weekday)は
weekday = (year + (year // 4) - (year // 100) + (year // 400) + ((13*month+8) // 5) + day) % 7 という式で計算できます。
曜日は整数として0が日曜、1が月曜、...、6が土曜となります。
但し、1月と2月はそれぞれ前の年の13月、14月として計算する必要があり, 例えば、2021年1月というのは上の計算式では、2020年13月として計算しなければなりません。
流れとしまして、生年月日入力後、Zëllerの公式を使い、出力するという簡単な流れになります。
使用環境としては、Google Colaboratoryになります。
早速、生年月日の入力欄を設けましょう。int型で表示します。
year = int(input('年> '))
month = int(input('月> '))
day = int(input('日> '))
birthday = str(year)+'年'+str(month)+'月'+str(day)+'日'
数値型で入った数字を文字列型に変換し、。1月と2月は、前年のそれぞれ13月・14月として扱います。そして、その場合、前年の年をベースとした13月、14月になり、計算式を入れる。
if month == 1 or month == 2 :
year = year - 1
month = month + 12
wkday = (year + (year // 4) - (year // 100) + \
(year // 400) + ((13*month+8) // 5) + day) % 7
曜日は、整数として0が日曜、1が月曜、...、6が土曜となるよう設定します。
if wkday == 0 :
wkstr = '日曜日'
elif wkday == 1 :
wkstr = '月曜日'
elif wkday == 2 :
wkstr = '火曜日'
elif wkday == 3 :
wkstr = '水曜日'
elif wkday == 4 :
wkstr = '木曜日'
elif wkday == 5 :
wkstr = '金曜日'
elif wkday == 6 :
wkstr = '土曜日'
print(birthday+'は'+wkstr+'です。')
まとめコード
year = int(input('年> '))
month = int(input('月> '))
day = int(input('日> '))
birthday = str(year)+'年'+str(month)+'月'+str(day)+'日'
if month == 1 or month == 2 :
year = year - 1
month = month + 12
wkday = (year + (year // 4) - (year // 100) + \
(year // 400) + ((13*month+8) // 5) + day) % 7
if wkday == 0 :
wkstr = '日曜日'
elif wkday == 1 :
wkstr = '月曜日'
elif wkday == 2 :
wkstr = '火曜日'
elif wkday == 3 :
wkstr = '水曜日'
elif wkday == 4 :
wkstr = '木曜日'
elif wkday == 5 :
wkstr = '金曜日'
elif wkday == 6 :
wkstr = '土曜日'
print(birthday+'は'+wkstr+'です。')
出力結果
例えば、2021年3月31日で試すと、水曜日と表示されています。検証してみましょう。
年> 2021
月> 3
日> 31
2021年3月31日は水曜日です。
webから確認したカレンダーを見ると、確かに水曜日になっています。
今回は、誕生日を曜日確認してみるという題目で行いましたが、特に誕生日に限らず、未来の曜日も確認出来ますので、予定計画を作る際に活用できそうです。