python实现输出日历_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编了一个有八十行的程序,希望大家多多指教。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值