Python制作日历

首先要明白一个公式:d = 天, m = 月份, y = 年

w = (d + 2 * m + 3*(m + 1)//5 + y + y // 4-y//100 + y//400) % 7+1

这个公式是基姆拉尔森公式,计算的结果是对7求余再加1,从而可以推算出星期几,但当月份为一月份或者二月份是,这个时候需要将年份减一,月份为等于一时,月份变为13,月份为二时,月份为14。得出的结果可以推出:

w = 1:星期一
w = 2:星期二
w = 3:星期三
w = 4:星期四
w = 5:星期五
w = 6:星期六
w = 7:星期日

制作日历,还要想到如何判断某一年是瑞年还是平年,那么就可以用到下面这个函数进行判断

def is_leap_year(y):
    if y % 400 == 0 or (y % 4 == 0 and y % 100 != 0):
        return True
    return False

最后就是进行判断一个月有多少天,函数如下:

def get_days_in_month(y, m):
    if m in [1, 3, 5, 7, 8, 10, 12]:
        return 31
    elif m in [4, 6, 9, 11]:
        return 30
    else:
        return 29 if is_leap_year(y) else 28

运行结果为:

最后完整的代码如下:

def get_week_with_date(y, m, d):
    y = y-1 if m == 1 or m == 2 else y
    m = 13 if m == 1 else (14 if m == 2 else m)
    w = (d + 2 * m + 3*(m + 1)//5 + y + y // 4-y//100 + y//400) % 7+1
    return w


def is_leap_year(y):
    if y % 400 == 0 or (y % 4 == 0 and y % 100 != 0):
        return True
    return False


def get_days_in_month(y, m):
    if m in [1, 3, 5, 7, 8, 10, 12]:
        return 31
    elif m in [4, 6, 9, 11]:
        return 30
    else:
        return 29 if is_leap_year(y) else 28


while True:
    year = int(input('请输入年份:'))
    month = int(input('请输入月份:'))
    if month > 12:
        print('月份输入不正确,请重新输入')
        month = int(input('请输入月份:'))
    print('一 二 三 四 五 六 日')
    print('-'*20)
    days = get_days_in_month(year, month)
    for i in range(1, days+1):
        w = get_week_with_date(year, month, i)
        if i == 1:
            print(f"{' ' * (w-1) *3}", end='')
        if w == 1:
            print("")
        print(f'{i:2d}', end=' ')
    print("")

 

  • 7
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值