用python纯手写一个日历

一、代码

python 复制代码
# 月份名称数组
months = [
    "January", "February", "March", "April", "May", "June",
    "July", "August", "September", "October", "November", "December"
]
# 每月天数数组
month_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]


# 判断是否是闰年
def leap_year(y):
    if (y % 100 != 0 and y % 4 == 0) or (y % 400 == 0):
        month_days[1] += 1


# 计算某年某月某日到该年第一月第一日的日数
def year_days(y, m, d):
    all_days = 0
    # 判断是否是闰年,闰年二月有29天
    leap_year(y)
    # 计算总日数
    for i in range(m - 1):
        all_days += month_days[i]
    all_days += d
    return all_days


# 得到某年某月某日是星期几
def week(y, m, d):
    all_days = 0
    if y == 1940:
        all_days = year_days(y, m, d) - 1
    else:
        # 计算总天数,包括闰年的额外一天
        for i in range(1940, y):
            all_days += 365 + ((y % 100 != 0 and y % 4 == 0) or (y % 400 == 0))
        all_days += year_days(y, m, d) - 1
    get = (all_days + 1) % 7
    return get


# 打印某月的日历
def show_month(y, m):
    # 判断是否是闰年,闰年二月有29天
    leap_year(y)
    week1 = week(y, m, 1)
    print('{}\n---------------------------'.format(month_days[m - 1]))
    print("Sun  Mon  Tue  Wed  Thu  Fri  Sat")
    date = 1
    # 遍历星期和日期
    while date <= week1 + month_days[m - 1]:
        flag = [0] * 7
        # 遍历一周的每一天
        for a in range(7):
            if date <= (week1 + month_days[m - 1]):
                if date < week1:
                    flag[a] = -1
                else:
                    flag[a] = date - week1
            else:
                flag[a] = -1

            date += 1

        # 打印一周的日期
        print(" ".join(f"{-1 if x == 0 else x:<4}" for x in flag))
    print()


# 主函数
def main():
    print("输入要查找的年月份")
    year = input("年:")
    month = input("月:")
    if not (year.isdigit() and month.isdigit()):
        print('请输入一个合法的日期!!!')
    else:
        show_month(int(year), int(month))


if __name__ == "__main__":
main()

二、运行结果

相关推荐
IT_Octopus5 小时前
【零基础入门 LLM 开发 · Day 13】:LangChain 的对话记忆——Message 对象版
人工智能·python·langchain
2603_965148115 小时前
社区与学习资源:从入门到精通的API选品学习路径
数据库·人工智能·python·学习·数据挖掘
程序猿追6 小时前
kotlin-retry 接入鸿蒙后,怎样确认它真的会停止重试
开发语言·kotlin·harmonyos
我是人✓6 小时前
Java文件上传三方式对比:从传统到SpringBoot
java·开发语言
智能直播6 小时前
网络RTMP拉流不卡顿、声音不同步,一文讲透缓冲区、时间戳
开发语言·ffmpeg·php·音视频·视频编解码
CCblandy7 小时前
令牌桶在 0.9 倍负载超发 19%、固定窗口边界放行 20 个:四种限流算法同构实测
后端·python·算法·性能优化·架构
墨云安全7 小时前
内网资产无法暴露到公网,怎么做安全检测?2026 年内网渗透测试的落地路径
开发语言·安全·网络安全·渗透测试·php
摇滚侠7 小时前
《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 9 章 机器码与汇编语言 阅读笔记 9
java·开发语言·笔记
Cc.Y8 小时前
Java零基础入门:深入Java核心:文件IO与序列化全解
java·开发语言·python
拿本唠嗑AI研究8 小时前
本体工程实战指南:从建模到可维护的完整落地路径
java·人工智能·python·jena·ontology