Python实现万年历
1.最近在学习Python的过程中,想起了以前学习C语言时的万年历算法,就打算写一下,主要是为了熟悉Python的语法,以此来铭记一下Python的学习历程。
2.实现万年历需要用到的基本知识有
闰年判断算法给定某年某月某日是星期几,计算某年某月某日是星期几算法(通常以1800年1月1日星期三为起始)计算两个给定日期之间相隔多少天3.以下是代码实现:
#coding=utf-8 """@ function perpetual calendar;@author: wly@Date: 2017-03-05@description: 输入一个年份可以打印这一年的日历。Python基础学习插曲""""""1.is_leap_year 判断是否问闰年的函数2.get_month_days 获取一个月有多少天3.get_total_days 已知1800年1月1日为星期3,距某年某月多少天4.get_start_day 获取某年某月的第一天是星期几 """# 定义基础数据arrWeek = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];arrMonth = ["January","February","March","APRil","May","June","July","August","September","October","November","December"];def is_leap_year(year): if (year % 4 ==0 and year % 100 !=0 or year % 400 ==0): return True else: return False def get_month_days(year,month): if(month in (1,3,5,7,8,10,12)): return 31; elif(month in (4,6,9,11)): return 30; elif(is_leap_year(year)): return 29; else: return 28;def get_total_days(year,month): days = 0; for i in range(1800,year): if(is_leap_year(i)): #闰年 days += 366; else: #平年 days += 365; #一直计算到所求月份前一个月即可 for j in range(1,month): days += get_month_days(year, j); return days; def get_start_day(year,month): #计算是星期几 return (3 + get_total_days(year, month)) % 7; def print_calendar(year): for k,m in enumerate(arrMonth): #打印日历的月份和年份 print " ",m," ",year print "---------------------------" #计算这个月有几天 day = get_month_days(year, k+1); #计算这个月的第一天是星期几 startDay = get_start_day(year, k+1); #打印星期表头 for k,v in enumerate(arrWeek): print "%3s" % v, print #打印这个月的天数 for i in range(1,day+1): #计算要缩进几个单位 temp = (startDay + i-1) % 7 #用于缩进格式,只要这个月的第一天缩进正确即可 if(i==1): #循环打印缩进单位 for j in range(temp): print " ", print "%3s" % i, #打印到星期六之后要换行 if(temp == 6) : print #一个月遍历完成打印结束分隔符 print print "---------------------------"#调用程序print_calendar(2017);4. 运行结果如下图:
新闻热点
疑难解答