代码如下:
1 #!/usr/bin/env python2
2 #-*- coding:utf-8 -*-
3 """
4 使用python实现万年历
5 """
6
7 def is_leap_year(year):
8 """
9 判断是否是闰年,返回boolean值
10 """
11 if year/4==0 and year/400 !=0:
12 return True
13 elif year/100 == 0 and year/400 ==0 :
14 return True
15 else:
16 return False
17
18 def getMonthDays(year,month):
19 """
20 获取指定年月的月份有多少天
21 """
22 days = 31 #31天居多,设置为默认值
23 if month == 2 : #2月份要判断是否是闰年
24 if is_leap_year(year):
25 days=29
26 else:
27 days=28;
28 elif month in [4,6,9,11]: #判断小月,只有30天
29 days=30
30 return days
31
32 def getTotalDays(year,month):
33 """
34 获取1990-01-01离现在有多少天,1990-01-01是星期一,以这个为标准来判断星期
35 """
36 totalDays=0
37 for i in range(1990,year): #使用range来循环,算出多少年多少天
38 if is_leap_year(i): #判断是否是闰年
39 totalDays += 366
40 else:
41 totalDays += 365
42 for i in range(1,month): #使用range循环,算出今年前面几个月过了多少> 天
43 totalDays +=getMonthDays(year,i)
44 return totalDays
45
46
47 if __name__ == '__main__':
48 while True: #循环判断是否输入错误的格式
49 print "××××××××××python实现万年历××××××××"
50 year = raw_input("请输入年份(如:1990):")
51 month = raw_input("请输入月份 (如: 1) : ")
52 try: #捕捉输入异常格式和月份的正确
53 year = int(year)
54 month = int(month)
55 if month <1 or month >12: #判断月份是否输入错误,错误就重新开始循环
56 print "年份或者月份输入错误,请重新输入!"
57 continue
58 except: #捕捉到转换成整型异常,输出提示,重新开始循环
59 print "年份或者月份输入错误,请重新输入!"
60 continue
61 break #如果没有异常就跳出循环
62 #if is_leap_year(year):
63 # print "%s是润年"%year
64 #else:
65 # print "%s是平年"%year
66 #print "%s月份总共有%s天!"%(month,getMonthDays(year,month))
67
68 print "日\t一\t二\t三\t四\t五\t六"
69 iCount = 0 #计数器来判断是否换行
70 for i in range(getTotalDays(year,month)%7+1):
71 print '\t', #输出空不换行
72 iCount+=1
73 for i in range(1,getMonthDays(year,month)):
74 print i,
75 print '\t',
76 iCount +=1
77 if iCount%7 == 0 : #计数器取余为0,换行
78 print ''
运行效果:
运行效果
网友评论