スナックelve 本店

バツイチ40代女の日記です

No.1486 第4回カレンダーを出力するプログラム

移動前ブクマページ: https://b.hatena.ne.jp/entry/s/elve.hateblo.jp/entry/2018/02/12/172155

※バグってました
突然飛ぶのだった。

====

アレコレ調べながら作ってみた。本当は0だったら出力しないってしたかったけど、ちょっとわからんから0出力
何年まで出力できるのかもちょっとよくわからんかったのでチェックしてない。
あー12月でエラーでルー

#入力された年月からカレンダーを生成
import datetime
import sys

def first_week(d):
    #最初の週の日数
    youbi=d.weekday()
    if youbi == 6:
        #1日が日曜日=1週目フル
        ret = 7
    else:
        #それ以外
        #月=0~土=5
        ret = 7 - youbi - 1
    return ret

def test_func(nen, tuki):

    #年チェック
    if nen == 0:
        print("年の指定がおかしいよ: " + str(nen))
        return
    #月チェック
    if tuki == 0 or tuki > 12:
        print("月の指定がおかしいよ: " + str(tuki))
        return
    #7日×5週
    my_cal = [[0 for i in range(7)] for j in range(5)]
    #1週目
    f_w = first_week(datetime.date(nen,tuki,1))
    cal = f_w
    i = 6
    while cal > 0:
        my_cal[0][i] = cal
        i -= 1
        cal -= 1
    #2-5週目
    i = 0
    j = 1
    cal = f_w + 1
    d = datetime.date(nen, tuki + 1, 1) - datetime.timedelta(days = 1)
    while cal <= d.day:
        my_cal[j][i] = cal
        i += 1
        if i > 6:
            j += 1
            i = 0
        cal += 1

    #出力
    print( str(nen) + "年" + str(tuki) + "月")
    print("|日|月|火|水|木|金|土|")
    for i in range(5):
        print('|{0[0]:2d}|{0[1]:2d}|{0[2]:2d}|{0[3]:2d}|{0[4]:2d}|{0[5]:2d}|{0[6]:2d}|'.format(my_cal[i]))

#実行
args = sys.argv
test_func(int(args[1]),int(args[2]))

これをtest.pyってファイルに保存してコンソールから実行

C:\python>python test.py 2018 1
2018年1月
|日|月|火|水|木|金|土|
| 0| 1| 2| 3| 4| 5| 6|
| 7| 8| 9|10|11|12|13|
|14|15|16|17|18|19|20|
|21|22|23|24|25|26|27|
|28|29|30|31| 0| 0| 0|

カレンダーモジュールがあるらしいので、それ使うともっと楽になると思われる。