首页 > 编程 > Python > 正文

Python学习插曲之万年历算法

2019-11-06 07:19:07
字体:
来源:转载
供稿:网友

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. 运行结果如下图:


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表