python不运用calendar等模块函数写日历

不运用模块儿而是依赖循环,写一个2021年日历,要求是一行打印一个月,星期日在前,并且同时输出到txt文件中

import datetime

Width = 5

months = {'Jan': 31,'Feb': 28,'Mar': 31,'Apr': 30,'May': 31,'Jun': 30,'Jul': 31,'Aug': 31,'Sep': 30,'Oct': 31,'Nov': 30,'Dec': 31,}
weekdays = ["Sun".center(Width), 'Mon'.center(Width), 'Tue'.center(Width), 'Wed'.center(Width), 'Thu'.center(Width), 'Fri'.center(5), 'Sat'.center(Width)]

with open(r"calendar.txt", 'a') as f:
    for m, mv in enumerate(months.items(), 1):
        line = ''
        f.write(mv[0].center(Width *7))        
        f.write('\n')
        f.write(''.join(weekdays) + '\n')
        print(mv[0].center(Width *7))
        print()
        print(''.join(weekdays))

        for j in range(1, mv[1] + 1):
            curday = (datetime.datetime(2021, m, j).weekday() + 1) % 7
            if j == 1:
                for _ in range(curday):
                    print(''.center(Width), end='')
                    line += ''.center(Width)
            if curday == 6:
                print(str(j).center(Width))
                line +=str(j).center(Width) + '\n'
            else:
                print(str(j).center(Width), end='')
                line +=str(j).center(Width)
        f.write(line + '\n')
        print()

import datetime

Width = 5

months = {'Jan': 31,'Feb': 28,'Mar': 31,'Apr': 30,'May': 31,'Jun': 30,'Jul': 31,'Aug': 31,'Sep': 30,'Oct': 31,'Nov': 30,'Dec': 31,}
weekdays = ["Sun".center(Width), 'Mon'.center(Width), 'Tue'.center(Width), 'Wed'.center(Width), 'Thu'.center(Width), 'Fri'.center(5), 'Sat'.center(Width)]

for m, mv in enumerate(months.items(), 1):
    print(mv[0].center(Width *7))
    print()
    print(''.join(weekdays))
    for j in range(1, mv[1] + 1):
        curday = (datetime.datetime(2021, m, j).weekday() + 1) % 7
        if j == 1:
            for _ in range(curday):
                print(''.center(Width), end='')            
        if curday == 6:
            print(str(j).center(Width))
        else:
            print(str(j).center(Width), end='')
    print()