公众号后台回复“图书“,了解更多号主新书内容

作者:Riggle

来源:文科数据员

各位小伙伴,好久不见!数据猿最近在全面复习python知识,继续更新啦!今天带来函数学习的相关知识,函数可以看作是对多行代码的囊括,是用以减少重复代码的工具。这里直接来一个案例,感受一下函数的妙用。

本文目录如下——

项目需求

基本功能

输入一个月,可以打印出该月的日历,含有年、月、日和对应的星期。

需求分解

1.提示用户输入年月,计算该月天数。

2.得到该起始的星期。

3.使日期按照星期顺序来排列。

预计效果

2021年1月格里高利历
一 二 三 四 五 六 日
--------------------1  2  3 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

代码详解

要计算天数,需要先确定这一年的大小月,以及这一月是否为2月,并判断是否闰年得知2月的大小,也就可以转化为判断这年是否为闰年。

函数—>计算当月天数:

def how_many_days_month(y,m):'''计算这一月的天数,按顺序传入年月日'''# 闰年判定方法:能被400整除。或者能被4整除但不能被100整除。if m in [1,3,5,7,8,10,12]:days = 31elif m in [4,6,9,11]:days = 30elif m == 2:if y//400 == 0 or (y // 4 and y // 100 != 0):days = 29else:days = 28return days

公式—>计算一个日期的星期:

计算一个日期的星期,有专门的数学公式。其中一个公式如下所示。但是需要注意,该公式需要将1,2月当作上一年的13、14月使用,其他月份不变。

y, m, d = 2019,2,14
w = (d + 2 * m+ 3 * (m + 1)// 5 + y + y // 4 - y // 100 + y / / 400) % 7 +1
# 计算1,2月时,需要当作上一年的13、14月使用

因为每次只要是1,2月,都需要该年份为上一年,且作为13、14月使用。这样的话最好写在一个函数里,就不需要每次一遇到1、2月就修改年份和月份了 。

函数—>计算一个某天为星期几:

def get_which_week(y,m,d):'''计算星期几的函数,按顺序传入年月日'''if m == 1: # w所在的行为计算公式,但如果是1,2月,则需要将其作为前一年的13、14月来计算y = y - 1m = 13elif m == 2:y = y - 1m = 14w = (d + 2 * m+ 3 * (m + 1)// 5 + y + y // 4 - y // 100 + y // 400) % 7 +1return w

函数—>提示用户输入年月:

提示用户输入年月,输入内容均为字符串,这里需要将输入的字符串通过int()转化为整数。这里,数据猿为了提示信息可以格式化输出,增加了format()来进行格式化输出,但在这里似乎有点繁琐。

def input_yms():'''提示用户输入年月日,无需传入参数,返回一个年月日数值为元素的元组'''inputstr = ('year','month','day')y = int(input('Please input the number of {[0]}:'.format(inputstr)))m = int(input('Please input the number of {[1]}:'.format(inputstr)))d = int(input('Please input the number of {[2]}:'.format(inputstr)))return y,m,d

调用函数,并打印日历:

  1. 调用“提示用户输入年月日”的函数,得到年月日的值(日不进入本次计算中,可不加“日”作为参数);

  2. 调用“计算当月天数”的函数,得到当月的天数值;

  3. for...range()遍历天数,打印日历的每一天。

  4. for中调用“计算某天为星期几”的函数,确定周一的那天,从而确定需换行的位置。

  5. 每月第一天总在第(w-1)*3个空格之后。w变量表示这天为星期几。

  6. print('')可打印一个换行;print(argu, end = ' '),表示以空格结尾,不换行。

y,m,d = input_yms()
days = how_many_days_month(y,m)print(f'\n{y}年{m}月 格里高利历')
print('一 二 三 四 五 六 日')
print('-'*20)
for i in range(1,days+1):w = get_which_week(y,m,i)if i == 1:print(f"{' '*(w-1)*3}",end = '')else:if w == 1:print('')print(f"{i:2d}", end = ' ')

最终打印结果:

小结

  1. 需要锻炼使用函数分解复杂步骤的思维,提高自己代码的复用率;

  1. python内置函数print()format()进行格式化输出的方式是基础内容,还需多加熟悉。

◆ ◆ ◆  ◆ ◆麟哥新书已经在当当上架了,我写了本书:《拿下Offer-数据分析师求职面试指南》,目前当当正在举行活动,大家可以用相当于原价5折的预购价格购买,还是非常划算的:
数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。
管理员二维码:
猜你喜欢
● 卧槽!原来爬取B站弹幕这么简单● 厉害了!麟哥新书登顶京东销量排行榜!● 笑死人不偿命的知乎沙雕问题排行榜
● 用Python扒出B站那些“惊为天人”的阿婆主!● 你相信逛B站也能学编程吗

python打印日历小项目相关推荐

  1. Python练手小项目

    一.画爱心表白 1.图形都是由一系列的点(X,Y)构成的曲线,由于X,Y满足一定的关系,所以我们就可以建立模型,建立表达式expression,当满足时,两个for循环(for X in range: ...

  2. python有趣的小项目-10 个最值得 Python 新人练手的有趣项目

    原标题:10 个最值得 Python 新人练手的有趣项目 作者 | Claire D. Costa 编译 | Wendy 有很多 Python 新手留言问:"Python 入门很久了,但项目 ...

  3. Python:打印日历,验证信用卡号是否合法

    Python语言基础-2.5函数基础(理) 第5关:函数综合实训-打印日历 本关任务:利用函数的知识完成如下习题: 1.编写判断信用卡号是否合法的判断程序. 2.编写函数模块,打印日历程序 第1题 信 ...

  4. python打印一年的日历_使用Python打印日历

    在本教程中,我们将学习如何使用Python的日历模块打印月份和年份的日历.在Python中这很简单.我们需要年和月的数字.而已. 让我们看看如何打印年历.请按照以下步骤打印年历.导入日历模块. 初始化 ...

  5. python打印日历_Python实战练习——打印日历教程

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

  6. 100个python进阶实战小项目(适合新手) 微信撤回查看|抖音批量下载等

    Hi~,各位小伙伴,Python是目前编程语言中的主流语言之一,也是公认最容易入门的编程语言,因为Python语言近几年的火爆,有很多小伙伴都开始学习这门语言. 编程语言学习,最重要的是"多 ...

  7. python 打印日历

    用户输入年和月,第一行为星期的缩写,每周从周日开始 year = int(input()) month = int(input())days = 0 #统计天数 count = 0 #用于打印时的计数 ...

  8. python打印日历_python输出指定月份日历的方法

    python输出指定月份日历的方法 本文实例讲述了python输出指定月份日历的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/python import calendar ca ...

  9. 徒弟做了一个Python的实战小项目——银行系统

    国际惯例:实践是检验真理的唯一标准. 众所周知,在编程过程中理论知识再充实也需要通过项目的炼金石.下面给大家看一下我徒弟做的一个小项目实战要求,是做一个银行系统,就是我们去银行办业务时候会有个自助的A ...

最新文章

  1. 成轴对称的两组图片能被分成两类吗?
  2. JS基础--函数与BOM、DOM操作、JS中的事件以及内置对象
  3. 支付宝小程序-点击退出小程序
  4. Ajax初体验(一)
  5. 【Linux网络编程学习】阻塞、非阻塞、同步、异步以及五种I/O模型
  6. 头指针与头结点的异同
  7. .NET 简单的smtp协议发邮件
  8. 本行没有输入值结余隐藏_仓库库存管理系统,内含逻辑公式,自动结余库存!操作简单易上手...
  9. Hdu - 2647 - Reward
  10. [MySQL] specified key was too long max key length is 767bytes
  11. 运行python manage.py runserver报错现象、原因和解决办法
  12. 工具:Wind金融终端使用指南
  13. 谭浩强《c语言程序设计》第五章第十六题 输出图案:空格和*搭配的循环
  14. java poi jar包下载_poi.jar下载-poi.jar包 3.8/3.9/3.10 免费版 - 河东下载站
  15. 使用pn532将全加密卡复制到手环上 NFC校园门禁卡模拟教程
  16. VC++调用大漠插件
  17. QT实现的人机对战五子棋
  18. 计算机网络的核心概念
  19. 目标检测中的BBox 回归损失函数-L2,smooth L1,IoU,GIoU,DIoU,CIoU,Focal-EIoU,Alpha-IoU,SIoU
  20. NCCL配置多卡运行

热门文章

  1. ubuntu下beyond compare的使用
  2. Incomplete chess boards 有趣.
  3. GooglePhoto设置壁纸----壁纸裁剪界面配置
  4. 交换机工作原理/模式
  5. Qt开发的开源项目DBA技术介绍
  6. CentOS 7下安装Google Chrome浏览器
  7. C++有关类的基本函数总结
  8. 如何用Matlab在极坐标系下绘图并调整极坐标初始角位置
  9. python使用python-docx自动化操作word
  10. Vue.js中的v-model指令(双向绑定)