只是试试

94 阅读1分钟
def is_leap_year(year):
    """判断是否为闰年"""
    return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)


def days_in_month(year, month):
    """计算给定年月的天数"""
    if month == 2:
        return 29 if is_leap_year(year) else 28
    elif month in [4, 6, 9, 11]:
        return 30
    else:
        return 31


def print_month_header():
    """打印月份头部信息"""
    print(" 日 一 二 三 四 五 六")


def get_day_of_week(year, month, day):
    """返回给定日期是一周中的第几天(0代表周日,6代表周六)"""
    # Zeller's Congruence算法简化版,适用于格里高利历(即公历)
    q = day
    m = month
    if m < 3:
        m += 12
        year -= 1
    k = year % 100
    j = year // 100
    day_of_week = (q + ((13 * (m + 1)) // 5) + k + (k // 4) + (j // 4) - (2 * j)) % 7
    return day_of_week


def print_month(year, month):
    """打印给定年月的万年历"""
    print(f"{year}{month}月")
    print_month_header()
    # 计算该月第一天是周几
    first_day = get_day_of_week(year, month, 1)
    # 打印空白以对齐第一天
    for _ in range(first_day):
        print("   ", end="")
    # 打印日期
    for day in range(1, days_in_month(year, month) + 1):
        print(f"{day:2}", end=" ")
        if (first_day + day - 1) % 7 == 6:  # 周六后换行
            print()
        elif day == days_in_month(year, month):  # 最后一天后也换行
            print()
            break
    if (first_day + day - 2) % 7 != 6:  # 如果不是周六结束,补足空行
        print()


def main():
    year = int(input("请输入年份:"))
    month = int(input("请输入月份:"))

    if 1 <= month <= 12:
        print_month(year, month)
    else:
        print("月份输入错误,请输入1到12之间的数字。")


if __name__ == "__main__":
    main()