Python实现万年历

1. 最近在学习Python的过程中,想起了以前学习C语言时的万年历算法,就打算写一下,主要是为了熟悉Python的语法,以此来铭记一下Python的学习历程。

2. 实现万年历需要用到的基本知识有

  • 闰年判断算法
  • 给定某年某月某日是星期几,计算某年某月某日是星期几算法(通常以1800年1月1日星期三为起始)
  • 计算两个给定日期之间相隔多少天

3. 以下是代码实现:

#coding=utf-8  """
@ function perpetual calendar;
@author:  wly
@Date: 2017-03-05
@description: 输入一个年份可以打印这一年的日历。Python基础学习插曲
"""
"""
1.is_leap_year 判断是否问闰年的函数
2.get_month_days 获取一个月有多少天
3.get_total_days 已知1800年1月1日为星期3,距某年某月多少天
4.get_start_day  获取某年某月的第一天是星期几
"""
# 定义基础数据
arrWeek = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
arrMonth = ["January","February","March","April","May","June","July","August","September","October","November","December"];def is_leap_year(year):if (year % 4 ==0 and year % 100 !=0 or year % 400 ==0):return Trueelse:return Falsedef get_month_days(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_days(year,month):days = 0;for i in range(1800,year):if(is_leap_year(i)): #闰年days += 366;     else:#平年days += 365;     #一直计算到所求月份前一个月即可for j in range(1,month):days += get_month_days(year, j);return days;def get_start_day(year,month):#计算是星期几return (3 + get_total_days(year, month)) % 7;  def print_calendar(year):   for k,m in enumerate(arrMonth):#打印日历的月份和年份print "    ",m,"   ",year                  print "---------------------------"#计算这个月有几天day = get_month_days(year, k+1);#计算这个月的第一天是星期几         startDay = get_start_day(year, k+1);        #打印星期表头for k,v in enumerate(arrWeek):              print "%3s" % v,                    print#打印这个月的天数for i in range(1,day+1):#计算要缩进几个单位                temp = (startDay + i-1) % 7     #用于缩进格式,只要这个月的第一天缩进正确即可        if(i==1):#循环打印缩进单位                         for j in range(temp):               print "   ",print "%3s" % i,#打印到星期六之后要换行if(temp == 6) :                         print#一个月遍历完成打印结束分隔符print                                       print "---------------------------"#调用程序
print_calendar(2017);                               

4. 运行结果如下图:

Python学习插曲之万年历算法相关推荐

  1. python学习——介绍若干采样算法

    在做一个事情,因为时序数据的频率经常不一样,比如说股票跳动里的高波动部分,但是我们比如说想拿到模型中训练,这个时候经常就需要上采样和下采样来操作 第一个算法:论文Downsampling Time S ...

  2. Python学习笔记19(算法)

    1.二分查找 只能用二分查找查找有序列表 def bin_search(data,val): #data为被查找的列表,val是要查找的值low = 0high = len(data) - 1whil ...

  3. 机器学习 集成学习篇——python实现Bagging和AdaBOOST算法

    机器学习 集成学习篇--python实现Bagging和AdaBOOST算法 摘要 Bagging算法 Adaboost算法 摘要 本文通过python实现了集成学习中的Bagging和AdaBOOS ...

  4. AI火爆干货最全整理!五套深度学习和算法学习教程和三套Python学习视频!!!限时无套路免费领取!...

    点击蓝色"AI专栏"关注我哟 选择"星标",重磅干货,第一时间送达 这是站长第 31 期免费送丰富宝贵的干货资源与教程 本期绝对是满满的干货! 获取更多资源请关 ...

  5. 【Python学习教程】数据结构与算法

    前言 python内置的数据结构包括:列表(list).集合(set).字典(dictionary),一般情况下我们可以直接使用这些数据结构,但通常我们还需要考虑比如搜索.排序.排列以及赛选等一些常见 ...

  6. 大数据基石python学习_资源 | 177G Python/机器学习/深度学习/算法/TensorFlow等视频,涵盖入门/中级/项目各阶段!...

    原标题:资源 | 177G Python/机器学习/深度学习/算法/TensorFlow等视频,涵盖入门/中级/项目各阶段! 这是一份比较全面的视频教程,基本上包括了市面上所有关于机器学习,统计学习, ...

  7. Python学习,python实现七个基本算法

    1.顺序查找 当数据存储在诸如列表的集合中时,我们说这些数据具有线性或顺序关系. 每个数据元素都存储在相对于其他数据元素的位置. 由于这些索引值是有序的,我们可以按顺序访问它们. 这个过程产实现的搜索 ...

  8. Python学习教程之算法讲解:深入浅出Apriori关联分析算法

    在美国有这样一家奇怪的超市,它将啤酒与尿布这样两个奇怪的东西放在一起进行销售,并且最终让啤酒与尿布这两个看起来没有关联的东西的销量双双增加.这家超市的名字叫做沃尔玛. 你会不会觉得有些不可思议?虽然事 ...

  9. 【大道至简】机器学习算法之隐马尔科夫模型(Hidden Markov Model, HMM)详解(3)---学习问题:Baum-Welch算法推导及Python代码实现

    ☕️ 本文系列文章汇总: (1)HMM开篇:基本概念和几个要素 (2)HMM计算问题:前后向算法 (3)HMM学习问题:Baum-Welch算法 (4) HMM预测问题:维特比算法 ☕️ 本文来自专栏 ...

  10. Python --深入浅出Apriori关联分析算法(二) Apriori关联规则实战

    上一篇我们讲了关联分析的几个概念,支持度,置信度,提升度.以及如何利用Apriori算法高效地根据物品的支持度找出所有物品的频繁项集. Python --深入浅出Apriori关联分析算法(一) 这次 ...

最新文章

  1. 记java关键词_Java关键词及含义
  2. 执行后可以查看python版本的是-【单选题】执行后可以查看Python的版本的是
  3. 财务思维02-资产边界
  4. Apache Mina2.x网络通信框架使用入门
  5. sublime text java 开发_Sublime Text 3搭建Java开发环境
  6. SpringMVC拦截器-用户登录权限控制代码实现3
  7. Eclipse 浏览(Navigate)菜单
  8. 转 php include
  9. [译]1-Key-Value Coding Programming Guide 官方文档第一部分
  10. [转]C++编译链接过程详解
  11. iOS开发-OC语言 (七)继承、多态、类别
  12. 谷歌这是要全面退出中国!
  13. VSCode加入右键功能菜单
  14. word-插入数学公式(mathtype)
  15. cs5计算机丢失msvcp71,win7系统msvcp71.dll丢失怎么修复_win7计算机丢失msvcp120dll修复方法-win7之家...
  16. Linux 中各个文件夹的作用
  17. 电脑微信QQ正常登录,浏览器无法访问网站
  18. 编程的教学方法和学习方法的思考
  19. 联想Y50-70笔记本更换固态硬盘SSD记录
  20. opengl绘制位图字体c语言源代码,使用OpenGL位图字体将文本放到屏幕上

热门文章

  1. office 2016 安装 excel 最新 数据挖掘插件
  2. E-prime基本介绍
  3. stm32mp1 Cortex M4开发篇6:TIM定时器中断
  4. sscom串口调试助手
  5. 有哪些值得推荐的关于英文词根的好书?
  6. JavaSE IDEA 使用-面向对象
  7. 闫啸的发明和发现20220901
  8. 局域网共享工具_还在用数据线?快来试试网页版局域网共享工具!
  9. IMO船舶材料防火安全规范
  10. SSh三大框架工作原理介绍