1.输入年份,输入月份

2.格式化输出本月的日历

3.思路

输入年,月,打印对应年月的日历。
1,首先1970年是Unix系统诞生的时间,1970
年成为Unix的元年,1970
年1月1号是星期四,现在大多的手机的日历功能只能显示到1970年1月1日这一天;

2,要想打印某年某月的日历,首先应该计算出这个月1号是星期几?

解决1号是星期几?
2.1: 先计算出年天数,即截至这一年1月1号的天数,用for循环,从1970年开始,闰年 + 366,平年 + 365;
2.2: 计算出月天数,即截至本月1号的天数,用for循环,从1月份开始,算出月天数;
2.3: 用年天数加月天数,求得本月1号距离1970年1月1号的总天数,用总天数来判断本月1号是星期几;

3, 判断本月的总天数;

4, 打印日历;

4.运行效果图1:

运行效果图2:

5.代码实现

  1. # 定义判断闰年的函数,是闰年返回True,不是返回False
  2. def isLeapYear(year):
  3. if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
  4. return True
  5. else:
  6. return False
  7.  
  8. # 定义计算从1970年到截止到今年的 年天数的函数
  9. def yearsDays(year):
  10. totalDays = 0
  11. for i in range(1970, year):
  12. # print("%d年" % i)
  13. if isLeapYear(i):
  14. totalDays += 366
  15. else:
  16. totalDays += 365
  17. return totalDays
  18.  
  19. # 定义计算本年一月截止到目前月的 月天数的函数
  20. def monthsDays(year, month):
  21. s = (")
  22. days = int(s[month - 1])
  23. # print(month,"")
  24. if isLeapYear(year):
  25. days = days
  26. else:
  27. if month == 1:
  28. days = 0
  29. elif month == 2:
  30. days == 31
  31. else:
  32. days = days - 1
  33. return days
  34.  
  35. # 定义计算本月的天数
  36. def thisMonthDays(year, month):
  37. if month == 1 or month == 3 or month == 5 or month == 7 or month == 8 or month == 10 or month == 12:
  38. return 31
  39. elif isLeapYear(year) and month == 2:
  40. return 29
  41. elif (not isLeapYear(year)) and month == 2:
  42. return 28
  43. else:
  44. return 30
  45.  
  46. # 计算本月一号是星期几的函数
  47. def week(year, month):
  48. thisDay = 0
  49. yDays = yearsDays(year)
  50. mDays = monthsDays(year, month)
  51. # 计算出来年天数和月天数的总和
  52. sumDays = yDays + mDays
  53. if sumDays % 7 == 0:
  54. thisDay = 4
  55. else:
  56. if (sumDays % 7 + 4 > 7):
  57. thisDay = abs(sumDays % 7 - 3)
  58. else:
  59. thisDay = sumDays % 7 + 4
  60. # print("星期%d" % thisDay)
  61. return thisDay
  62.  
  63. # 定义打印顶部标题栏函数
  64. def printTitle(year, month):
  65. print("-------------------------------------%s年%d月----------------------------------------" % (year, month))
  66. s = ("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六")
  67. for i in s:
  68. print("%-10s" % i, end="")
  69. print()
  70.  
  71. # 打印主体部分
  72.  
  73. def printMain(year, month):
  74. day1 = week(year, month)
  75. day2 = thisMonthDays(year, month)
  76. # 打印空白地方
  77. if day1 != 7:
  78. for i in range(1, day1 + 1):
  79. s = " "
  80. print("%-13s" % s, end="")
  81. # 打印其他地方
  82. for j in range(day1 + 1, day1 + day2 + 1):
  83.  
  84. if j % 7 == 0:
  85. print("%-13d" % (j - day1))
  86. else:
  87. print("%-13d" % (j - day1), end="")
  88.  
  89. year = int(input("请输入年份:"))
  90. month = int(input("请输入月份:"))
  91. printTitle(year, month)
  92. printMain(year, month)

python打印万年历的更多相关文章

  1. Python打印格式化与字符串

    关于Python打印格式化与字符串,比较全面的总结,希望对大家有帮助~ # -*- coding: cp936 -*- ''' 打印格式 ''' print "a" print & ...

  2. python打印表格式数据,留出正确的空格和段落星号或注释

    python打印表格式数据,留出正确的空格,格式化打出 代码如下: def printPicnic(itemsDict,leftWidth,rightWidth): print('PICNIC ITE ...

  3. python 打印 emoji

    python 打印 emoji 如需转发,请注明出处:小婷儿的python  https://www.cnblogs.com/xxtalhr/p/10486506.html 一.Unicode字符集: ...

  4. python打印列表的下标和值的例子:

    python打印列表的下标和值的例子: In [1]: list01=[1,4,5] In [10]: def funct01(ll):   ....:     for index,value in ...

  5. 【Python】Python 打印和输出更多用法。

    Python 打印和输出 简述 在编程实践中,print 的使用频率非常高,特别是程序运行到某个时刻,要检测产生的结果时,必须用 print 来打印输出. 关于 print 函数,前面很多地方已经提及 ...

  6. python 打印 九九表

    用Python 打印九九表. print 每打印一行默认会带有换行, 在print语句后加上,end = 't' 会变成tab. 排版会好点. def main(): for i in range(1 ...

  7. python打印表格式数据-星号或注释

    python打印表格式数据,留出正确的空格,格式化打出 代码如下: def printPicnic(itemsDict,leftWidth,rightWidth): print('PICNIC ITE ...

  8. python 打印 str 字符串的实际内容 repr(str)

    python 打印 str 字符串的实际内容 repr(str) s = 'aa' print(repr(s))

  9. python打印日志log

    整理一个python打印日志的配置文件,是我喜欢的格式. # coding:utf-8 # 2019/11/7 09:19 # huihui # ref: import logging LOG_FOR ...

随机推荐

  1. GoodReads: Machine Learning (Part 3)

    In the first installment of this series, we scraped reviews from Goodreads. In thesecond one, we per ...

  2. 写markdown博客如何截图并快速上传到图床——记一个工具插件的实现

    1. 背景 写博客有一个自己的图床是不错的选择,如果不借助工具,在markdown博客中添加图片的步骤如下: 截取图片,保存到本地(得来回点对话框,选择保存路径,选择文件类型,输入文件名). 上传到图 ...

  3. cpp(第十三章)

    1.动态(晚期)联编需要显示定义复制构造函数,赋值运算符,虚构函数. 2.纯虚类不能声明对象. 3.赋值运算符的特征标随类而异. 4.返回类型协变,重新定义继承的方法,应确保与原来的原型完全相同,但如 ...

  4. ionic2新手入门整理,搭建环境,创建demo,打包apk,热更新,优化启动慢等避坑详解

    onic官方文档链接:http://ionicframework.com/docs/ 如果是新的环境会有很多坑,主要是有墙,请仔细阅读每个步骤 文档包含以下内容: l  环境搭建 l  创建demo并 ...

  5. java 多线程基础

    线程是进程内的执行单元,进程当中都有若干个线程. 通常主线程或进程是阻塞式的按顺序执行的,如果希望异步执行些子任务,而不要阻塞当前线程的执行,即需要创建子线程,子线程创建后主线程可以等待它们的结果,得 ...

  6. 生成淘口令发现的一个趣事 c#

    1.今天,查看网站log,发现如下报错 详细错误:未将对象引用设置到对象的实例. 报错url:http://www.94dazhe.com/mobile/goods/show-546829202052 ...

  7. CSS3的使用方法解析

    自己过去有段时间使用CSS3开发过一些小的部件和效果,但是由于太久没有再次去使用,导致当自己再次去使用的时候我就需要去翻手册重新找一次然后按着方法使用才可以. 现在我就把这份CSS3的使用技巧展示给各 ...

  8. WPF的一些感悟

    第一天在博客园写东西,只写一些自己对WPF稚嫩的理解和感悟. 1.Code Snippet代码简写工具 可以创建自己的代码模板管理器——>>>工具菜单,代码片段管理器 考出现有的+更 ...

  9. linux下安装telnet

    1:yum install telnet-server 2:编辑设置 /etc/xinetd.d/telnet ,将disable= yes设置成disable= no 3:service  xine ...

  10. windows环境下,怎么解决无法使用ping命令

    基本都是因为"环境变量"导致的,查看环境变量path在"Path"中追加"C:\Windows\System32"