Python学习实践-----打印日历
使用python语言实现在控制台打印日历
输入年、月、日
输出对应日历,指定的日数输出为‘--’
程序没有做严格的输入验证,故输入整数即可。
以下为没有优化的源码:
print_calendar.py
#输出日历 def print_calendar(year,month,date = 1): month_dict = {':'July', ':'December'} #数字月份转换为字符串,并判断月份和号数是否合法 if month in range(1,13) and date in range(1,31): month_str = str(month) if month_str in month_dict: month_str = month_dict[month_str] else: print('月份或号数输入不合法') return -1 #头部 print('%15s%8d'%(month_str,year)) print('-'*33) print('Sun Mon Tue Wed Thu Fri Sat') #得到每月1号是星期几 first_day = get_start_day(year,month,1) #得到此月有多少天 month_num = days_of_month(year,month) each_day = 0 #主体 for index in range(1,43): if index < first_day + 1: print(' '*5,end = '') else: if (index - 1) % 7 == 0: print('') each_day += 1 if each_day > month_num: return False if each_day < 10: if each_day == date: print('%-5s'%('--'),end = '') else: print(' %-4d'%(each_day),end = '') else: if each_day == date: print('%-5s'%('--'),end = '') else: print('%-5d'%(each_day),end = '') #输入一个年月日,判断是星期几 #需要一个比较标准:2010-1-1是星期五 #计算当前距离标准过了多少天(total_days % 7 + 5 -1)%7 #先遍历年份,是闰年+366,不是+365 #再遍历月份,31,30,29,28 def get_start_day(year,month,date): total_days = 0 #遍历年份 for one_year in range(2010,year): if is_leap_year(one_year): total_days += 366 else: total_days += 365 #print(total_days) #遍历月份 for one_month in range(1,month): total_days += days_of_month(year,one_month) #print(total_days) #加上当月号数,则求得总共过了多少天 total_days += date #求输入的年月日是星期几 day = (total_days % 7 + 5 - 1) % 7 #print(total_days) #print(day) return day #输入一个年份和月份,输出这月有多少天 #1,3,5,7,8,10,12--------31天 #4,6,9,11 --------------30天 #如果是闰年2------------29天 #不是闰年 2-------------28天 def days_of_month(year,month): days = 0 if month in (1,3,5,7,8,10,12): days = 31 elif month in (4,6,9,11): days = 30 elif is_leap_year(year): days = 29 else: days = 28 return days def is_leap_year(year): if year % 4 == 0 and year % 100 != 0 or year % 400 == 0: return True return False def main(): print('*'*33) year = int(input('请输入年份:')) month = int(input('请输入月份:')) date = int(input('请输入号数:')) print('*'*33) #某年某月有多少天 #days = days_of_month(year,month) #print('{}年{}月有{}天'.format(year,month,days)) #某年某月某日是星期几 #day = get_start_day(year,month,date) #print('{}年{}月{}日是星期{}'.format(year,month,date,day)) #打印日历 print_calendar(year,month,date) #执行 main()
运行效果如图:
Python学习实践-----打印日历的更多相关文章
- Python实战练习——打印日历教程
很长一段时间没有接触过C语言了,想来做这一行当已经有三两年了. 今天突然想起来以前用C语言在VC6上写代码的日子,想了想以前的一些实战练习. 所以今天打算用Python来写一个C语言以前练习的题目-日 ...
- Python学习实践 | speech智能语音模块
最近的生活.学习节奏很是容易被打断,终于,在今天,既实习结束之后,夏令营也结束了. 前几天,一个人在复习地很累的时候,又重新将Python捡了起来,看了挺多的知识点. 真是太有意(wu)思(liao) ...
- Python学习实践------正向最大匹配中文分词
正向最大匹配分词: 1.加载词典文件到集合中,取词典文件中最大长度词的length 2.每次先在句子中按最大长度分割,然后判断分割的词是否存在字典中,存在则记录此词,调整起始点. 3.不存在则按最大长 ...
- Python 学习笔记 多进程 multiprocessing--转载
本文链接地址 http://quqiuzhu.com/2016/python-multiprocessing/ Python 解释器有一个全局解释器锁(PIL),导致每个 Python 进程中最多同时 ...
- Appium学习实践(二)Python简单脚本以及元素的属性设置
1.简单的Python脚本 Appium中的设置与Appium学习实践(一)简易运行Appium中的一致 Launch后,执行脚本 #coding:utf-8 import unittest impo ...
- Python 最佳实践指南 2018 学习笔记
基础信息 版本 Python 2.7 Python 3.x Python2.7 版本在 2020 年后不再提供支持,建议新手使用 3.x 版本进行学习 实现 CPython:Python的标准实现: ...
- 《Python学习手册 第五版》 -第11章 赋值、表达式和打印
上一章对Python的语句和语法已经进行了基本的说明,接下来就是每个章节的详细说明,本章的主要内容就是标题中涵盖的三点:赋值语句.表达式语句.打印语句 本章重点内容如下: 1.赋值语句 1)赋值语句的 ...
- python打印日历
#未优化的代码 1 #输出日历 def print_calendar(year,month,date = 1): month_dict = {':'July', ':'December'} #数字月份 ...
- Python学习的个人笔记(基础语法)
Python学习的个人笔记 题外话: 我是一个大二的计算机系的学生,这份python学习个人笔记是趁寒假这一周在慕课网,w3cschool,还有借鉴了一些博客,资料整理出来的,用于自己方便的时候查阅, ...
随机推荐
- 【翻译】MongoDB指南/引言
[原文地址]https://docs.mongodb.com/manual/ 引言 MongoDB是一种开源文档型数据库,它具有高性能,高可用性,自动扩展性 1.文档数据库 MongoDB用一个文档来 ...
- 【Win 10应用开发】延迟加载图片的另一种方法
上一篇文章中老周给大伙介绍了x:Phase和x:Bind的用法,并演示了一个延迟加载的示例.不过,那个例子会遗留一个问题,就是UI线程被阻塞,所以启动应用较慢. 如果希望图片可以延迟加载,或许我们可以 ...
- Python标准模块--multiprocessing
1 模块简介 multiprocessing模块在Python2.6中引入.最初的multiprocessing是由Jesse Noller和Richard Oudkerk在PEP 371中定义.就像 ...
- 【CSS进阶】伪元素的妙用2 - 多列均匀布局及title属性效果
最近无论是工作还是自我学习提升都很忙,面对长篇大论的博文总是心有余而力不足,但又不断的接触学习到零碎的但是很有意义的知识点,很想分享给大家,所以本篇可能会很短. 本篇接我另一篇讲述 CSS 伪元素的文 ...
- OSGi 基本原理
定义 OSGi(Open Service Gateway Initiative)技术是面向Java的动态模型系统. 这个框架实现了一个优雅.完整和动态地组价模型.应用程序(称为bundle)无序重新引 ...
- JSONP的诞生、原理及应用实例
问题: 页面中有一个按钮,点击之后会更新网页中的一个盒子的内容. Ajax可以很容易的满足这种无须刷新整个页面就可以实现数据变换的需求. 但是,Ajax有一个缺点,就是他不允许跨域请求资源. 如果我的 ...
- SQL Server里在文件组间如何移动数据?
平常我不知道被问了几次这样的问题:“SQL Server里在文件组间如何移动数据?“你意识到这个问题:你只有一个主文件组的默认配置,后来围观了“SQL Server里的文件和文件组”后,你知道,有多 ...
- Javascript本地存储小结
前言 总括:详细讲述Cookie,LocalStorge,SesstionStorge的区别和用法. 人生如画,岁月如歌. 原文博客地址:Javascript本地存储小结 知乎专栏&& ...
- Nginx反向代理部署指南
一.反向代理 我们都知道,80端口是web服务的默认端口,其他主机访问web服务器也是默认和80端口进行web交互,而一台服务器也只有一个80端口,这是约定俗成的标准. 我们来看下面两个场景: 1.服 ...
- sqlserver 乐观并发模式
一开始不怎么理解乐观并发模式是什么. 这种模式可以在死锁问题上使用. 在sql中 这样就是乐观并发模式. SqlServer默认开启的是悲观并发模式 例如: