利用python实现万年历

代码如下:

  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 ''


运行效果:


利用python实现万年历_第1张图片
运行效果

你可能感兴趣的:(利用python实现万年历)