一、题目要求与分析

根据输入的年和月,打印该月的日历。如图所示:A2L免费资源网

A2L免费资源网

题目分析:复杂的问题往往很简单,只需要找到拆分点即可,就像这种题可以分为三个函数:A2L免费资源网

函数1: 计算并返回某年某月某日是星期几;A2L免费资源网

函数2: 判断某年是否是闰年;A2L免费资源网

函数3:打印所给年月的日历.A2L免费资源网

emmm……这么一分析可能会引起很多人若有所思,对的,你的现在的思路完全正确,之所以要判定某一个日子是星期几是因为我们要知道每月的1号是周几才行(注意找日历的规律),那之所以要判定是否是闰年是因为有了二月份这一特殊的存在,最后之所以要打印,好吧,你不打印我怎么看。A2L免费资源网

A2L免费资源网

为了方便起见,我们在这里直接把函数的名字给定一下:A2L免费资源网

函数1:day(y, m, d)——y为年,m为月,d为天A2L免费资源网

函数2: isLeapYear(year)——注意这种小驼峰的命名方式,一看就是正规军A2L免费资源网

函数3:calendar(y, m)——打印,打印,这里会遇到很多格式性问题A2L免费资源网

二、先看源代码

纯手工打造,你不喜欢看也不得行,今天你需要把它研究一波再走咯~A2L免费资源网

def day(y, m, d):#计算y年m月d日是星期几

y0 = y - (14 - m)//12

x = y0 + y0//4 - y0//100 + y0 //400

m0 = m + 12*((14 - m)//12) - 2

d0 = (d + x + 31*m0//12) % 7

return d0 #注意,周日是0

def isLeapYear(year): #判断year年是否闰年

isLeapYear = True

if year % 4 ==0: #整除可不是等于0,天

if year % 100 ==0:

if year % 400 ==0:

isLeapYear = True

else:

isLeapYear = False

else:

isLeapYear = True

else:

isLeapYear = False #注意是一个等号还是两个等号

return isLeapYear

def calendar(y, m): #打印y年m月日历

print(' {}年{}月'.format(y,m))

print('Su\tM\tTu\tW\tTh\tF\tSa')

# 请在下面编写代码

# ********** Begin ********** #

month_1 = [1,3,5,7,8,10,12]

month_2 = [4,6,9,11]

momth_number = 0

if isLeapYear(y): #计算这个月有多少天

if m == 2:

month_number = 29

else:

if m in month_1:

month_number = 31

if m in month_2:

month_number = 30

else:

if m == 2:

month_number = 28

else:

if m in month_1:

month_number = 31

if m in month_2:

month_number = 30

table = day(y, m, 1) #空格 排列输出

for j in range (1,month_number + 1): #注意加一

if j == 1:

print("\t" * table,end = '')

j = str(j)

print(j + "\t",end = '')

j = eval(j)

if (j + day(y, m, 1)) % 7 == 0:

print("\r")

print("\r")

for (y,m) in [(2020,12), (2017,2), (2016,2)]:

calendar(y, m)

print('---------------------------')

三、我们来逐个fenxi

(1) day(y, m, d)函数A2L免费资源网

这个函数没有什么实质性的技术含量,因为这里涉及到一个数学的问题,比如,直接用数学公式,下边我提供一下本函数用的三个数学公式:A2L免费资源网

A2L免费资源网

假如给定了y,m,d,则上边的d0就是要求的星期几。A2L免费资源网

注意:星期日代表的数字是0,切记,但别问我咋知道的。A2L免费资源网

函数就这样出来了:A2L免费资源网

def day(y, m, d):

y0 = y - (14 - m)//12

x = y0 + y0//4 - y0//100 + y0 //400

m0 = m + 12*((14 - m)//12) - 2

d0 = (d + x + 31*m0//12) % 7

return d0

(2) disLeapYear(year)函数A2L免费资源网

关于判断闰年这件事想必很好知晓,这里我提供一张流程结构图仅供参考:A2L免费资源网

A2L免费资源网

注意:1. 一定要晓得“=”和“ == ”的区别,唉,这都是前车之鉴啊;A2L免费资源网

注意:2. 能被整除的条件可不是year // 4 = = 0, 而是year % 4 == 0,切记不要弄混;A2L免费资源网

注意:3. Python里“/”和“//”有区别,前者为浮点数运算,后者为整数运算;A2L免费资源网

注意:4. Python自带True和False关键字使用,再也不用写0和1进行判断了;A2L免费资源网

注意:5. 在强调一下这里的代码风格,哪个该空格哪里该缩进,一定要做一个正规军。A2L免费资源网

函数也是这么出来了:A2L免费资源网

def isLeapYear(year): #判断year年是否闰年

isLeapYear = True

if year % 4 ==0: #整除可不是等于0,天

if year % 100 ==0:

if year % 400 ==0:

isLeapYear = True

else:

isLeapYear = False

else:

isLeapYear = True

else:

isLeapYear = False #注意是一个等号还是两个等号

return isLeapYear

(3) calendar(y, m)函数A2L免费资源网

A2L免费资源网

这里要解决两个问题,也就是本次程序的核心:A2L免费资源网

1. 这个月有多少天?A2L免费资源网

2. 怎么才能做到换行与星期几相对应?A2L免费资源网

不得不说第二个问题让我焦灼了好一会儿~A2L免费资源网

A2L免费资源网

1 . 这个月有多少天?A2L免费资源网

对于这一神来之问没有太多的压力,因为是不是闰年都已经判定好了,只需调用一下函数就可以断定这个月份是多少天,好吧,此外在这里科普一下,闰年的二月是29天,平年的二月是28天。A2L免费资源网

我需要强调的是:A2L免费资源网

1. 月份有31天和30天的区别,这里我直接用两个列表(month_1和month_2)进行选择判断;A2L免费资源网

2. 因为isLeapYear()函数返回值是True和False,所以在进行判断的时候我直接用了if isLeapYear(y): 意味着如果是闰年我要怎么着怎么着;A2L免费资源网

3. 一定要记得二月这个特殊的月份,要单独进行一次判断;A2L免费资源网

4. 注意我把月份的天数放在了一个名叫month_number的变量里,是不是一目了然?如果你还在用t, k, l之类的变量名,尽快向专业化迈进吧!A2L免费资源网

根据这些原理,我写出了这个月有多少天:A2L免费资源网

2 . 怎么才能做到换行与星期几相对应?A2L免费资源网

我们还把这个图重新放一边:A2L免费资源网

A2L免费资源网

还记得我说过周日对应的数字是0不?其实是那几个公式运行出来的结果,但正是这一结果,我突然发现了一个很重要的规律:A2L免费资源网

星期是几,最开始的时候就有几个tableA2L免费资源网

这样的话我们还是分步来走:A2L免费资源网

第一步我们把一个月的天数全部排成一条横线(这里就不展示了,想象一下),而这个横线的独特之处在于最开始的部分有几个table是不确定的,这里要解决两个问题:A2L免费资源网

1 . Python默认是换行打印,怎么才能不换行?———添加 end = “” 语句A2L免费资源网

2 . 怎么才能使行首的table确定下来呢?———添加“\t” * table (注意,代码里的table是我定义的一个变量,表示该月1号是周几),意味着是星期几,就有几个tableA2L免费资源网

第二步我们就开始考虑逢7换行的问题了,这里我采用取模运算,一下解决战斗。A2L免费资源网

所以有了下边的一串儿格式输出:A2L免费资源网

table = day(y, m, 1) #求空格数

for j in range (1,month_number + 1): #注意加一

if j == 1:

print("\t" * table,end = '')

j = str(j)

print(j + "\t",end = '')

j = eval(j)

if (j + day(y, m, 1)) % 7 == 0:

print("\r")

print("\r")

注意:A2L免费资源网

1. range(a,b,c)函数可以用的很灵活,a表示起始,b表示终止,c表示步长,这里要记得终止条件是不包括那个数的,比如range(1, 10 ,1 ), 则只能到9;A2L免费资源网

2. 逢7换行的时候如何与首行要添加的table互不干扰呢?这里我运用了一个信号量j, 当j等于1的时候说明是第一行,需要添加table,不等于1就不用加table了;A2L免费资源网

3. 有时候要用数字判断,有时候要用字符串操作,怎么才能来回转换呢?str()函数使数字转为字符串,eval()函数使字符串转为数字;A2L免费资源网

4.字符串连接要用“+”连接符;A2L免费资源网

5. \t 和 \n 都有换行的意思,但具体效果如何,这里就不再多啰嗦了,亲自试试就知道啦。A2L免费资源网

四、最后奉上本次的运行结果

我知道不咋好看,不过那个啥,先将就着吧A2L免费资源网

A2L免费资源网

python输出一个月日历表_Python实例教程之检索输出月份日历表相关推荐

  1. 用python写一个彩票过滤器_python入门教程NO.6 用python做个简单的彩票号码统计分析工具...

    python入门教程 python入门教程NO.6 用python做个简单的彩票号码统计分析工具 本文涉及的python基础语法是:字典.集合及for循环 字典的定义 字典也是一种可变的容器,它可以存 ...

  2. 利用java输出一个月的日历表

    首先,想要输出一个月的日历,就需要知道日历的规律,从1900年1月1号是星期1,那么本月日历一号前面有几个空的呢(拿百度日历来讲,第一行依次星期一到星期日)?因为一星期是七天,所以(从1900年到本月 ...

  3. 用python写搜索引擎_用python做一个搜索引擎(Pylucene)的实例代码

    1.什么是搜索引擎? 搜索引擎是"对网络信息资源进行搜集整理并提供信息查询服务的系统,包括信息搜集.信息整理和用户查询三部分".如图1是搜索引擎的一般结构,信息搜集模块从网络采集信 ...

  4. 在哪里能收到python实例代码-用python做一个搜索引擎(Pylucene)的实例代码

    1.什么是搜索引擎? 搜索引擎是"对网络信息资源进行搜集整理并提供信息查询服务的系统,包括信息搜集.信息整理和用户查询三部分".如图1是搜索引擎的一般结构,信息搜集模块从网络采集信 ...

  5. python写一个游戏多少代码-使用Python写一个贪吃蛇游戏实例代码

    我在程序中加入了分数显示,三种特殊食物,将贪吃蛇的游戏逻辑写到了SnakeGame的类中,而不是在Snake类中. 特殊食物: 1.绿色:普通,吃了增加体型 2.红色:吃了减少体型 3.金色:吃了回到 ...

  6. python游戏脚本实例-使用Python写一个贪吃蛇游戏实例代码

    我在程序中加入了分数显示,三种特殊食物,将贪吃蛇的游戏逻辑写到了SnakeGame的类中,而不是在Snake类中. 特殊食物: 1.绿色:普通,吃了增加体型 2.红色:吃了减少体型 3.金色:吃了回到 ...

  7. c语言输出一个月的日历

    输出一个月的日历,我们只需要知道这个月的第一天是星期几,然后输出这个月的1号好最后一天,最后一天要判断是31,30天,如果是2月还要通过是否是闰年判断是28还是29天.但是实际上最重要的是要算出这个月 ...

  8. 比较两个字符串s1和s2的大小,如果s1s2,则输出一个正数;若s1=s2,则输出0;若s1小于s2,则输出一个负数。要求:不用strcpy函数;两个字符串用gets函数读入。

    题目描述 比较两个字符串s1和s2的大小,如果s1>s2,则输出一个正数:若s1=s2,则输出0:若s1<s2,则输出一个负数.要求:不用strcpy函数:两个字符串用gets函数读入.例 ...

  9. python输出一个月日历表_Python实例——检索输出月份日历表

    Python实例,检索输出需要的日历表 从本篇博文开始,我们的世界开始有颜色了哟,欢迎提问,持续更新中ing-- 一.题目要求与分析 根据输入的年和月,打印该月的日历.如图所示: 题目分析:复杂的问题 ...

最新文章

  1. ionic - error
  2. Linux(CentOS 5.4 Linux)服务器配置之DHCP服务器配置应用
  3. 第16件事 愿景和目标要接地气
  4. 『重构--改善既有代码的设计』读书笔记----Replace Temp with Query
  5. 每秒 10 万并发的 BI 系统如何频繁发生 Young GC?
  6. 【IScroll深入学习】解决IScroll疑难杂症
  7. 解决Windows Vista/7/8/8.1 远程桌面连接XP或2003缓慢的问题
  8. 基于Go的马蜂窝旅游网分布式IM系统技术实践
  9. linux显卡驱动安装在哪个文件夹,linux 下安装Nvidia显卡驱动
  10. vim中使用color_coded为c/cpp文件配色
  11. 街区最短路径问题——曼哈顿距离
  12. 速卖通AE平台+聚石塔+奇门 完整教程V2
  13. vht160什么意思_802.11n 中HT20 HT40是什么意思
  14. 网易云音乐中你见过最扎心的热评是什么
  15. 服务器cpu和磁盘规律毛刺问题排查
  16. android代码控制组件的移动,Android自定义控件实现随手指移动的小球
  17. python文件生成exe文件
  18. 变分贝叶斯、Variational Inference
  19. S50非接触式IC卡存储控制浅谈(M1)
  20. 淘宝店铺采集工具如何采集同行店铺信息的?

热门文章

  1. App Store生存指南
  2. suse9安装oracle,SUSE 9 ENTERPRISE 安装ORACLE 9I 成功文档
  3. 数据类型及字符编码 (需要重新修改)
  4. 常用的Sql命令之创建表
  5. js中怎么添加图片以及在图片上添加链接
  6. Python爬虫【四】爬取PC网页版“微博辟谣”账号内容(selenium多线程异步处理多页面)
  7. Java基础入门(二)——JDK、JRE与JVM
  8. There is no known eureka server; cluster server list is empty
  9. iOS计步器功能实现之CoreMotion(一)
  10. 好佳居窗帘十大品牌 窗帘显档次的是什么色调