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. 運行結果如下圖:
新聞熱點
疑難解答