­

python实现输出日历

以下是使用几个简单的函数实现给定指定年月实现当月日历输出的程序,大部分内容引用自网易云课堂哈工大开设的Python程序设计入门函数一章的课后作业。

程序设计图如下:

自下往上看:

  • 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 打印日历标题与头部部分

具体实现如下:

# coding=utf-8  __author__ = 'Leonard'      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(1800, 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 3 + 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)

运行示例:

实现起来难度不大,只是在格式控制上需要花点心思,具体详见print_month_body函数的注释。

第一次用Python编了一个有八十行的程序,希望大家多多指教。