处理任意年份的日期

PythonPythonBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个项目中,你将学习如何创建一个Python脚本,用于打印给定年份中的所有星期日。对于任何需要在编程项目中处理日期和时间相关任务的人来说,这都是一项有用的技能。

👀 预览

python Sunday.py 2022
2022-01-02
2022-01-09
2022-01-16
2022-01-23
2022-01-30
2022-02-06
2022-02-13
2022-02-20
...

🎯 任务

在这个项目中,你将学习:

  • 如何在Python中使用datetimecalendar模块来处理日期
  • 如何编写一个函数,计算并返回给定年份中所有星期日的列表
  • 如何在Python脚本中处理用户输入和命令行参数
  • 如何增强和定制脚本,使其更灵活、更用户友好

🏆 成果

完成这个项目后,你将能够:

  • 理解如何在Python中处理日期和时间
  • 编写一个可以打印给定年份中所有星期日的脚本
  • 定制脚本以处理不同年份和用户输入
  • 将你新学到的知识应用到编程项目中的其他日期相关任务中

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python/ControlFlowGroup -.-> python/conditional_statements("Conditional Statements") python/FunctionsGroup -.-> python/arguments_return("Arguments and Return Values") python/ModulesandPackagesGroup -.-> python/standard_libraries("Common Standard Libraries") python/PythonStandardLibraryGroup -.-> python/date_time("Date and Time") subgraph Lab Skills python/conditional_statements -.-> lab-302733{{"处理任意年份的日期"}} python/arguments_return -.-> lab-302733{{"处理任意年份的日期"}} python/standard_libraries -.-> lab-302733{{"处理任意年份的日期"}} python/date_time -.-> lab-302733{{"处理任意年份的日期"}} end

创建 Sunday.py 文件

在这一步中,你将创建 Sunday.py 文件并设置脚本的初始结构。

  1. ~/project 目录中创建一个 Sunday.py 文件。
cd ~/project
touch Sunday.py
  1. 将以下代码添加到文件中:
import datetime
import sys


## 函数:打印给定年份中的所有星期日
def print_sundays(year):
    sundays = []  ## 用于存储星期日的列表
    date = datetime.date(year, 1, 1)  ## 从给定年份的1月1日开始
    delta = datetime.timedelta(days=1)  ## 定义1天的时间间隔

    ## 找到该年的第一个星期日
    while date.weekday()!= 6:  ## 6 表示星期日(星期一是0,星期日是6)
        date += delta  ## 移动到下一天

    ## 打印该年中的所有星期日
    while date.year == year:  ## 循环直到年份改变
        sundays.append(
            date.strftime("%Y-%m-%d")
        )  ## 将星期日添加到列表中(格式为 YYYY-MM-DD)
        date += datetime.timedelta(
            weeks=1
        )  ## 移动到下一个星期日(增加1周)

    return sundays  ## 返回星期日列表


## 从命令行参数读取年份
if len(sys.argv) > 1:
    year = int(sys.argv[1])  ## 将命令行参数转换为整数
    sundays = print_sundays(year)  ## 调用函数获取星期日列表
    for sunday in sundays:
        print(sunday)  ## 打印每个星期日
else:
    print(
        "请提供一个年份作为命令行参数。"
    )  ## 如果没有提供年份,则显示错误消息

这段代码设置了 Sunday.py 脚本的基本结构,包括 print_sundays() 函数和命令行参数处理。

理解代码

在这一步中,你将理解 Sunday.py 文件中代码的目的和功能。

  1. print_sundays() 函数接受一个 year 参数,并返回该年份中所有星期日的列表。
  2. 该函数首先使用给定的 year 和该年的第一天(1月1日)创建一个 datetime.date 对象。
  3. 然后,它通过遍历日期,直到工作日为6(星期日),来找到该年的第一个星期日。
  4. 一旦找到第一个星期日,该函数进入一个循环,持续到年底。在每次迭代中,它将当前的星期日添加到 sundays 列表中,并移动到下一个星期日(通过添加1周的时间增量)。
  5. 最后,该函数返回星期日的列表。
  6. 脚本的主要部分从命令行参数读取年份,并使用提供的年份调用 print_sundays() 函数。然后,它打印列表中的每个星期日。
  7. 如果没有提供命令行参数,脚本将显示一条错误消息。

运行脚本

在这一步中,你将运行 Sunday.py 脚本并观察输出。

  1. 打开一个终端并导航到 /home/labex/project 目录。
  2. 使用一个特定年份作为命令行参数运行 Sunday.py 脚本:
python Sunday.py 2022

你应该会看到以下输出:

2022-01-02
2022-01-09
2022-01-16
2022-01-23
2022-01-30
2022-02-06
2022-02-13
2022-02-20
2022-02-27
2022-03-06
2022-03-13
2022-03-20
2022-03-27
2022-04-03
2022-04-10
2022-04-17
2022-04-24
2022-05-01
2022-05-08
2022-05-15
2022-05-22
2022-05-29
2022-06-05
2022-06-12
2022-06-19
2022-06-26
2022-07-03
2022-07-10
2022-07-17
2022-07-24
2022-07-31
2022-08-07
2022-08-14
2022-08-21
2022-08-28
2022-09-04
2022-09-11
2022-09-18
2022-09-25
2022-10-02
2022-10-09
2022-10-16
2022-10-23
2022-10-30
2022-11-06
2022-11-13
2022-11-20
2022-11-27
2022-12-04
2022-12-11
2022-12-18
2022-12-25

输出显示了2022年的所有星期日。

✨ 查看解决方案并练习

总结

恭喜你!你已经完成了这个项目。你可以在LabEx中练习更多实验来提升你的技能。