Coding for KidsCoding for Kids
创意关卡挑战教师指南
为功能投票
高级 Python 开发课程
第 章
>
第 级

字符串与时间模块
日历模块

目标

使用 Calendar 模块检查日历并为部分交付时间表设置日期。

有几批货物已到达,并且需要满足特定的时间表,以便它们能围绕新的农场建设进行分配。之前我们使用 date 模块来设置运输标签,这里我们将使用 calendar 模块来设置时间表。为了使用该模块的类和函数,请使用 import calendar 导入所有相关材料。

在我们的应用场景中,将使用以下 calendar 模块函数:

  • calendar.calendar(): 显示指定年份的完整日历,接受一个(1)参数,即您希望显示的年份。
  • calendar.month(): 显示单个月份的日历,接受两个(2)参数,分别为年份和月份。
  • calendar.isleap(): 检查一个年份是否为闰年,接受一个(1)参数,即要检查的年份。
  • calendar.leapdays(): 检查跨年累计的闰日数量,接受两个(2)参数,分别为您希望检查的时间段的起始年份和结束年份。
  • itermonthdays(): 使用 Calendar() 类,迭代该月的所有天数,接受两个参数,分别为年份和月份。
  • itermonthdates(): 使用 Calendar() 类,迭代该月的所有日期,接受两个参数,分别为年份和月份。
  • monthdayscalendar(): 使用 Calendar() 类,按周迭代该月的所有天数,接受两个参数,分别为年份和月份。数据存储在嵌套列表中。
  • monthdays2calendar(): 与前一个函数相同,但将周和天数存储在二维列表中。

首先,走到金色 X 标记处检查日历,创建一个名为 cal 的变量并存储 calendar.calendar() 的返回值,并将年份 2026 作为参数传入,如下所示:

cal = calendar.calendar(2026)

使用 display() 函数显示刚刚设置的 cal 变量。

检查并显示日历后,走向浅色 X 标记并检查桌上的电子表格。使用 read() 函数查看供应品预定日期月份的备忘录。创建两个变量,一个名为 year,另一个名为 month,并用您读取到的信息填充它们。

创建一个名为 calendar_month 的变量,使用 yearmonth 变量作为参数,将 calendar.month() 函数的返回值存储在其中。使用 display() 函数显示该日历月份,该月份将用于设置配送时间表。

走向深色 X 标记处,位于绿色地毯上,在这里我们将记录一些数据点以确保时间表不会偏移。创建两个变量,一个名为 leap_year,另一个名为 leap_days。对于 leap_year 变量,存储 calendar.isleap() 的返回结果,并将 2026 作为参数传入。这将帮助您确认当前项目年份是否为闰年。对于 leap_days 变量,将 calendar.leapdays() 的返回值存储在其中,并传入参数 20202027,以验证整个项目期间发生的闰日数量。使用预先编写的 write() 函数,将 leap_yearleap_days 写入数据记录中。

走向深色 X 标记处,位于红色地毯上,并面向桌子,在这里我们将规划本月的时间表。创建一个名为 date 的变量,存储 calendar.Calendar() 的返回值,这将创建一个我们可在后续引用的类对象。再创建一个变量,名为 day_roster,并赋值为空字符串,这将用于存储天数的列表,如下所示:

day_roster = ""

编辑器中预先编写了一个 for 循环,用于迭代日历并列出日期。使用 itermonthdays() 函数,并传入之前创建的 yearmonth 变量作为参数。根据需要添加缺失的部分以完成天数列表的统计。

for day in dates.itermonthdays(-insert value-, -insert value-): entry = "Day: %s \n" % (day) day_roster += entry

设置好该循环后,再创建一个该循环的副本,不过将 itermonthdays() 函数替换为 itermonthdates(),并传入 yearmonth 变量作为参数。对于 entry 变量,让其记录数据,如下所示:

entry = "%s \n" % (day)

这将为我们提供项目期间的完整日期。使用预先编写的 display() 函数,并传入 day_roster 变量,显示日历中项目所有日期的完整列表。

走向深色 X 标记处,位于蓝色地毯上,并面向备忘录,在这里我们将设置项目跟进工作周的列表。创建一个名为 weeks 的变量,存储 calendar.Calendar() 的返回值,这将创建一个我们可通过函数引用的类对象。将 month 变量的值替换为 7,以便调整我们正在处理的时间表,如下所示:

month = 7

创建一个名为 week_roster 的变量,并赋值为空字符串,用于存储周数列表,如下所示:

week_roster = ""

编辑器中预先编写了一个 for 循环,用于迭代日历并列出工作日。使用 monthdayscalendar() 函数,并传入之前创建的 yearmonth 变量作为参数。根据需要添加缺失的部分以完成周列表的统计。

for day in weeks.monthdayscalendar(-insert value-, -insert value-): entry = "%s \n" % (day) week_roster += entry

设置好该循环后,再创建该循环的一个副本,不过将 monthdayscalendar() 函数替换为 monthdays2calendar(),并传入 yearmonth 变量作为参数。这将为我们提供项目期间完整的日期信息。使用预先编写的 display() 函数,并传入 week_roster 变量,显示日历中项目所有工作日的完整列表,以完成本关任务。

代码书