ツェラーの公式、関数版
はてなキーワードでツェラーの公式を見てみたら、Perlによる関数が書かれてたから、Pythonでもそれをやってみることにしました。
from decimal import * def get_day(year, month, date): # Zeller's congruence if month <= 2: month += 12 year -= 1 J = Decimal(year) // 100 K = Decimal(year) % 100 m = Decimal(month) q = Decimal(date) h = (q + (((m + 1) * 26) // 10) + K + (K // 4) + (J // 4) - (2 * J)) % 7 return h
割り算による誤差が出たらいやなので、decimalを使っています。
Perlバージョンにならって、ifの後にreturnを1行で書くこともできるけど、正直なところわかりにくかったので、こうしたやりかたしています。
isinstance(year, int)などとして、int型かどうか判定して、もし違ったらTypeErrorを発生させるのもよさそうだけど、まあ今回はそこまでやる必要ないので、すっとばしました。