python打印日历
#未优化的代码
1 #输出日历 2 def print_calendar(year,month,date = 1): 3 month_dict = {'1':'January','2':'February','3':'March','4':'April','5':'May','6':'June','7':'July', 4 '8':'August','9':'September','10':'October','11':'November','12':'December'} 5 6 #数字月份转换为字符串,并判断月份和号数是否合法 7 if month in range(1,13) and date in range(1,31): 8 month_str = str(month) 9 if month_str in month_dict: 10 month_str = month_dict[month_str] 11 else: 12 print('月份或号数输入不合法') 13 return -1 14 15 #头部 16 print('%15s%8d'%(month_str,year)) 17 print('-'*33) 18 print('Sun Mon Tue Wed Thu Fri Sat') 19 20 #得到每月1号是星期几 21 first_day = get_start_day(year,month,1) 22 #得到此月有多少天 23 month_num = days_of_month(year,month) 24 25 each_day = 0 26 #主体 27 for index in range(1,43): 28 29 if index < first_day + 1: 30 print(' '*5,end = '') 31 else: 32 if (index - 1) % 7 == 0: 33 print('') 34 each_day += 1 35 if each_day > month_num: 36 return False 37 if each_day < 10: 38 if each_day == date: 39 print('%-5s'%('--'),end = '') 40 else: 41 print(' %-4d'%(each_day),end = '') 42 else: 43 if each_day == date: 44 print('%-5s'%('--'),end = '') 45 else: 46 print('%-5d'%(each_day),end = '') 47 48 49 #输入一个年月日,判断是星期几 50 #需要一个比较标准:2010-1-1是星期五 51 #计算当前距离标准过了多少天(total_days % 7 + 5 -1)%7 52 #先遍历年份,是闰年+366,不是+365 53 #再遍历月份,31,30,29,28 54 def get_start_day(year,month,date): 55 total_days = 0 56 #遍历年份 57 for one_year in range(2010,year): 58 if is_leap_year(one_year): 59 total_days += 366 60 else: 61 total_days += 365 62 #print(total_days) 63 #遍历月份 64 for one_month in range(1,month): 65 total_days += days_of_month(year,one_month) 66 #print(total_days) 67 #加上当月号数,则求得总共过了多少天 68 total_days += date 69 70 #求输入的年月日是星期几 71 day = (total_days % 7 + 5 - 1) % 7 72 73 #print(total_days) 74 #print(day) 75 return day 76 77 #输入一个年份和月份,输出这月有多少天 78 #1,3,5,7,8,10,12--------31天 79 #4,6,9,11 --------------30天 80 #如果是闰年2------------29天 81 #不是闰年 2-------------28天 82 def days_of_month(year,month): 83 days = 0 84 if month in (1,3,5,7,8,10,12): 85 days = 31 86 elif month in (4,6,9,11): 87 days = 30 88 elif is_leap_year(year): 89 days = 29 90 else: 91 days = 28 92 return days 93 94 def is_leap_year(year): 95 if year % 4 == 0 and year % 100 != 0 or year % 400 == 0: 96 return True 97 return False 98 99 def main(): 100 print('*'*33) 101 year = int(input('请输入年份:')) 102 month = int(input('请输入月份:')) 103 date = int(input('请输入号数:')) 104 print('*'*33) 105 #某年某月有多少天 106 #days = days_of_month(year,month) 107 #print('{}年{}月有{}天'.format(year,month,days)) 108 #某年某月某日是星期几 109 #day = get_start_day(year,month,date) 110 #print('{}年{}月{}日是星期{}'.format(year,month,date,day)) 111 #打印日历 112 print_calendar(year,month,date) 113 114 #执行 115 main()