python比赛作品_Python全国少儿编程竞赛参赛作品《智能生日提示小助手》解析

更新时间:2023-07-14 03:20:19 阅读: 评论:0

python⽐赛作品_Python全国少⼉编程竞赛参赛作品《智能⽣
影开头的成语⽇提⽰⼩助⼿》解析
本⽂介绍的作品是全国青少年创意编程与智能设计⼤赛创意编程⽐赛王梓名同学的参赛作品。
作品说明
⼀个记录朋友⽣⽇的⼩程序,数据来源于本地csv⽂件,简单好⽤,希望⼤家喜欢,也欢迎提供宝贵的意见。体育与健康教案
打印机墨粉怎么加正⽂
今天,果冻⽼师和⼤家⼀起来学习王梓名同学开发的Python⼩作品,叫做《智能⽣⽇提⽰⼩助⼿》,不知道⼤家有没有这样的烦恼,好朋友和同学太多了,要记住每个同学的⽣⽇真是⼀件头疼的事情。如果有⼀个可以帮助我们记录同学⽣⽇的程序那会很有⽤的,王梓名同学就开发了这么⼀款⼯具,简单⽅便,下⾯我们就看看它是如何实现的吧。
樱花公主引⼊代码库
⽣⽇⼩助⼿⼯具⼀共⽤到了三种代码库,分别是csv、tkinter、datetime。
肺不好的人吃什么养肺这三个代码库都是Python环境⾃带的模块,不需要单独下载,可以直接引⼊使⽤。tkinter模块在上⼀个《⾃主数学练习⼩⼯具》作品中有介绍过,它可以实现⼀个图形化的操作界⾯,我们可以使⽤⿏标点击、拖动等⽅式与程序进⾏交互,这种操作⽅式更加的直观,更⼈性化。
csv和datetime模块我们第⼀次见到,它们是⼲什么的呢?⽼师分别来介绍⼀下。
共工与颛顼csv,全称叫做Comma-Separated Values,中⽂称为逗号分隔值⽂件格式,因为这种格式的⽂件存储的数据是⽤逗号分隔开的,⽐如果冻⽼师⽤电脑的记事本打开保存朋友⽣⽇的csv⽂件,是这样的:
⽂件中的每⼀⾏代表⼀组数据,每组数据都需要输⼊姓名和⾝份证号,它们之间⽤逗号隔开。在Python中我们通过引⼊csv模块,并使⽤模块中的函数就可以读取这个⽂件中的内容,也可以给⽂件写⼊内容,这其实就是⼀种最简单的数据库,有了数据库呢,我们就可以实现真正的注册登陆功能,也可以在程序中将本次添加的内容记录下来,下次打开程序继续完善,这不就是便签的功能吗?把⾝份证号换成⼿机号还能实现⼀个通讯录,这下Python代码如虎添翼,可以发挥的想象空间就太多了!
第⼆个模块呢,叫datetime,date英⽂翻译过来就是⽇期,time英⽂翻译过来是时间,datetime就是Python中⽤于处理⽇期和时间的模块,我们需要它来获得今天的⽇期,然后再与每个⼩朋友的⽣⽇对⽐,选出过⽣⽇的同学的姓名。
OK,模块介绍完了,接下来我们就要进⼊核⼼的⽣⽇判断函数了。
定义函数
⽣⽇提⽰助⼿程序的所有功能都定义在这个叫做find_birthday的函数中,find的意思是查找,birthday⼤家都知道意思是⽣⽇。在这个函数⾥⾯会读取csv⽂件中的⽣⽇信息,然后显⽰在程序的界⾯上。
和数学练习⼩⼯具⼀样,第⼀步,需要实例化tkinter对象。
实例化之后,就可以通过title( )函数和geometry( )函数来设置窗⼝的名称与⼤⼩。
第⼆步,获取今天的时间,并取出⽉份和⽇期。
第⼀⾏,day( ),英⽂today的中⽂意思是今天,所以通过这⾏代码就可以获取到当前的⽇期,并且保存在now这个对象变量中,如果我们在第⼀⾏的代码下⾯加上print(now),就可以看到now对象中保存的数据:疟疾拼音
这就是电脑系统中最常见的⽇期格式,表⽰“年-⽉-⽇”,每个数字之前⽤“-”隔开,由于⽼师写这篇⽂章的时间是4⽉7号,所以now变量中存储的就是2020年4⽉7⽇。
⽇期对象中还有三个属性:year,month,day,它们可以从now这个时间对象中分别取出年、⽉、⽇这三种数据,在⽣⽇提⽰助⼿中需要⽤到⽉和⽇这个数据,所以在代码中可以通过h和now.d
ay来分别获得,并且使⽤str( )函数将它们转换成字符串,最后保存在this_month和this_day这两个变量中,以供后⾯使⽤。
这⾥有⼀个⼩问题,如果我们使⽤print( )函数打印出this_month和this_day两个变量的值,就能看到它们分别保存的是数字4和7。可是,后⾯我们是要⽤它们和⾝份证号进⾏⽐对的,同学们看⼀下⾃⼰的⾝份证号就会发现如果代表⽣⽇⽉和⽇的这两个数字是⼀位数的话,会在数字的前⾯加上0,于是,在代码中我们同样也要处理⼀下。
⽐如说⽉和⽇变量的长度都是⼀,那么就给它们的前⾯加上“0”,这时,this_month和this_day中分别保存的就是“04”和“07”了。
第三步,循环读取“花名册.csv”这个⽂件中每个⼩朋友的⾝份证号,并取出⽉与⽇的值,与上⾯的两个变量进⾏对⽐,最后判断出是否有⼩朋友在过⽣⽇。
要注意的是,花名册.csv这个⽂件和程序的代码⽂件放在同⼀个⽬录中,然后我们通过open( )函数来直接打开花名册。细⼼的同学发现了,打开⽂件的open('花名册.csv')代码放在as f这条语句的中间,那这个as...结构的代码是⼲什么的呢?这个要解释起来稍稍有些复杂,⼤家只需要记住这样写可以帮助我们简化代码,因为操作⼀个⽂件本来要经过五个步骤,第⼀步,打开⽂件,第⼆步,如果⽂件不存在,要处理异常,第三步,读取⽂件,第四步,如果读取⽂件发⽣异常,则处理它,最后
⼀步,关闭打开的⽂件。⽽在Python中这些步骤可以简化写成as...结构代码,⽆论会不会抛出异常,程序都会在最后⾃动关闭⽂件。
打开⽂件之后呢,当然就要读取⽂件中的内容了。读取csv⽂件需要使⽤ader( )语句,括号中传⼊as...结构中as后⾯的变量f,这样就创建了⼀个reader对象,并赋给content。
有了reader对象,我们循环遍历它,然后就能取出csv⽂件中每⾏的数据了。在继续下⾯的代码前,⽼师先print(q)打印⼀下q变量的值看看它是什么样⼦的。
哈,原来csv⽂件中的每⼀⾏都变成了⼀个列表,那接下来的操作你应该就很熟悉了。
⾸先,取出⾝份证号中代表⽉份的两位数字,q[1]表⽰获取逗号后⾯⾝份证号的整体值,再加上⼀个⽅括号q[1][-8:-6]就表⽰⾝份证号从右往左数第8位到第7位的两个数字,以王⼩明为例,这个数字就是“04”,将它保存在变量birthday_month中。
接着,取出⾝份证号中代表⽇期的两位数字,紧跟着⽉份后⾯的两位数字就是了,代码就是q[1][-6:-4],并赋给birthday这个变量。
好,有了⾝份证中的⽉份和⽇期,上⾯我们还获得了当天的⽉份和⽇期,接下来,只要⽐较⼀下它们,相等的话就将这个⼩朋友的名字显⽰在屏幕上。
在程序的窗⼝中如何显⽰⽂字,在上⼀篇数学练习⼩⼯具中讲过,使⽤tkinter模块中的Label控件,控件的text属性⽤于设置显⽰的⽂本,这⾥我们⽤+号将⼩朋友的姓名和⽣⽇拼接在⼀起,bg属性⽤于设置标签的背景颜⾊,font属性设置⽂字的字体和⼤⼩,width和height属性设置标签的宽度和⾼度。
与数学练习⼩⼯具不同的是,上⼀篇⽂章中各种控件的排列使⽤的是grid布局, ⽽在⽣⽇提⽰程序的界⾯中使⽤的是pack布局,那什么是pack布局呢?很简单,在pack( )函数不带任何参数的情况下,设置为pack布局的控件就是从上到下按顺序依次排列的。
代码中紧接着⼜定义了⼀个Label控件,这次它没有使⽤pack布局,⽽是⽤了另外的⼀个place布局,place布局相⽐起来更加的灵活,它允许设置⼀个x,y坐标来定义控件在界⾯上显⽰的位置。这⾥我们把label_2放在x=250,y=380的这个坐标点上,也就是程序界⾯的右下⾓。
grid布局、pack布局和place布局是tkinter模块中⽀持的三种布局⽅式,我们在上⼀篇⽂章和本篇⽂章中全都学习到了,果冻⽼师讲解的⽐较简单,如果想深⼊的了解每种布局⽅式的使⽤细节,你可以在⽹上搜索⾃⼰先了解。素描大师作品
函数的最后⼀⾏,调⽤tkinter模块的mainloop( )函数,程序窗⼝就可以正常的显⽰出来啦。
到这⾥,⽣⽇提⽰⼩助⼿中最重要的也是唯⼀的⼀个函数就定义好了。
那程序的最后⼀⾏应该写什么呢?当然就是调⽤这个函数的代码:
快快运⾏起程序,看看最终的效果吧!
⼩助⼿提⽰我们,今天是王⼩明同学的⽣⽇哦!
⽣⽇提⽰⼩助⼿的代码就是这样⼦,不知道同学们有没有意犹未尽的感觉?⽼师总是感觉差了点什么,是什么呢?仔细想了想,原来这个⽣⽇⼩助⼿的提⽰功能有点鸡肋呀,因为如果到⽣⽇当天才去提醒,那⼀切都晚了,连给朋友准备⽣⽇礼物的时间都没有。假如可以提醒每个⼈的⽣⽇还有多少天,那就合理多了,我们可以在快过⽣⽇的时候提前给朋友准备好礼物。
OK,果冻⽼师接下来就继续完善这个作品,让它可以显⽰每个⼈⽣⽇的剩余天数。
增加剩余天数
要计算剩余的天数,就需要获取到每个同学⾝份证号中的⽣⽇⽇期以及当天的⽇期。当天的⽇期我们已经通过day( )获取到了,就是now变量中保存的数据。⽽⾝份证号中⽉和⽇也已经取出来了,剩下只需要将年份拼接起来,就可以组成⽣⽇的⽇期了。
要注意,每个⼈⽣⽇的年份要使⽤当前的年份,⽽不是⾝份证号中的,接着将年、⽉、⽇作为参数传到date( )函数中,就得到了我们需要的⽇期。
接下来,将每个⼈的⽣⽇减去当前的时间,就可以得到⼀个差值,这个差值包含两个⽇期相差的天数和时间,我们只需要天数的值,于是,再通过interval.days进⾏过滤,inte_days变量⾥⾯保存的就是最终的数据了。
但是,这⾥有⼀个问题,就是如果某个⼩朋友今年的⽣⽇已经过了,那么与当前⽇期的差值就会是⼀个负数,这种情况下,我们就需要计算这个⼩朋友明年的⽣⽇⽇期与当前⽇期的差值,于是,代码中就多了⼀个if条件判断:
当差值⼩于0时,date( )函数中的第⼀个参数传⼊+1的年份。
最后,把inte_days这个变量拼接到字符串中,最终的程序就改造完成了。
总结
通过《智能⽣⽇提⽰⼩助⼿》这个作品的学习,我们了解了在Python中如何读取csv格式的⽂件内容和⽇期的获取⽅法。读写⽂件是Python开发中⾮常有⽤的⼀种操作,⽤于保存少量⾮保密的数据是⾮常⽅便的,除了csv,常见的⽂件格式还有txt,xml,不同的⽂件格式保存数据的格式要求也是不⼀样的,在后⾯的作品中果冻⽼师会逐个讲解到。那这节课也交给你⼀个⼩任务,就是改造这个⽣⽇助⼿程序,开发⼀个通讯录的⼯具,在⽂件中保存好姓名和⼿机号,然后在软件的界⾯上⽤列表显⽰出来。
当然,你也可以更进⼀步,⾃⼰在⽹上搜索⼀下往⽂件中写⽂件的⽅法,然后再增加⼀个添加⼿机号的功能,这样,就是⼀个完整的通讯录软件了。

本文发布于:2023-07-14 03:20:19,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1080669.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:需要   作品   代码
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图