代码:
#WanNianLi_Month. py # coding=utf-8 __author__ = 'xxx' def is_leap_year(year): #判断是否为闰年 if year % 4 == 0 and year % 100 != 0 or year % 400 == 0: return True else: return False def get_num_of_day_in_month(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_num_of_day(year,month): #自1800年1月1日以来多少天 days = 0 for y in range(1800, year): if is_leap_year(y): days += 366 else: days += 365 for m in range(1, month): days += get_num_of_day_in_month(year, m) return days def get_start_day(year, month): #返回当月1日是星期几,由1800.01.01是星期几来算 return (3 + get_total_num_of_day(year, month)) % 7 #月份与名称对应的字典 month_dict = {1:'January', 2:'February', 3:'March', 4:'April', 5:'May', 6:'Jne', 7:'July', 8:'August', 9:'September', 10:'October', 11:'November', 12:'December'} def get_month_name(month): #返回当月的名称 return month_dict[month] def print_month_title(year, month): #打印日历的首部 print(' ', get_month_name(month), ' ', year, ' ' ) print('-------------------------------------') print('Sun MOon Tue Wed Thu Fri Sat ') def print_month_body(year, month): ''' 打印日历正文 格式说明:空俩个空格,每天的长度是5 需要注意的是print加逗号会多一个空格 ''' i = get_start_day(year, month) #print(i) print(' ' * i, end='') #从星期几开始则空5*几个空格 for j in range(1, get_num_of_day_in_month(year, month)+1): print('%5d' %j, end='')#宽度控制,4+1=5 i += 1 if i % 7 == 0: #i用于计数和换行 print('') #每换行一次行首继续空格 year = int(input("Please input target year:")) for month in range(1, 13): print_month_title(year, month) print_month_body(year, month) print()
结果: