先上代码
y = int(input("请输入年份:"))
m = int(input("输入月份:"))
day = 0
def isleepyear(year):
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
return 1
else:
return 0 #判断平年闰年
for i in range(1900, y):
if isleepyear(i):
day += 366
else:
day += 365 #计算总年数
mday = 0
a = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
b = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
if isleepyear(i):
for i in range(m):
mday += a[i]
else:
for i in range(m):
mday += b[i] #计算从这一年的一月一号到你想查询的这个月一共多少天
tday = day + mday #计算总天数
fwd = (tday + 1) % 7 #计算这个月的第一天是星期几
count = 0
if m != 2:
count = a[m]
else:
if isleepyear(y):
count = 29
else:
count = 28 #分析特殊情况二月
now = 1
print("---------万年历---------")
print(f"---------{y}年{m}月---------")
print("星期日 星期一 星期二 星期三 星期四 星期五 星期六")
while True:
for j in range(7):
if fwd != 0:
print(' ',end="")
fwd-=1
else:
print(f"{now} ",end="")
if now < 10:
print(' ',end="")
now+=1
if now == count+1:
break
print("")
if now == count+1:
break #调整输出结构
思路
用户输入年份后应先用函数判断是平年闰年,输入月份后算出从1900年到想查询的月份一共有多少天(选1900是因为1900年一月一日是星期一),总天数除七取余就是这个月一号是星期几。然后用for循环嵌套while循环输出空格换行调整格式。(需要注意汉字和数字占的空间不一样的问题)
运行结果
请输入年份:2023
输入月份:3
---------万年历---------
---------2023年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
进程已结束,退出代码0
请大家多多关照
谢谢阅读