建站公司排名 中企动力,绵阳网站建设企业,厦门网站排名优化费用,wordpress新建阅读量字段目录
一、引言
二、需求分析
三、实现思路
四、代码实现
五、代码分析
六、测试与验证
七、总结与展望 在日常的编程中#xff0c;我们经常会遇到与日期相关的问题#xff0c;比如计算两个日期之间的天数差、确定某个特定日期是星期几以及格式化输出日历等。本文将详细…目录
一、引言
二、需求分析
三、实现思路
四、代码实现
五、代码分析
六、测试与验证
七、总结与展望 在日常的编程中我们经常会遇到与日期相关的问题比如计算两个日期之间的天数差、确定某个特定日期是星期几以及格式化输出日历等。本文将详细介绍如何使用 Python 实现这些功能并通过一个完整的示例代码进行演示。 一、引言 日期在我们的生活中无处不在无论是在项目管理、日程安排还是历史研究等领域都需要对日期进行准确的计算和处理。Python 作为一种强大的编程语言提供了丰富的工具和库来处理日期和时间相关的任务。在本文中我们将使用 Python 的基本语法和逻辑来实现对日期的计算和日历的格式化输出。 二、需求分析 我们的目标是实现以下功能 判断给定的年份是否为闰年。根据给定的年份和月份计算该月份的天数。计算给定年份和月份距离 1900 年 1 月 1 日的总天数。确定给定年份和月份的第一天是星期几。格式化输出给定年份和月份的日历。 三、实现思路 判断闰年 闰年的判断规则是能被 4 整除但不能被 100 整除的年份为闰年或者能被 400 整除的年份也是闰年。使用 Python 的条件判断语句来实现这个规则。 计算月份天数 对于 1、3、5、7、8、10、12 这几个月份天数为 31 天。对于 4、6、9、11 这几个月份天数为 30 天。对于 2 月份需要根据是否为闰年来确定天数闰年为 29 天非闰年为 28 天。 计算总天数 首先计算从 1900 年到给定年份之间的总天数对于闰年的年份总天数加 366 天非闰年的年份加 365 天。然后计算从给定年份的 1 月份到给定月份之间的总天数根据每个月的天数进行累加。 确定第一天是星期几 使用总天数对 7 取余得到的结果即为给定日期是星期几。根据余数的值进行相应的输出确定第一天是星期几。 格式化输出日历 首先输出星期几的表头即 “星期日 \t 星期一 \t 星期二 \t 星期三 \t 星期四 \t 星期五 \t 星期六 \t”。根据给定月份的第一天是星期几在输出日期之前先输出相应数量的制表符以实现对齐。然后循环输出每个日期每输出一个日期后输出两个制表符以保持格式整齐。每输出 7 个日期后进行换行以实现日历的格式化输出。 四、代码实现 以下是实现上述功能的 Python 代码 # 判断是否为闰年的
def isLeapYear(year):if year % 4 0 and (year % 100! 0 or year % 400 0):return Trueelse:return False# 给定月份算出来该月份有几天
def getDayOfMonth(year, month):if month 1 or month 3 or month 5 or month 7 or month 8 or month 10 or month 12:return 31elif month 4 or month 6 or month 9 or month 11:return 30else:if isLeapYear(year):return 29else:return 28while True:yearStr input(请输入年份数字|年份大于 1900输入 q 退出:)if yearStr q:print(你已退出欢迎下次再来)breakelif yearStr.isdigit():year int(yearStr)monthStr input(请输入月份1-12:)if monthStr.isdigit() and 1 int(monthStr) 12:month int(monthStr)# 计算该年月距离 1900-01-01 的总天数totalDays 0for y in range(1900, year):if isLeapYear(y):totalDays 366else:totalDays 365# 将剩余月份的天数相加for m in range(1, month):totalDays getDayOfMonth(year, m)print(f{yearStr}年{monthStr}距离 1900-01-01 相差{totalDays}天)# 该年该月的第一天是星期几firstDayOfMonth (totalDays 1) % 7match firstDayOfMonth:case 0:print(f{yearStr}年{monthStr}月的第一天是星期日)case 1:print(f{yearStr}年{monthStr}月的第一天是星期一)case 2:print(f{yearStr}年{monthStr}月的第一天是星期二)case 3:print(f{yearStr}年{monthStr}月的第一天是星期三)case 4:print(f{yearStr}年{monthStr}月的第一天是星期四)case 5:print(f{yearStr}年{monthStr}月的第一天是星期五)case 6:print(f{yearStr}年{monthStr}月的第一天是星期六)# 接着进行格式化输出print(星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t)# 规律 星期几就打印几个空格# 一个 tab 两个汉字# print(\t*2)counter firstDayOfMonthprint(\t * 2 * firstDayOfMonth, end)# 打印几号dayOfMonth getDayOfMonth(year, month)for day in range(1, dayOfMonth 1):print(day, end\t\t)counter 1# 控制换行没打印 7 个值包括空白都换行if counter % 7 0:print()print()else:print(输入的数据不合法请输入 1~12 之间的数字)else:print(请输入数字)五、代码分析 判断闰年函数 isLeapYear(year)函数接受一个年份作为参数使用条件判断语句判断该年份是否为闰年。如果年份能被 4 整除但不能被 100 整除或者能被 400 整除则返回True表示是闰年否则返回False表示不是闰年。 计算月份天数函数 getDayOfMonth(year, month)函数接受年份和月份作为参数根据月份的不同返回相应的天数。对于 1、3、5、7、8、10、12 这几个月份直接返回 31 天。对于 4、6、9、11 这几个月份直接返回 30 天。对于 2 月份根据是否为闰年调用isLeapYear(year)函数来确定天数闰年返回 29 天非闰年返回 28 天。 主循环部分 使用while True循环以便用户可以多次输入年份和月份进行计算。首先接收用户输入的年份如果用户输入q则退出循环打印退出信息。如果用户输入的是数字则将其转换为整数类型并继续接收用户输入的月份。如果月份输入合法1-12 之间的数字则进行日期计算和日历格式化输出。如果月份输入不合法则打印错误信息提示用户重新输入。 计算总天数部分 首先计算从 1900 年到给定年份之间的总天数使用一个循环遍历从 1900 年到给定年份之间的每一年如果是闰年则总天数加 366 天非闰年则加 365 天。然后计算从给定年份的 1 月份到给定月份之间的总天数使用另一个循环遍历从 1 月份到给定月份之间的每一个月根据每个月的天数调用getDayOfMonth(year, m)函数进行累加。 确定第一天是星期几部分 使用总天数加 1 对 7 取余得到的结果即为给定日期是星期几。使用match语句根据余数的值进行相应的输出确定第一天是星期几。 格式化输出日历部分 首先输出星期几的表头即 “星期日 \t 星期一 \t 星期二 \t 星期三 \t 星期四 \t 星期五 \t 星期六 \t”。根据给定月份的第一天是星期几在输出日期之前先输出相应数量的制表符以实现对齐。使用counter变量记录已经输出的日期数量初始值为第一天是星期几的值。然后循环输出每个日期每输出一个日期后输出两个制表符以保持格式整齐。每输出 7 个日期后进行换行以实现日历的格式化输出。使用counter变量对 7 取余当余数为 0 时进行换行。 六、测试与验证 为了验证我们的代码是否正确我们可以进行以下测试 输入合法的年份和月份检查输出的总天数、第一天是星期几以及日历格式是否正确。输入闰年和非闰年的年份检查 2 月份的天数是否正确。输入不合法的年份或月份检查是否能正确提示用户重新输入。 以下是一些测试示例 测试 1输入 2024 年 10 月 输入
2024
10输出 请输入年份数字|年份大于1900输入q退出:2024
请输入月份1-12:10
2024年10距离 1900-01-01相差45564天
2024年10月的第一天是星期二
星期日 星期一 星期二 星期三 星期四 星期五 星期六 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 测试 2输入 2023 年 2 月 输入 2023
2输出 请输入年份数字|年份大于1900输入q退出:2023
请输入月份1-12:2
2023年2距离 1900-01-01相差44956天
2023年2月的第一天是星期三
星期日 星期一 星期二 星期三 星期四 星期五 星期六 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 测试 3输入不合法的年份或月份 输入 abc
10输出 请输入年份数字|年份大于1900输入q退出:abc
请输入数字 输入 2024
13输出 请输入年份数字|年份大于1900输入q退出:2024
请输入月份1-12:13
输入的数据不合法请输入1~12之间的数字 测试 4输入q退出 输入 q输出 请输入年份数字|年份大于1900输入q退出:q
你已退出欢迎下次再来 通过以上测试我们可以看到代码能够正确地处理各种输入情况并输出正确的结果。 七、总结与展望 本文介绍了如何使用 Python 实现日期计算和日历格式化输出的功能。通过判断闰年、计算月份天数、计算总天数、确定第一天是星期几以及格式化输出日历等步骤我们成功地实现了一个简单而实用的日期处理程序。 这个程序可以应用于各种场景比如日程安排、项目管理、历史研究等。同时我们也可以对程序进行进一步的扩展和优化比如添加更多的功能如计算两个日期之间的间隔天数、判断某个日期是否在特定的时间段内等。 此外我们还可以使用 Python 的第三方库来处理日期和时间相关的任务比如datetime模块和pandas库等。这些库提供了更强大的功能和更方便的接口可以大大提高我们的开发效率。 Python 是一种非常强大的编程语言它提供了丰富的工具和库来处理各种任务。通过本文的介绍希望读者能够对 Python 的日期处理有更深入的了解并能够在实际的项目中应用这些知识。