当前位置:网站首页>【作业】2022.7.6 写一个自己的cal函数

【作业】2022.7.6 写一个自己的cal函数

2022-07-07 08:18:00 Sprite.Nym

在linux中用vim写日历函数,基本功能有:

  1. 输入月和年,输出日历
  2. 如果不输入月,但有年,则输出1-12月日历
  3. 如果都不输入,则输出当前日历
  4. 如果输入月,但不输入年,则默认今年

vim own_cal.py

import datetime


def first_day(m, y):
    # 计算出公式中需要的m, y, c 
    if m == 1 or m == 2:
        m += 12
        y -= 1
    
    c = y // 100
    y %= 100
    
    # 计算并返回每月第一天是星期几 
    return (y + y//4 + c//4 - 2 * c + 26 * (m+1) // 10) % 7


def total_days(m, y):
    # 判断闰年
    result = 1 if (y % 100 != 0 and y % 4 == 0) or (y % 400 == 0) else 0
    
    # 判断天数
    return 31 if m in [1, 3, 5, 7, 8, 10, 12] else (
        result + 28 if m == 2 else 30
    )


def get_cal(first_day, total_days): 
    # 创建cal列表
    cal = ['日', '一', '二', '三', '四', '五', '六']
    
    # 获得日历第一排的空格数
    for i in range(first_day):
        cal.append(' ')

    # 获得剩余的日期
    for i in range(1, total_days + 1):
        cal.append(f'{
      i: <2}')

    return cal


def draw_cal(cal):
    # 创建计数变量t
    t = 0

    for i in cal:
        # t是7的倍数时换行,其他时候空格
        print(f'\n{
      i}', end='') if t % 7 == 0 else print(f' {
      i}', end='')
        t += 1

    print('\n')


def cal_main(m, y):
    y = int(y)
    f_day = first_day(m, y)
    t_days = total_days(m, y)
    cal = get_cal(f_day, t_days)
    print(f'{
      y: >7}{
      m:0>2}月日历')
    draw_cal(cal)
    

if __name__ == '__main__':
    m = input('请输入月份: ')
    y = input('请输入年份: ')
    now_date = datetime.datetime.now()
    # 如果年份和月份都为空则输出现在, 如果只有月份空着则输出1-12月
    if m == '':
        if y == '':
            m_list = [now_date.month]
            y = now_date.year
        else:
            m_list = range(1, 13)
    else:
        m_list = [int(m)]

    for m in m_list:
        cal_main(m, y=now_date.year)

shift + :wq

原网站

版权声明
本文为[Sprite.Nym]所创,转载请带上原文链接,感谢
https://blog.csdn.net/SpriteNym/article/details/125647707