4.3.4 第四层设计
先考虑 days 函数的实现。我们将每个月的天数放在列表中,然后通过月份进行索引即 可得到该月天数。要注意有个特殊情形,即闰年 2 月份。这时应当为天数多加 1 天。代码如 下:
def days(y,m):
month_days = [31,28,31,30,31,30,31,31,30,31,30,31]
d = month_days[m]
if (m == 1) and (y%4 == 0 and (y%100 != 0 or y%400 == 0)):
d = d + 1
return d
接着考虑函数 layout 的实现。本函数根据 first 和 d,将每一个日期填入日历框架(图 4.9)。
def layout(first,d):
frame = 42 * [""]
if first == 0:
first = 7
j = first - 1
for i in range(1,d+1):
frame[j] = i
j = j + 1
return frame
最后实现 printMonth 函数。日历布局已经保存在列表 frame 之中,函数要做的事情就是将列表成员打印出来。其中的关键是掌握好换行的时机,采用了日历框架后这一点变得很简单,只需每输出 frame 的七个成员就换行一次。代码如下:
def printMonth(frame):
for i in range(42):
print "%3s" % (frame[i]),
if (i+1)%7 == 0:
print
至此,我们为 calendar 程序设计的所有模块都已实现。