python实现输出日历
短信预约 -IT技能 免费直播动态提醒
终于还有一个星期就放暑假了,可以抽出时间来学点新的东西,想想半年多没登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编了一个有八十行的程序,希望大家多多指教。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341