使用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学习实践-----打印日历的更多相关文章

  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. ROC曲线、PR曲线

    在论文的结果分析中,ROC和PR曲线是经常用到的两个有力的展示图. 1.ROC曲线 ROC曲线(receiver operating characteristic)是一种对于灵敏度进行描述的功能图像. ...

  2. Oracle数据加载之sqlldr工具的介绍

    环境: 服务端:RHEL6.4 + Oracle 11.2.0.4 客户端:WIN10 + Oracle 11.2.0.1 client 目录: sqlldr语法 sqlldr实验准备 sqlldr常 ...

  3. UWP简单示例(二):快速开始你的3D编程

    准备 IDE:Visual Studio 2015 了解并学习:SharpDx官方GitHub 推荐Demo:SharpDX_D3D12HelloWorld 第一节 世界 世界坐标系是一个特殊的坐标系 ...

  4. 后缀数组(suffix array)详解

    写在前面 在字符串处理当中,后缀树和后缀数组都是非常有力的工具. 其中后缀树大家了解得比较多,关于后缀数组则很少见于国内的资料. 其实后缀数组是后缀树的一个非常精巧的替代品,它比后缀树容易编程实现, ...

  5. C# - Networkcomms

    来自英国的用C#语言编写的开源的TCP/UDP网络通信框架,简单方便,性能稳定. 参考: NetworkComms官网:  NetworkComms通信框架中文网: 介绍开源的.net通信框架: Ne ...

  6. Asp.net 面向接口可扩展框架之业务规则引擎扩展组件

    随着面向接口可扩展框架的继续开发,有些功能开发出现了"瓶颈",有太多的东西要写死才好做.但写死的代码扩展性是非常的不好,迷茫中寻找出入... 进而想到我以前开发的好几个项目,都已有 ...

  7. C语言实现2个大数相加。

    #include<stdio.h>#include<string.h>int main(){    char s1[100],s2[100];    int num1[31], ...

  8. php实现中文转数字,实现方式很智能很php

    分享一个辅助函数,使用php尽可能识别出字符串中的数字,实现效果如下. 1 2 3 4 5 6 7 8 9 echo checkNatInt('九百六十万'); //普通中文数字,9600000 ec ...

  9. JAVA基础培训(isoft)

    我们

  10. 浅谈Slick(4)- Slick301:我的Slick开发项目设置

    前面几篇介绍里尝试了一些Slick的功能和使用方式,看来基本可以满足用scala语言进行数据库操作编程的要求,而且有些代码可以通过函数式编程模式来实现.我想,如果把Slick当作数据库操作编程主要方式 ...