食用完本文,你将掌握:
- 如何快速确定两个日期之间有多少天.
- 对字符串常见的格式化处理方式.
- for … in 循环的灵活应用
- 异常的捕获与处理
话不多说,直接开始现场纯手工打造~
1. 题目需求:万年历(按单月查看)
1.从控制台输入年份,输入月份,输出如下的万年历:
2. 思路分析:将该月天数,以7天为一行、按顺序进行输出,有以下关键点:
2.1. 如何确定当月1号在星期几?
a). 已知公元元年1月1号为星期一(即公元1年1月1号,ps:没有公元0年,且本文以现行格里高利历为准,不考虑儒略历),可以通过该月第一天与公元元年1月1号的天数差,对7取模,来确定该月第一天对应的星期几.
b). 天数差 = (公元0年到该年的天数差)+ (该年1月1号到该月1号的天数差)
2.2. 如何进行将列数控制在7列,且每列只输出7个数 ?
a).上述天数差对7取模的结果,即上月月末在本月的占位,可以在打印时输出对应的空字符串
b).对空字符串和本月天数进行打印,且end = " ",当空格数与打印的天数的个数是7的倍数时,进行一次换行( print() ).
2.3. 如何进行字符串的格式化输出?
# %s任意类型,%d整数,%f浮点数
year = 2021
month = 3
print('%23s' % (f'公历{year}年{month}月')) # 23表示占位符,即这条数据输出的宽度
print('%2d ' % i,end=' ') # 输出宽度为2的数字
print('%2s %2s %2s %3s %2s %2s %2s' % ('一', '二', '三', '四', '五', '六', '日')) # 此处前后一一对应
print('{0:.3}'.format(3.1415926))