python实现输出日历

终于还有一个星期就放暑假了,可以抽出时间来学点新的东西,想想半年多没登CSDN差点把密码忘了我也是醉了。

废话不多说,正文开始

以下是使用几个简单的函数实现给定指定年月实现当月日历输出的程序,大部分内容引用自网易云课堂哈工大开设的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编了一个有八十行的程序,希望大家多多指教。

  • 16
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值