Python日历查询程序(万年历)

先上代码


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

请大家多多关照

谢谢阅读

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值