15_python_练习题——打印日历
2017-03-06 17:09
295 查看
python 本身有一个类库,可以直接打印日历,但是也能自己组织语言重新写出来打印日历的方法,本文说明这两种方法的使用
calendar中有一个setfirstweekday()的方法,weekday的范围是 0 (Monday) to 6 (Sunday),即我们可以调整每周开始的那天到底是星期几
calendar.setfirstweekday(6)
calendar.prcal(2016)
结果如下:
2016
January Febru
4000
ary March
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 1 2 3 4 5 6 1 2 3 4 5
3 4 5 6 7 8 9 7 8 9 10 11 12 13 6 7 8 9 10 11 12
10 11 12 13 14 15 16 14 15 16 17 18 19 20 13 14 15 16 17 18 19
17 18 19 20 21 22 23 21 22 23 24 25 26 27 20 21 22 23 24 25 26
24 25 26 27 28 29 30 28 29 27 28 29 30 31
31
April May June
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 1 2 3 4 5 6 7 1 2 3 4
3 4 5 6 7 8 9 8 9 10 11 12 13 14 5 6 7 8 9 10 11
10 11 12 13 14 15 16 15 16 17 18 19 20 21 12 13 14 15 16 17 18
17 18 19 20 21 22 23 22 23 24 25 26 27 28 19 20 21 22 23 24 25
24 25 26 27 28 29 30 29 30 31 26 27 28 29 30
July August September
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 1 2 3 4 5 6 1 2 3
3 4 5 6 7 8 9 7 8 9 10 11 12 13 4 5 6 7 8 9 10
10 11 12 13 14 15 16 14 15 16 17 18 19 20 11 12 13 14 15 16 17
17 18 19 20 21 22 23 21 22 23 24 25 26 27 18 19 20 21 22 23 24
24 25 26 27 28 29 30 28 29 30 31 25 26 27 28 29 30
31
October November December
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 1 2 3 4 5 1 2 3
2 3 4 5 6 7 8 6 7 8 9 10 11 12 4 5 6 7 8 9 10
9 10 11 12 13 14 15 13 14 15 16 17 18 19 11 12 13 14 15 16 17
16 17 18 19 20 21 22 20 21 22 23 24 25 26 18 19 20 21 22 23 24
23 24 25 26 27 28 29 27 28 29 30 25 26 27 28 29 30 31
30 31
get_num_of_days_in_month 获得每月的天数
get_total_num_of_days 获得自1800年1月1日以来经过的天数
get_start_day 获得每月1日为星期几
print_month_body 打印日历的数字部分
get_month_name 获得每月的名称
print_month_title 打印日历标题与头部部分
第一种方法
使用python自带的内部库#!/usr/bin/python # coding:utf-8 # 引入日历模块 import calendar # 输入指定年月 yy = int(input("输入年份: ")) mm = int(input("输入月份: ")) # 显示日历 print(calendar.month(yy,mm)) calendar.prcal(yy)运行结果:
输入年份: 2017 输入月份: 3 March 2017 Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 2017 January February March Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 1 2 3 4 5 1 2 3 4 5 2 3 4 5 6 7 8 6 7 8 9 10 11 12 6 7 8 9 10 11 12 9 10 11 12 13 14 15 13 14 15 16 17 18 19 13 14 15 16 17 18 19 16 17 18 19 20 21 22 20 21 22 23 24 25 26 20 21 22 23 24 25 26 23 24 25 26 27 28 29 27 28 27 28 29 30 31 30 31 April May June Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 1 2 3 4 5 6 7 1 2 3 4 3 4 5 6 7 8 9 8 9 10 11 12 13 14 5 6 7 8 9 10 11 10 11 12 13 14 15 16 15 16 17 18 19 20 21 12 13 14 15 16 17 18 17 18 19 20 21 22 23 22 23 24 25 26 27 28 19 20 21 22 23 24 25 24 25 26 27 28 29 30 29 30 31 26 27 28 29 30 July August September Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 1 2 3 4 5 6 1 2 3 3 4 5 6 7 8 9 7 8 9 10 11 12 13 4 5 6 7 8 9 10 10 11 12 13 14 15 16 14 15 16 17 18 19 20 11 12 13 14 15 16 17 17 18 19 20 21 22 23 21 22 23 24 25 26 27 18 19 20 21 22 23 24 24 25 26 27 28 29 30 28 29 30 31 25 26 27 28 29 30 31 October November December Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 1 2 3 4 5 1 2 3 2 3 4 5 6 7 8 6 7 8 9 10 11 12 4 5 6 7 8 9 10 9 10 11 12 13 14 15 13 14 15 16 17 18 19 11 12 13 14 15 16 17 16 17 18 19 20 21 22 20 21 22 23 24 25 26 18 19 20 21 22 23 24 23 24 25 26 27 28 29 27 28 29 30 25 26 27 28 29 30 31 30 31
calendar中有一个setfirstweekday()的方法,weekday的范围是 0 (Monday) to 6 (Sunday),即我们可以调整每周开始的那天到底是星期几
calendar.setfirstweekday(6)
calendar.prcal(2016)
结果如下:
2016
January Febru
4000
ary March
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 1 2 3 4 5 6 1 2 3 4 5
3 4 5 6 7 8 9 7 8 9 10 11 12 13 6 7 8 9 10 11 12
10 11 12 13 14 15 16 14 15 16 17 18 19 20 13 14 15 16 17 18 19
17 18 19 20 21 22 23 21 22 23 24 25 26 27 20 21 22 23 24 25 26
24 25 26 27 28 29 30 28 29 27 28 29 30 31
31
April May June
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 1 2 3 4 5 6 7 1 2 3 4
3 4 5 6 7 8 9 8 9 10 11 12 13 14 5 6 7 8 9 10 11
10 11 12 13 14 15 16 15 16 17 18 19 20 21 12 13 14 15 16 17 18
17 18 19 20 21 22 23 22 23 24 25 26 27 28 19 20 21 22 23 24 25
24 25 26 27 28 29 30 29 30 31 26 27 28 29 30
July August September
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 1 2 3 4 5 6 1 2 3
3 4 5 6 7 8 9 7 8 9 10 11 12 13 4 5 6 7 8 9 10
10 11 12 13 14 15 16 14 15 16 17 18 19 20 11 12 13 14 15 16 17
17 18 19 20 21 22 23 21 22 23 24 25 26 27 18 19 20 21 22 23 24
24 25 26 27 28 29 30 28 29 30 31 25 26 27 28 29 30
31
October November December
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 1 2 3 4 5 1 2 3
2 3 4 5 6 7 8 6 7 8 9 10 11 12 4 5 6 7 8 9 10
9 10 11 12 13 14 15 13 14 15 16 17 18 19 11 12 13 14 15 16 17
16 17 18 19 20 21 22 20 21 22 23 24 25 26 18 19 20 21 22 23 24
23 24 25 26 27 28 29 27 28 29 30 25 26 27 28 29 30 31
30 31
第二种方法
is_leap_year 判断是否为闰年get_num_of_days_in_month 获得每月的天数
get_total_num_of_days 获得自1800年1月1日以来经过的天数
get_start_day 获得每月1日为星期几
print_month_body 打印日历的数字部分
get_month_name 获得每月的名称
print_month_title 打印日历标题与头部部分
#!/usr/bin/python # coding=utf-8 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_days_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(1, year): if is_leap_year(y): days += 366 else: days += 365 for m in range(1, month): days += get_num_of_days_in_month(year, m) return days def get_start_day(year, month): # 返回当月1日是星期几,由1800.01.01是星期三推算 return 1+get_total_num_of_day(year, month) % 7 # 月份与名称对应的字典 month_dict = {1: 'January', 2: 'February', 3: 'March', 4: 'April', 5: 'May', 6: 'June', 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 Mon Tue Wed Thu Fri Sat ' def print_month_body(year, month): ''''' 打印日历正文 格式说明:空两个空格,每天的长度为5 需要注意的是print加逗号会多一个空格 ''' i = get_start_day(year, month) if i != 7: print ' ', # 打印行首的两个空格 print ' ' * i, # 从星期几开始则空5*几个空格 for j in range(1, get_num_of_days_in_month(year, month)+1): print '%4d' %j, # 宽度控制,4+1=5 i += 1 if i % 7 == 0: # i用于计数和换行 print ' ' # 每换行一次行首继续空格 # 主函数部分 year = int(raw_input("Please input target year:")) month = int(raw_input("Please input target month:")) print_month_title(year, month) print_month_body(year, month)
相关文章推荐
- 关于python的calendar包打印日历
- 17_python_练习题——打印指定目录下的文件和文件夹(相当于tree命令)
- python练习题:循环打印嵌套列表
- Python练习题 15-1立方
- 15_python_练习题——使用webdriver查询IP地址
- python中如何打印某月日历
- python 获取某个月的全部日期,打印日历的简单算法
- Python---数据类型和变量.练习题.请打印出以下变量的值
- 2017.08.18 利用python打印一年的日历
- 支持msnp15协议python可发送离线消息脚本附录1
- 打印出python 当前全局变量和入口参数的所有属性
- python 核心编程 练习题
- Python 遍历目录并打印出子目录的大小
- SQL Server一个打印日历的函数
- 支持MSNP15的MSN登录程序PYTHON版代码
- 用java实现打印任一年的日历
- 打印出python 当前全局变量和入口参数的所有属性
- Python入门的36个例子——15 默认参数
- 打印9!所有组合,并且计算行,列,对角之和为15的矩阵
- Lotus Notes 日历的【打印到文档】功能,简单而强大!