#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()
————————————————