year=int(input('输入年份'))
rennian=year//4 -year//100 +year//400 #闰年的个数
c=(year+rennian)%7 #0-6 0代表星期天 1代表星期一 6代表星期6
m=c-1 #用于日历开头占位置的原始参数
if c==0: #因为0为星期天 前面要占6位
m=6
a=[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] #创建月份天数列表
h ={1:'二',2:'三',3:'四',4:'五',5:'六',6:'七',7:'八',8:'九',9:'十',10:'十一',11:'十二'} #创建月份名称字典
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0: #判断闰年
a[1] = 29 #闰年 直接替换a列表里面的28
b=c-1 #用于下面控制输出换行的参数
print(f' 今年为{year}年')
print(' 一月') #因为一月在循环外所以要打印一次
print(' 一 二 三 四 五 六 七') #同样在循环外所以要打印一次
while m!=0: #根据上面的m参数来进行占位
print('*',end=' ') #通过*来展示占位
m=m-1
for i in range(12): #作为下面a列表的定位参数
for e in range(1,a[i]+1): #开始打印每个月的天数
if b%7==0: #当输出数为7个时换行
print(f'\n{e:2}',end=' ')
b=1 #重置参数b 方便进行下一次换行
else:
print(f'{e:2}',end=' ')
b=b+1 #当参数没有到7时逐一递加直到加到7换行
print()
if i <11:
print(f' {h.get(i+1)}月') #通过定位字典里面的参数实现月份的打印
print(' 一 二 三 四 五 六 七')
for l in range(b%7): #因为开头占位在循环外所以重新写一遍换行代码 占位的个数就是上个月余下来的数
print(' ',end=' ')
如果对你有帮助 求点赞 本人也是刚学python的菜鸟