NOC变成猫python试题(一)

分类: 研究-学习 |
临近学期结束时看到了镇江市组织开展NOC编程比赛的通知,当时以为只是中小学scratch的内容,出于关注一下的想法进入了学习群,听了课程老师的一些介绍,后来看到还有中学生组,并且有python的内容,当时差不多已经是6月、学生在让完高考考场后即将进入复习阶段了,但看到报名表中还有省丹阳高中的信息,我想了想,还是趁此次机会组织学生报个名吧。选择学生时也遇到了一些小波折,包括同备课组的、包括年级部那边的,但好在很快就解决了这些小麻烦,挑选了20位同学参加了6月14号的第一轮次考试。当时也没时间复习,只是抱着让学生体验一次的想法,只是利用了4班信息课的时间给他们简单介绍了一下模拟试题。考完了就没再想这个事。
待到6月30日之后,之前培训的群里又有了动静,原来是进入第二轮考试的学生名单出来了。我进去看看,发现有我校的两位同学(这两位同学都是女生,而且是只学习了一些简单的C++基础、目前已选择了文科、不再继续学习编程的同学;另外一个理科班且有几人仍在继续学习c++的同学却没有入选),第一时间通知了4班的班主任,又在备课组的群里告诉了他们。张成非常积极,主动要求帮助学生辅导。
所以在7月1日的重要活动结束后,我赶紧在codemao的网站以及工作人员提供的下载包里挑出了python部分的复习资料,和张成一起先行准备了起来。7月1日准备了一个下午,晚上跟班主任约好学生第二天早上过来机房练习。不巧的是有一名同学正巧要代表学校参加省里的一个朗诵比赛,第二天的练习来不了了。
就这样,我和张成一起,结合搜集到的测试例题,带着学生把python的基础过了一遍。这位包同学的学习能力很强,接受速度快,2号一天从9点半一直学习到了晚上9点,期间准备的复习内容看完了,我又到网上搜集了其他一些题目带回去看。
3号上午两位同学都来了,把基本的知识讲了讲,后面有些涉及算法的内容我自己有点应付不了,这时张成打电话过来,赶紧让他下午过来解答。下午和晚上,基本就是张老师在讲,我和包同学在听了。之前集体教研时只是根据教材的内容,今天才发现张老师深厚的编程功底,思维缜密周详,很多问题经过他的分析学生很快就能理解了。比如是那个辗转相除求余数的问题,他仔细看了一遍文字介绍就用编程实现了,再讲一遍学生也就领会了,而我虽然之前认为自己了解过也掌握了这个问题,但真正准备编程时却思路混乱了起来,无从下手了。这时感觉到了汗颜,自己就是王老师经常说的“眼高手低”的所谓学编程的“差生”了。
通过短短两天的学习观察,发现学习优秀学生的一些好的学习习惯,第一就是专注,这两天不少时间都是一个人在学习,从没有发现做与编程学习无关的事情,哪怕一点点;第二就是自主性很强,学习很有条理,老师在评讲时及时记录笔记,不懂就问,课后及时消化,并按照自己的节奏开展学习和巩固。
今天上午9点考试,两位同学8点钟就来到了办公室,看得出这两天全神投入的包同学还是有些许的紧张的,说明她做任何一件事情的投入度非常之高,另外一位章同学虽然综合表现全面优秀,但因为有其他事情的分神,可能预期不是很高,所以也不是很紧张。我装完她们考试用的电脑后,简单介绍了操作的方法。
考试是在考试机的摄像头监控下进行的,我想这可能也是社会化考试的一个方向,节约了大量考试成本。虽然考试结果略有遗憾(包同学说一个编程题目检查了好几遍没调试出正确结果,而自己原本是具备做这个题的能力的),我也安慰她们,重在这几天的学习经历。不管结果如何,都用平常心对待了。
这件事对我来说,也是一次经历吧。后续如果还有类似的活动,我可能会有一些组织参与的经验。同时,对于近期涉及到的python基础知识,我也要尽快学习、消化好。
下面先贴几个题目,没来得及整理的,后续要及时补上。
===================
1、阿短在和朋友们玩密室逃脱。他们被困在一个封闭的房间中,只有破解密码,才能逃出密室。密码提示如下:
“将 1 到 100 以内,能被 7 整除的数的个数以及这些数累加起来的和拼在一起即是打开房门的密码” 。请帮阿短算出密码。。
(注:只需显示表示结果的纯数字,不需要增加额外文字)
测试样例:在 1 到 15 范围内,满足条件能被 7
整除的数分别为 7 和 14。满足条件数的个数为 2,和为 21。因此密码为 221。
解析:
1.变量设置:先分析 1 到 100 之间能被 7
整除的数字,设置变量 a 的初始值为1。需要提取能被 7 整除的数字个数,需要设置一个变量 b,初始值设为 0,;还需要求能被 7
整除的所有数之和,还需要设置一个变量 key,初始值为 0.
2.判断,将 a 每执行一次,自加 1,重复执行到 a 大于
100,即 a 的取值是 1-100。在循环中做判断,每次 a 能被 7 整除的数都提取出来,将这些数字加起来赋值给 key,每有一次
a 能被 7 整除, b 则自加 1;
3.循环判断结束后,使用把。。。和。。。放在一起积木,将 b
和 key 放在一起,并通过新建对话框输出,即为答案。
上面两种方法皆可。但根据之前和王老师的交流,第二种方法更优,因为计算数据小,速度更快。如果要对比的话,可以把最大值后多加几个0,会有很直观的感受。
第二题:
我们可以使用源码编辑器绘制各种各样的图形。
1. 请使用源码编辑器设计一个程序,输入数字 n,绘制正 n
边形。(提示:长度自定,在正 12 边形的情况下图形大小不会超过舞台显示区域。)
解析:
使用程序绘制正多边形,首先要知道,正多边形的外角角度与边数 n
的关系。我们知道任意多边形的外角和都为 360° ,与边数无关,因此对于正 n 边型,外角为
360/n,而这个角度就是在绘制多边形时,画笔需要旋转的角度。重复次数这里为多边形的边数,旋转角度为多边形的角度,对于五边形为360/5=72。因此对于此题我们只需要将边数和角度修改成带边长的变量的表达式。
第三题:
有两个自然数 a 和 b,如果 a 能被 b 整除,那么 b
就叫做 a 的约数。两个或多个自然数的共有约数最大的一个,叫做它们的最大公约数,也称最大公因数、最大公因子。在距离现在 2300
多年前的古希腊数学家欧几里得所著的《几何原本》一书中,提出了一种方法,叫做辗转相除法:对于给定的两个自然数 a 和b( a>b),用
a 除以 b 得到余数 c。若余数 c 不为 0,就将 b 和 c 构成新的一对数(即将 a 设定为 b,将 b 设定为
c),继续前面的除法,直到余数 c 为 0,这时 b 就是原来两个自然数的最大公约数。
1. 请设计一个程序,用来计算两个自然数 a 和 b
的最大公约数( a>b)?(提示:使用新建对话框进行 a 和 b 的输入;输入 a 的数字为: 100,输入 b 的数字为:
45,对话最大公约数为 5。)
解析:
这是一道解决小学数学公约数问题的经典程序算法题,在解题之前一定要明白要明白什么是最大公约数,并搞清楚辗转相除法的原理。
1.两个自然数是通过手动输入,所以使用询问积木得到这两个自然数,并把得到的答复分别赋值给变量 a
和 b;然后在设定一个变量 c,作为 a 和 b 除的余数的承接变量,初始值设置为一个不为 0 的值即可。
2.辗转相处法的原理,是将 a 和 b 除的余数赋值给
c,如果 c 的值为 0,则最大公约数就是 b,若不为 0,就将 b 的值赋值给 a, c 的值赋值给 b,继续运行,直到
c=0,输出此时的 b,即为初始 a 和 b 的最大公约数。
3.将最后得到的 b 的值输出,即为初始输入的 a 和 b
的最大公约数。
今天再结合文字操作很容易就理解了。但是还是出现了一个小麻烦,一开始用的4、5行代码,总是提示出错,而我自己感觉已经理会透彻了“递推法”(不知道这个名字是不是正确)。后来再结合昨天包simeng的方法,原来就是参数赋值时出现了逻辑错误,这也让我更加深刻的地理会了单独赋值(a=b
,b=c)和连续赋值(a,b=b,c)的区别。
前一篇:近期值得关注人工智能相关讲座