一、引言
分享Python知识+推广我的Python书。
本号陆续分享了2021-2022年全国青少年Python编程挑战赛的题目,已经或将要送娃参加编程比赛或编程培训班的家长朋友可以关注一下。
关于该比赛,请参考本系列的第1篇推文。
前几次本号分享了该比赛的初中组初赛题目的样题、真题和复赛的部分真题,本次分享复赛题的最后一道题目。新手解本题写出来的二十余行程序代码,最后居然能被精简成1行代码,这是怎么做到的呢?欲知详情,请慢慢往下看。
本系列已经发出的推文如下:
《2021-2022年全国青少年Python编程挑战赛题目解析(1)》
《2021-2022年全国青少年Python编程挑战赛题目解析(2)》
《2021-2022年全国青少年Python编程挑战赛题目解析(3)》
《2021-2022年全国青少年Python编程挑战赛题目解析(4)》
《Python程序设计(基于计算思维和新文科建设)》,ISBN:9787121435577,胡凤国,电子工业出版社,2022年6月。本书是电子工业出版社在国内较早采用纸质版+电子版的创新图书发行模式的第一次尝试。本书是这套创新图书的纸质版部分,与之内容互补的电子版图书将稍后出版。基础篇介绍Python程序设计的入门知识,共12章,包括:⑵ Python软件的安装和Python程序运行;⑶ Python的基本概念(对象、数据类型、表达式、内置函数);排错篇总结初学者常遇到的错误并介绍程序调试方法,包含2章:与本书内容互补的电子版图书包含文本篇和应用篇两部分:文本篇:介绍字符集、编码和文本文件读写的知识,包含了对国家规范《通用规范汉字表》8105个汉字当中难以输入和难以显示的汉字的处理。应用篇:介绍Word、Excel、PPT、PDF、图片等常用办公文件的处理,是大家提高办公和科研效率的好帮手。本书配套有详细的PPT和教学大纲,还有全部例题的程序代码和绝大部分思考题的程序代码。本书配套PPT里面还加入了配套电子版图书中的部分内容,比如字符集和编码,不同编码的文本文件的读写,Word、Excel、PPT、PDF等一些常用办公文件的读写。本书对Python基础知识的介绍非常到位,适合中小学生学习Python编程。本书首先介绍了Python的对象、数据类型、变量、运算符、表达式、内置函数等基本概念,介绍输入输出等基本操作,然后介绍程序设计的三大程序结构(顺序、选择、循环)之后,孩子们学完这些就可以做很多有意思的题目,除了很多数学趣题之外,本书还为孩子们准备了海龟画图的知识,这是很多Python比赛常考的内容。在学习完函数和列表、元组、集合、字典、字符串等序列类对象之后,孩子们可以对之前写的程序进行简化和改进,本书遵循了学生学习知识的自然规律,循序渐进地把知识呈现孩子们。本书还贴心地告诉孩子们如何显示文件的扩展名,什么是当前目录等一些常识性的计算机知识,还详详细细地介绍了身份证号的构成规律和辨别真假身份证号这样的科普知识。孩子们通过本书学习Python,不仅仅学到Python编程知识,更可以培养计算思维,对以后学习算法和参加信息学奥林匹克竞赛打下坚实的基础。可以毫不夸张地说,买了本书,可以从小用到大,大学里面学习编程也能用到本书。所以,小编在这里郑重把本书推荐给对编程感兴趣的中小学生,也推荐给已经或打算让娃参加编程比赛或编程辅导班的家长朋友。几千块钱的辅导班费用都舍得,几十块钱一本书是否可以考虑下?您买您娃受益,你不买咱俩都没损失。不过,用心写的书,还是希望能让更多的孩子受益。看本公众号也一样的,也能学到一些Python知识,不过,公众号的更新是不定期的,公众号的介绍不会像书中那么详细、那么系统。可选本书当Python教材或自学Python的参考书。
可拿本书当工具书,本书的配套程序会为您节省效率,在当前大数据和新文科的背景下,本书可以为相关领域的量化研究提供技术支持。可选本书当自学Python的参考书,文科老师写的程序、使用的算法也有可参考之处。
本书配套的电子版图书中的编码和文本处理知识也可以作为理工科教师和科研人员处理文本数据的参考资料之一,毕竟专门开辟章节介绍国家标准《通用规范汉字表》汉字处理的程序设计图书并不多见。本书在各大实体书店和网店均有销售。尤其在电子工业出版社天猫旗舰店销售火爆,月销量100+。京东、天猫、当当的购买渠道如下(可扫码直达购买页面)。2021-2022年全国青少年Python编程挑战赛复赛阶段的比赛是在7月24日举行的。一共六道题,全是编程题。同学们正在练习列队,从第一个人开始按编号1、2、…、n(n<1000)报数,开始所有人都是面向前方,第一遍报数是2的倍数的同学执行一遍向后转命令,第二遍报数是3的倍数的同学执行一遍向后转命令,第三遍报数是5的倍数的同学执行一遍向后转命令,输入人教n,按顺序输出最终仍然面向前方的同学的编号。注意:input()内不添加任何参数
只有完全正确才可提交,若无法点击提交说明答题存在错误,可及时进行检查并修改这里给出本题目从繁到简的一系列程序代码。我们先看一个初学者写的程序。
这个程序用了22行代码,大有简化余地。第18到22行的功能是输出面向前方的人员编号,用了五行代码。我们可以用enumerate函数来改进这一部分,整个程序变成20行代码。我们发现,第8~11行跟第14~17行是一模一样的,而且,它们的作用都是让s[i]里面的元素进行01翻转。所以,我们把这两部分代码改成我们还发现,列表 s 中的元素初值全是0,所以第5行代码可以写成的形式。这样,前3个循环的结构就统一起来了,我们可以把 前3个单层循环合并成一个二层循环。整个程序代码缩短到 9 行。
接下来,用列表推导式和序列解包输出法,可以在第7~9行缩短一行,整个程序变成 8 行代码。现在我们再来分析一下第3~6行,这是模拟向后转操来修改列表 s 中的元素值的。我们通过分析发现,连续三遍按条件向后转操作之后,向后转偶数次的等于不向后转,向后转奇数次的等于向后转1次。那么,对于列表 s 中下标为 i 的元素来说,s[i]的值是0还是1跟 i+1 被2、3、5整除的总次数是偶数还是奇数有关。所以,我们用lambda表达式,配合内置函数map和sum来精简第3~6行。整个程序缩减成6行。现在,继续我们的简化,第5行和第6行可以合并为一行,整个程序变为5行代码。
在程序运行的过程中,我们发现第2~4行代码可以用一个列表推导式实现,这样程序精简成3行代码。
我们发现列表 s 的元素值是0和1,第3行输出的时候还得判定一下0元素的位置,才能找出依然面向前方的人员编号。如果我们能够在列表 s 中存储这些人员的编号,那么第3行的输出也变得非常简单,我们写出上面程序的一种变形。现在我们发现变量 s 也没有必要了,程序变成2行代码。同样道理,变量 n 也没有必要了,程序变成了1行代码。注意,上文中为了追求行数减少,单行代码长度增加,截成图片之后字体稍小,在手机上可以点开图片看大图,在电脑上可以下载图片看大图。
22行代码,最后精简来精简去,居然用1行代码就能搞定,这是多么神奇的事情。在精简的过程中,我们用到了很多Python的知识点,精简的过程,也是对知识的进一步梳理深化的过程。所以,小编建议,青少年学生学习Python,在时间和精力允许的情况下,一定要尽量探求一道题目的多种解法。
至此,2021-2022年全国青少年Python编程挑战赛的初赛和复赛题目就分享完了。
通过题目分析我们可以看出,初赛和复赛的题目都不是特别难,都是基础性的知识,给孩子找本靠谱的书系统地学习一下知识点,把例题中的每个程序代码好好敲到电脑上运行一下,了解每道题涉及到的知识点。然后找一些题目做,尝试用多种解法去做,在做错-修改-再错-再改的过程中,孩子的编程能力一定能得到很大的锻炼和提高。哪本书靠谱呢?本号推荐的《Python程序设计(基于计算思维和新文科建设)》这本书就不错。不错到体现在哪里呢?让我们来举个简单的例子。
有个信息加密的题目,书中在不同的章节先后给出了四个Python程序,引领读者用新的知识点一步步对最初的程序进行简化。我们来看书中的几个截图。




从上面的截图可以看出,作者写这本书,还是非常用心的。这样的书还不靠谱么?买本书给孩子看吧,说不定下一届比赛,您的孩子就是晋级全国总决赛的实力派选手。如果需要跟图书《Python程序设计(基于计算思维和新文科建设)》的作者胡凤国老师进行交流,请发电邮:cuchufengguo@163.com ,也可以给公众号留言进行交流。欢迎关注微信公众号“语和言”,本公众号将不定期发布对本书Python知识点的解读文章,也会补充书中未曾收录的一些内容。
语和言公众号还有读者交流群,本书读者可以入群一起讨论问题,如果您的娃在学习本书的过程中有什么问题,我们可以在群里交流。