スナックelve 本店

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

No.1487 第4回修正カレンダー出力プログラム

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

難しいなぁ ====

#入力された年月からカレンダーを生成
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 get_lastday(nen, tuki):
#月末算出用
    if tuki == 12:
        nen2 = nen + 1
        tuki2 = 1
    else:
        nen2 = nen
        tuki2 = tuki + 1    
    d = datetime.date(nen2, tuki2, 1) - datetime.timedelta(days = 1)
    return d

def output_day(my_cal):
#カレンダー1週分出力
    for j in range(7):
        if my_cal[j] != 0:
            print('|{0:2d}'.format(my_cal[j]), end="")
        else:
            print('|  ', end="")
    print('|')

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(6)]
    #1週目
    #最初の週の日数
    f_w = first_week(datetime.date(nen,tuki,1))
    cal = f_w
    i = 6
    #1週目の日数分ループ
    while cal > 0:
        #1週目の土曜日から1日まで埋めていく
        my_cal[0][i] = cal
        i -= 1
        cal -= 1
    #2-5週目
    i = 0
    j = 1
    #日付
    cal = f_w + 1
    #月末算出用
    d = get_lastday(nen, tuki)
    #日付が月末になるまでループ
    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(6):
        if my_cal[i][0] != 0 or my_cal[i][6] != 0:
            #カレンダー1週分出力
            output_day(my_cal[i])

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

これで

C:\python>python test.py 2018 1
2018年1月
|日|月|火|水|木|金|土|
|  | 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|  |  |  |

C:\python>python test.py 2018 2
2018年2月
|日|月|火|水|木|金|土|
|  |  |  |  | 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|  |  |  |

C:\python>python test.py 2018 3
2018年3月
|日|月|火|水|木|金|土|
|  |  |  |  | 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|

C:\python>python test.py 2018 4
2018年4月
|日|月|火|水|木|金|土|
| 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|  |  |  |  |  |

C:\python>python test.py 2018 5
2018年5月
|日|月|火|水|木|金|土|
|  |  | 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|  |  |

C:\python>python test.py 2018 6
2018年6月
|日|月|火|水|木|金|土|
|  |  |  |  |  | 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|

C:\python>python test.py 2018 12
2018年12月
|日|月|火|水|木|金|土|
|  |  |  |  |  |  | 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|  |  |  |  |  |

どや!!(><)