15_python_练习题——打印日历

来源:互联网 发布:淘宝网首页戴丝玉 编辑:程序博客网 时间:2024/06/05 04:40

python 本身有一个类库,可以直接打印日历,但是也能自己组织语言重新写出来打印日历的方法,本文说明这两种方法的使用

第一种方法

使用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 2017Mo Tu We Th Fr Sa Su       1  2  3  4  5 6  7  8  9 10 11 1213 14 15 16 17 18 1920 21 22 23 24 25 2627 28 29 30 31                                  2017      January                   February                   MarchMo 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 1916 17 18 19 20 21 22      20 21 22 23 24 25 26      20 21 22 23 24 25 2623 24 25 26 27 28 29      27 28                     27 28 29 30 3130 31       April                      May                       JuneMo 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 1110 11 12 13 14 15 16      15 16 17 18 19 20 21      12 13 14 15 16 17 1817 18 19 20 21 22 23      22 23 24 25 26 27 28      19 20 21 22 23 24 2524 25 26 27 28 29 30      29 30 31                  26 27 28 29 30        July                     August                  SeptemberMo 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 1010 11 12 13 14 15 16      14 15 16 17 18 19 20      11 12 13 14 15 16 1717 18 19 20 21 22 23      21 22 23 24 25 26 27      18 19 20 21 22 23 2424 25 26 27 28 29 30      28 29 30 31               25 26 27 28 29 3031      October                   November                  DecemberMo 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 1716 17 18 19 20 21 22      20 21 22 23 24 25 26      18 19 20 21 22 23 2423 24 25 26 27 28 29      27 28 29 30               25 26 27 28 29 30 3130 31

calendar中有一个setfirstweekday()的方法,weekday的范围是 0 (Monday) to 6 (Sunday),即我们可以调整每周开始的那天到底是星期几

calendar.setfirstweekday(6)  calendar.prcal(2016)

结果如下:

                                  2016      January                   February                   MarchSu 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 1210 11 12 13 14 15 16      14 15 16 17 18 19 20      13 14 15 16 17 18 1917 18 19 20 21 22 23      21 22 23 24 25 26 27      20 21 22 23 24 25 2624 25 26 27 28 29 30      28 29                     27 28 29 30 3131       April                      May                       JuneSu 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 1110 11 12 13 14 15 16      15 16 17 18 19 20 21      12 13 14 15 16 17 1817 18 19 20 21 22 23      22 23 24 25 26 27 28      19 20 21 22 23 24 2524 25 26 27 28 29 30      29 30 31                  26 27 28 29 30        July                     August                  SeptemberSu 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 1010 11 12 13 14 15 16      14 15 16 17 18 19 20      11 12 13 14 15 16 1717 18 19 20 21 22 23      21 22 23 24 25 26 27      18 19 20 21 22 23 2424 25 26 27 28 29 30      28 29 30 31               25 26 27 28 29 3031      October                   November                  DecemberSu 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 1716 17 18 19 20 21 22      20 21 22 23 24 25 26      18 19 20 21 22 23 2423 24 25 26 27 28 29      27 28 29 30               25 26 27 28 29 30 3130 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-8def is_leap_year(year):    # 判断是否为闰年    if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:        return True    else:        return Falsedef 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 28def 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 daysdef 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)



1 0