python打印日历小项目
公众号后台回复“图书“,了解更多号主新书内容
作者: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
调用函数,并打印日历:
调用“提示用户输入年月日”的函数,得到年月日的值(日不进入本次计算中,可不加“日”作为参数);
调用“计算当月天数”的函数,得到当月的天数值;
for...range()
遍历天数,打印日历的每一天。在
for
中调用“计算某天为星期几”的函数,确定周一的那天,从而确定需换行的位置。每月第一天总在第
(w-1)*3
个空格之后。w
变量表示这天为星期几。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 = ' ')
最终打印结果:
小结
需要锻炼使用函数分解复杂步骤的思维,提高自己代码的复用率;
python内置函数
print()
和format()
进行格式化输出的方式是基础内容,还需多加熟悉。
◆ ◆ ◆ ◆ ◆麟哥新书已经在当当上架了,我写了本书:《拿下Offer-数据分析师求职面试指南》,目前当当正在举行活动,大家可以用相当于原价5折的预购价格购买,还是非常划算的:
数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。
管理员二维码:
猜你喜欢
● 卧槽!原来爬取B站弹幕这么简单● 厉害了!麟哥新书登顶京东销量排行榜!● 笑死人不偿命的知乎沙雕问题排行榜
● 用Python扒出B站那些“惊为天人”的阿婆主!● 你相信逛B站也能学编程吗
python打印日历小项目相关推荐
- Python练手小项目
一.画爱心表白 1.图形都是由一系列的点(X,Y)构成的曲线,由于X,Y满足一定的关系,所以我们就可以建立模型,建立表达式expression,当满足时,两个for循环(for X in range: ...
- python有趣的小项目-10 个最值得 Python 新人练手的有趣项目
原标题:10 个最值得 Python 新人练手的有趣项目 作者 | Claire D. Costa 编译 | Wendy 有很多 Python 新手留言问:"Python 入门很久了,但项目 ...
- Python:打印日历,验证信用卡号是否合法
Python语言基础-2.5函数基础(理) 第5关:函数综合实训-打印日历 本关任务:利用函数的知识完成如下习题: 1.编写判断信用卡号是否合法的判断程序. 2.编写函数模块,打印日历程序 第1题 信 ...
- python打印一年的日历_使用Python打印日历
在本教程中,我们将学习如何使用Python的日历模块打印月份和年份的日历.在Python中这很简单.我们需要年和月的数字.而已. 让我们看看如何打印年历.请按照以下步骤打印年历.导入日历模块. 初始化 ...
- python打印日历_Python实战练习——打印日历教程
很长一段时间没有接触过C语言了,想来做这一行当已经有三两年了. 今天突然想起来以前用C语言在VC6上写代码的日子,想了想以前的一些实战练习. 所以今天打算用Python来写一个C语言以前练习的题目-日 ...
- 100个python进阶实战小项目(适合新手) 微信撤回查看|抖音批量下载等
Hi~,各位小伙伴,Python是目前编程语言中的主流语言之一,也是公认最容易入门的编程语言,因为Python语言近几年的火爆,有很多小伙伴都开始学习这门语言. 编程语言学习,最重要的是"多 ...
- python 打印日历
用户输入年和月,第一行为星期的缩写,每周从周日开始 year = int(input()) month = int(input())days = 0 #统计天数 count = 0 #用于打印时的计数 ...
- python打印日历_python输出指定月份日历的方法
python输出指定月份日历的方法 本文实例讲述了python输出指定月份日历的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/python import calendar ca ...
- 徒弟做了一个Python的实战小项目——银行系统
国际惯例:实践是检验真理的唯一标准. 众所周知,在编程过程中理论知识再充实也需要通过项目的炼金石.下面给大家看一下我徒弟做的一个小项目实战要求,是做一个银行系统,就是我们去银行办业务时候会有个自助的A ...
最新文章
- 成轴对称的两组图片能被分成两类吗?
- JS基础--函数与BOM、DOM操作、JS中的事件以及内置对象
- 支付宝小程序-点击退出小程序
- Ajax初体验(一)
- 【Linux网络编程学习】阻塞、非阻塞、同步、异步以及五种I/O模型
- 头指针与头结点的异同
- .NET 简单的smtp协议发邮件
- 本行没有输入值结余隐藏_仓库库存管理系统,内含逻辑公式,自动结余库存!操作简单易上手...
- Hdu - 2647 - Reward
- [MySQL] specified key was too long max key length is 767bytes
- 运行python manage.py runserver报错现象、原因和解决办法
- 工具:Wind金融终端使用指南
- 谭浩强《c语言程序设计》第五章第十六题 输出图案:空格和*搭配的循环
- java poi jar包下载_poi.jar下载-poi.jar包 3.8/3.9/3.10 免费版 - 河东下载站
- 使用pn532将全加密卡复制到手环上 NFC校园门禁卡模拟教程
- VC++调用大漠插件
- QT实现的人机对战五子棋
- 计算机网络的核心概念
- 目标检测中的BBox 回归损失函数-L2,smooth L1,IoU,GIoU,DIoU,CIoU,Focal-EIoU,Alpha-IoU,SIoU
- NCCL配置多卡运行