当前位置: 首页 > news >正文

用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 += dreturn all_days# 得到某年某月某日是星期几
def week(y, m, d):all_days = 0if y == 1940:all_days = year_days(y, m, d) - 1else:# 计算总天数,包括闰年的额外一天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) - 1get = (all_days + 1) % 7return 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] = -1else:flag[a] = date - week1else:flag[a] = -1date += 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()

二、运行结果

相关文章:

  • 数字化校园:打造未来教育新风尚
  • 每天五分钟深度学习框架pytorch:多维tensor向量在某一维度的拼接和分割
  • 分类预测 | Matlab实现基于Transformer多特征分类预测/故障诊断
  • Allegro光绘Gerber文件、IPC网表、坐标文件、装配PDF文件导出打包
  • 中文大数据训练的数据集
  • C# OpenCvSharp Mat操作-创建Mat-构造函数
  • 什么是中断?STM32F407中断处理
  • 【Android面试八股文】讲一讲String、StringBuffer和StringBuilder在进行字符串操作时候的效率
  • 基于dagger平台实现资源位的接口自动化
  • 力扣hot100:75. 颜色分类(双指针)
  • 数据中台-知识图谱平台
  • Windows系统下使用gvim配置LaTeX快速书写环境
  • idea 启动tomcat后总是弹出框显示cannot open url.please check this url is correct
  • 精准定位,智慧提纯:高级数据提取策略
  • MySQL基础——SQL语句
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • ES6 学习笔记(一)let,const和解构赋值
  • ES6简单总结(搭配简单的讲解和小案例)
  • flask接收请求并推入栈
  • gitlab-ci配置详解(一)
  • Golang-长连接-状态推送
  • Java 23种设计模式 之单例模式 7种实现方式
  • leetcode388. Longest Absolute File Path
  • mongodb--安装和初步使用教程
  • MySQL数据库运维之数据恢复
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • Python_OOP
  • python学习笔记-类对象的信息
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 前端临床手札——文件上传
  • 前言-如何学习区块链
  • 算法-插入排序
  •  一套莫尔斯电报听写、翻译系统
  • 硬币翻转问题,区间操作
  • ​马来语翻译中文去哪比较好?
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (Forward) Music Player: From UI Proposal to Code
  • (四)汇编语言——简单程序
  • (五)关系数据库标准语言SQL
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .Net 4.0并行库实用性演练
  • .NET Framework 4.6.2改进了WPF和安全性
  • .NET Framework与.NET Framework SDK有什么不同?
  • .Net IOC框架入门之一 Unity
  • .NET 回调、接口回调、 委托
  • .NET 中让 Task 支持带超时的异步等待
  • @RequestMapping 的作用是什么?
  • [Angular] 笔记 21:@ViewChild
  • [BUG]Datax写入数据到psql报不能序列化特殊字符
  • [BZOJ] 2044: 三维导弹拦截
  • [C#]DataTable常用操作总结【转】
  • [codevs 1288] 埃及分数 [IDdfs 迭代加深搜索 ]