使用python语言实现在控制台打印日历

输入年、月、日

输出对应日历,指定的日数输出为‘--’

程序没有做严格的输入验证,故输入整数即可。

以下为没有优化的源码:

print_calendar.py

  1. #输出日历
  2. def print_calendar(year,month,date = 1):
  3. month_dict = {':'July',
  4. ':'December'}
  5.  
  6. #数字月份转换为字符串,并判断月份和号数是否合法
  7. if month in range(1,13) and date in range(1,31):
  8. month_str = str(month)
  9. if month_str in month_dict:
  10. month_str = month_dict[month_str]
  11. else:
  12. print('月份或号数输入不合法')
  13. return -1
  14.  
  15. #头部
  16. print('%15s%8d'%(month_str,year))
  17. print('-'*33)
  18. print('Sun Mon Tue Wed Thu Fri Sat')
  19.  
  20. #得到每月1号是星期几
  21. first_day = get_start_day(year,month,1)
  22. #得到此月有多少天
  23. month_num = days_of_month(year,month)
  24.  
  25. each_day = 0
  26. #主体
  27. for index in range(1,43):
  28.  
  29. if index < first_day + 1:
  30. print(' '*5,end = '')
  31. else:
  32. if (index - 1) % 7 == 0:
  33. print('')
  34. each_day += 1
  35. if each_day > month_num:
  36. return False
  37. if each_day < 10:
  38. if each_day == date:
  39. print('%-5s'%('--'),end = '')
  40. else:
  41. print(' %-4d'%(each_day),end = '')
  42. else:
  43. if each_day == date:
  44. print('%-5s'%('--'),end = '')
  45. else:
  46. print('%-5d'%(each_day),end = '')
  47.  
  48. #输入一个年月日,判断是星期几
  49. #需要一个比较标准:2010-1-1是星期五
  50. #计算当前距离标准过了多少天(total_days % 7 + 5 -1)%7
  51. #先遍历年份,是闰年+366,不是+365
  52. #再遍历月份,31,30,29,28
  53. def get_start_day(year,month,date):
  54. total_days = 0
  55. #遍历年份
  56. for one_year in range(2010,year):
  57. if is_leap_year(one_year):
  58. total_days += 366
  59. else:
  60. total_days += 365
  61. #print(total_days)
  62. #遍历月份
  63. for one_month in range(1,month):
  64. total_days += days_of_month(year,one_month)
  65. #print(total_days)
  66. #加上当月号数,则求得总共过了多少天
  67. total_days += date
  68.  
  69. #求输入的年月日是星期几
  70. day = (total_days % 7 + 5 - 1) % 7
  71.  
  72. #print(total_days)
  73. #print(day)
  74. return day
  75.  
  76. #输入一个年份和月份,输出这月有多少天
  77. #1,3,5,7,8,10,12--------31天
  78. #4,6,9,11 --------------30天
  79. #如果是闰年2------------29天
  80. #不是闰年 2-------------28天
  81. def days_of_month(year,month):
  82. days = 0
  83. if month in (1,3,5,7,8,10,12):
  84. days = 31
  85. elif month in (4,6,9,11):
  86. days = 30
  87. elif is_leap_year(year):
  88. days = 29
  89. else:
  90. days = 28
  91. return days
  92.  
  93. def is_leap_year(year):
  94. if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
  95. return True
  96. return False
  97.  
  98. def main():
  99. print('*'*33)
  100. year = int(input('请输入年份:'))
  101. month = int(input('请输入月份:'))
  102. date = int(input('请输入号数:'))
  103. print('*'*33)
  104. #某年某月有多少天
  105. #days = days_of_month(year,month)
  106. #print('{}年{}月有{}天'.format(year,month,days))
  107. #某年某月某日是星期几
  108. #day = get_start_day(year,month,date)
  109. #print('{}年{}月{}日是星期{}'.format(year,month,date,day))
  110. #打印日历
  111. print_calendar(year,month,date)
  112.  
  113. #执行
  114. main()

运行效果如图:

Python学习实践-----打印日历的更多相关文章

  1. Python实战练习——打印日历教程

    很长一段时间没有接触过C语言了,想来做这一行当已经有三两年了. 今天突然想起来以前用C语言在VC6上写代码的日子,想了想以前的一些实战练习. 所以今天打算用Python来写一个C语言以前练习的题目-日 ...

  2. Python学习实践 | speech智能语音模块

    最近的生活.学习节奏很是容易被打断,终于,在今天,既实习结束之后,夏令营也结束了. 前几天,一个人在复习地很累的时候,又重新将Python捡了起来,看了挺多的知识点. 真是太有意(wu)思(liao) ...

  3. Python学习实践------正向最大匹配中文分词

    正向最大匹配分词: 1.加载词典文件到集合中,取词典文件中最大长度词的length 2.每次先在句子中按最大长度分割,然后判断分割的词是否存在字典中,存在则记录此词,调整起始点. 3.不存在则按最大长 ...

  4. Python 学习笔记 多进程 multiprocessing--转载

    本文链接地址 http://quqiuzhu.com/2016/python-multiprocessing/ Python 解释器有一个全局解释器锁(PIL),导致每个 Python 进程中最多同时 ...

  5. Appium学习实践(二)Python简单脚本以及元素的属性设置

    1.简单的Python脚本 Appium中的设置与Appium学习实践(一)简易运行Appium中的一致 Launch后,执行脚本 #coding:utf-8 import unittest impo ...

  6. Python 最佳实践指南 2018 学习笔记

    基础信息 版本 Python 2.7 Python 3.x Python2.7 版本在 2020 年后不再提供支持,建议新手使用 3.x 版本进行学习 实现 CPython:Python的标准实现: ...

  7. 《Python学习手册 第五版》 -第11章 赋值、表达式和打印

    上一章对Python的语句和语法已经进行了基本的说明,接下来就是每个章节的详细说明,本章的主要内容就是标题中涵盖的三点:赋值语句.表达式语句.打印语句 本章重点内容如下: 1.赋值语句 1)赋值语句的 ...

  8. python打印日历

    #未优化的代码 1 #输出日历 def print_calendar(year,month,date = 1): month_dict = {':'July', ':'December'} #数字月份 ...

  9. Python学习的个人笔记(基础语法)

    Python学习的个人笔记 题外话: 我是一个大二的计算机系的学生,这份python学习个人笔记是趁寒假这一周在慕课网,w3cschool,还有借鉴了一些博客,资料整理出来的,用于自己方便的时候查阅, ...

随机推荐

  1. 使用AWS亚马逊云搭建Gmail转发服务(一)

    title: 使用AWS亚马逊云搭建Gmail转发服务(一) author:青南 date: 2014-12-30 15:41:35 categories: Python tags: [Gmail,A ...

  2. xdebug断点调试原理

    通过Xdebug进行远程调试时,PHPSTORM等IDE会监听Xdebug设置的调试ip和端口(php.ini中配置) [xdebug] ; Xdebug zend_extension=php_xde ...

  3. Python标准模块--concurrent.futures

    1 模块简介 concurrent.futures模块是在Python3.2中添加的.根据Python的官方文档,concurrent.futures模块提供给开发者一个执行异步调用的高级接口.con ...

  4. ASP.NET MVC5+EF6+EasyUI 后台管理系统(18)-权限管理系统-表数据

    系列目录 这一节,我们插入数据来看看数据流,让各位同学,知道这个权限表交互是怎么一个流程,免得大家后天雾里来雾里去首先我再解释一些表,SysUser和SysRole表不用解释了. SysRoleSys ...

  5. .NET Core采用的全新配置系统[3]: “Options模式”下的配置是如何绑定为Options对象

    配置的原子结构就是单纯的键值对,并且键和值都是字符串,但是在真正的项目开发中我们一般不会单纯地以键值对的形式来使用配置.值得推荐的做法就是采用<.NET Core采用的全新配置系统[1]: 读取 ...

  6. System.arraycopy()和Arrays.copyOf()的区别

    先看看System.arraycopy()的声明: public static native void arraycopy(Object src,int srcPos, Object dest, in ...

  7. Android开发之自定义的ListView(UITableViewController)

    Android开发中的ListView, 顾名方法思义,就是表视图.表示图在iOS开发中就是TableView.两者虽然名称不一样,但是其使用方法,使用场景以及该控件的功能都极为相似,都是用来展示大量 ...

  8. RPC框架实现 - 通信协议篇

    RPC(Remote Procedure Call,远程过程调用)框架是分布式服务的基石,实现RPC框架需要考虑方方面面.其对业务隐藏了底层通信过程(TCP/UDP.打包/解包.序列化/反序列化),使 ...

  9. ZKWeb网站框架的动态编译的实现原理

    ZKWeb网站框架是一个自主开发的网页框架,实现了动态插件和自动编译功能. ZKWeb把一个文件夹当成是一个插件,无需使用csproj或xproj等形式的项目文件管理,并且支持修改插件代码后自动重新编 ...

  10. java netty socket库和自定义C#socket库利用protobuf进行通信完整实例

    之前的文章讲述了socket通信的一些基本知识,已经本人自定义的C#版本的socket.和java netty 库的二次封装,但是没有真正的发表测试用例. 本文只是为了讲解利用protobuf 进行C ...