すぐ影響されるブログ

アニメやマンガにすぐ影響されるミーハーのブログ

NEW GAME!を観ました。プログラミング始めます。(14)

f:id:kirintt:20170921175954p:plain
努力家なねねっちがすき。

nagoyanofes.hatenadiary.jp

※基本的に、愛知大学の有澤先生がプログラミングの講義で使用しているテキスト「Pythonによるプログラミング入門」に沿って進めています。

Python 2.7.13を使用しています。

==== 

今日のキーワード

Zeller の公式

年月日から曜日を計算する方法として Zeller の公式がある。…半ば理論的な、半ば試行錯誤によるもので、…1582 年 10 月 15 日以前には適用できない。
(引用元:Pythonによるプログラミング入門, p.34)

譜3.10 Zeller の公式を使ったカレンダープログラム

# coding: shift-jis
def h(y,m,d):
    # h(y,m,d): day of week (Zeller's formula)
    # 奥村晴彦「コンピュータアルゴリズム辞典」(技術評論社,1989)
    # y: year, 0,1,2,..
    # m: month, 1,2,..,12
    # d: day of month, 1,2,..31
    # return: day of week, 0,1,2,..,6
    # example: h(2000,1,1) -> 6 # Saturday
    if m<3: y=y-1; m=m+12
    return (y+y/4-y/100+y/400+(13*m+8)/5+d)%7

def cal0(n,m):
    # cal0(n,m) は 1 つの月のカレンダーを作成する。
    # n は月の開始日の曜日を表す数字 (0,1,..,6) であり、0 が日曜日を意味する
    # m はその月の日数である。例えば 1 月は m=31 である
    # 従って 2000 年 1 月のカレンダーは cal0(6,31) で印刷される
    for x in ("sun","mon","tue","wed","thu","fri","sat"): print " ",x,
    print
    for x in range(0, n): print " ---",
    for x in range(1, m+1):
        print "%5d"%x,
        if (x+n)%7==0 : print
    print

def cal(y,m):
    # y: year, 0,1,2,..
    # m: month, 1,2,..,12
    n=h(y,m,1)
    n1=h(y,m+1,1)
    r=(n1-n)%7
    d=28+r
    cal0(n,d)

cal(2000,1)

(引用元:Pythonによるプログラミング入門, p. 34)

こんな方法があるんだな~すごいなぁ~(わかってない)

今日のミス

Zeller の公式

f:id:kirintt:20170921180756p:plain

PDFからエディタにコピペしたとき半角スペースが消えちゃってたっぽい。

nagoyanofes.hatenadiary.jp