全国青少年信息素养大赛(原全国青少年电子信息智能创新大赛)是“世界机器人大会青少年机器人设计与信息素养大赛”赛事之一,由中国电子学会主办,包含很多赛项,大赛自2013年举办,已连续成功举办八届,已正式入围“2022-2025学年面向中小学生的全国性竞赛活动名单”。
大赛旨在激发广大青少年的科学兴趣和想象力,培养钻研探究、创新创造的科学精神和实践能力,促进青少年科技创新活动的广泛开展,发现和培养一批具有科研潜质和创新精神的青少年科技创新后备人才。
大赛主要竞赛类别包括电子科技、智能机器人、软件编程三类,全国青少年Python编程挑战赛就属于其中的软件编程类。
一.赛事说明
2023年(第9届)Python挑战赛赛程分为初赛、复赛和总决赛三个阶段。初赛是资格赛,复赛是地方选拔赛,总决赛是全国各地选拔的精英汇聚在一起进行PK。
本届Python挑战赛是在线上举行,参赛选手登录大赛官网在指定页面完成答题并提交答案。评定成绩的依据是同时考虑得分和用时两个方面,首先是得分高者名次靠前,如果得分一样,则用时少者名次靠前。
二试题说明
2023年Python编程挑战赛初赛于2023年6月3日正式拉开序幕,初赛采取的是线上考试。本次分享的是华北赛区初中组真题,题型为单选题,一共20道题目,每题5分,总分100分,限时60分钟完成。
由于系统是随机出题,超平老师不保证每个同学做的题目都和下面列出来的一致,但这些题目都是真题。
三.真题解析
第1题
质数是指只能被1和自身整除的正整数。例如,2、3、5、7、11、13等都是质数,而4、6、8、9、10等都不是质数,下方的代码可以判断数字47是否为素数,则下划线处应填什么代码?( )
A. num % i != 0
B. num % 2 != 0 and num % 3 != 0
C. num % i == 0
D. num % 2 == 0
[超平老师解读]:
本题的正确答案是C,考查的知识点是取模运算。
很显然,如果num能被2~46之间的任何一个数整除,那就说明num不是质数。所以,这里需要判断num除以i的余数是否为0,这就是取模运算。同时需要注意这里的for…else语句,它是Python独有的一种语法,格式如下:
当循环执行完毕(即遍历完 iterable 中的所有元素)后,会执行 else 子句中的代码,如果在循环过程中遇到了 break 语句,则会中断循环,此时不会执行 else 子句。
超平老师认为题目给出的代码是有一点小问题的,根据上面for…else的语法规则,else语句总是会被执行的。当然,由于num = 47,它是质数,所以不会输出“不是质数”,如果把num换成非质数,比如48,则会输出多行“不是质数”,最后再输出“是质数”。比较严谨的写法是在if语句下面,增加一个break语句,如下:
第2题下列哪个选项可以正确导入海龟库?( )
A. from random import *
B. from turtle import *
C. from turtle
D. from time import *
[超平老师解读]:
本题的正确答案是B,考查的知识点是海龟库的导入方法。首先,在Python中,海龟库的名字是turtle,所以A和D就可以直接排除了。其次,在Python中,导入库的方式通常有如下两种:
所以正确的选项是B。
第3题
运行下方代码,输出的数字有?( )
A. 0 1 2 3 4
B. 1 2 3 4 5
C. 0 1 2 3
D. 2 3 4 5
[超平老师解读]:
本题的正确答案是C,考查的知识点range函数。在Python3中,range()函数返回的是一个可迭代对象,语法如下:
三个参数说明如下:
- start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
- stop: 计数到 stop 结束,但不包括 stop。例如:range(0,5) 是[0, 1, 2, 3, 4]没有5;
- step:步长,默认为1,例如:range(0, 5) 等价于 range(0, 5, 1)。
所以,使用range(6)时,i的取值分别是0、1、2、3、4、5,然后经过if语句过滤,输出的就只有0、1、2、3了。
关于range(n)的范围,超平老师有一个简单的记忆方法,这就是虎头蛇尾,或者是有头无尾,就是包含start,但是不包含stop,是不是还挺方便的呢。
第4题下列关于Python中条件判断的说法,正确的是?( )
A. if-else结构是不能嵌套的
B. if 1 == 2:的条件必然不成立
C. 在程序中,有if就必须有else
D. if语句中的条件可以不写
[超平老师解读]:
本题的正确答案是B,考查的知识点是if语句。
在Python编程中,有3种if语句,分别是单分支if语句,双分支if…else语句和多分支if…elif…else语句。
同时,针对3种if语句,还可以进行嵌套,但是不管是哪种if语句,条件是必不可少的。因此,四个选项中,A、C和D的说法都是错误的。
B选项中,1 == 2显然是不成立的,所有正确选项是B。
第5题
运行下方代码,输入9和6,输出结果为?( )
A. 20
B. 无输出
C. leave
D. go
[超平老师解读]:
本题的正确答案是C,考查的知识点是if…else语句。
代码非常简单,输入的数字字符9和6,转换成整型,所以 a = 9,b = 6,a + b = 15,由于15 > 20不成立,所以执行else语句部分,输出“leave”。
第6题
下列不是Python中的关键字的是?( )
A. for
B. if
C. and
D. range
[超平老师解读]:
本题的正确答案是D,考查的知识点是关键字。Python关键字(或称保留字)指的是 Python 语言中一些已经被赋予特定意义的单词。
上面4个选项中的for、if和and都是关键字,但是range它是Python内置的函数,不属于关键字。
第7题
运行下列程序后,输出的结果为?( )
A. [‘夏’, ‘冬’]
B. [‘春’, ‘冬’]
C. [‘秋’, ‘冬’]
D. [‘春’, ‘夏’]
[超平老师解读]:
本题的正确答案是C,考查的知识点是列表的remove方法。
在Python编程中,remove方法用于删除列表中某个值的第一个匹配项。在上面的代码中,第一次删除的是第一项“春”,删除之后列表就变成了[“夏”,”秋”,”冬”],第二次删除的还是第一项“夏”,因此列表就变成了[“秋”,”冬”]。
第8题
已知程序的输出结果为12,则下划线处应填什么?( )
A. 2
B. 4
C. 5
D. 3
[超平老师解读]:
本题的正确答案是D,考查的知识点是range函数。
num的初始值是3,循环的作用是每次将num增加3,最终的num值为12,说明循环执行了3次,对于range函数而言,默认从0开始,执行3次,到3结束,所以应该填3。
第9题
根据Python变量的命名规则,下列不可以作为变量名的是?( )
A. ab6
B. ba6
C. 6ab
D. a6b
[超平老师解读]:
本题的正确答案是C,考查的知识点是变量的命名规则。
在Python中,变量命名规则一般有如下3条:
- 由字母、数字和下划线构成;
- 不能以数字开头;
- 不能与关键字重名
根据上面的规则,C选项中的6ab是不能作为变量名的。
实际上,在Python3中,变量名使用中文也是可以的,但不建议。另外,需要注意的是,Python严格区分大小写,千万不要搞混了。
第10题
运行下方代码,输出的结果是?( )
A. [‘在人间’,’我的大学’,’简爱’]
B. [‘童年’,’我的大学’,’简爱’]
C. [‘童年’,’在人间’,’我的大学’]
D. [‘童年’,’在人间’,’我的大学’,’简爱’]
[超平老师解读]:
本题的正确答案是B,考查的知识点是列表操作。
在Python中,remove方法用于删除列表中某个值的第一个匹配项,append方法用于在列表末尾添加新的列表项。
执行book.remove(“在人间”)代码后,列表变为了[“童年”,”我的大学”],再执行book.append(“简爱”)代码,列表则变成了 [‘童年’,’我的大学’,’简爱’]。
第11题
运行下列程序,输出的结果为?( )
A. 12
B. 8
C. go
D. 4
[超平老师解读]:
本题的正确答案是D,考查的知识点是if…else语句的嵌套用法。a = “4”,b = “8”,很显然 a == b不成立,于是执行else分支,将a和b转成整数。a = 4,b = 8,由于a > b 不成立,所以执行的仍然是else分支,a = b – a,因此 a = 8 – 4 = 4。
第12题
下列代码的执行结果是?( )
A. 3
B. 7
C. 9
D. 5
[超平老师解读]:
本题的正确答案是D,考查的知识点是算术运算符。
在Python编程中,当一个表达式中同时出现多个算术运算符时,先执行*、/和%运算,然后再执行+、-运算,因为*、/和%的优先级高于+和-。所以,在上面的语句中,先计算乘法,然后再计算加法,即 c = 3 + 1 * 2 = 3 + 2 = 5。
第13题
执行 from this import * 后,结果为?( )
A. 输出导库成功
B. 程序报错
C. 无输出结果
D. 输出一段话
[超平老师解读]:
本题的正确答案是D,考查的知识点是this模块。
在Python编程中,导入this模块,会输出如下一段内容:
this模块是Python之父吉多·范罗苏姆为Python3写的一个隐藏彩蛋,它展示了Python之禅的原则和格言。
虽然this模块不提供直接的功能或方法,但可以通过访问它的属性来获取其中的信息。使用this.s可以拿到Python之禅的完整文本(密文)。这段文本经过凯撒密码加密,所以犹如乱码一般。而使用this.d拿到用于存储恺撒密码的解密映射关系的字典。你可以尝试一下,还是挺有意思的呢。
第14题
比例是数学术语,在数学中,如果一个变量的变化总伴随着另一个变量的变化,则两个变量是呈比例的,比如正方形的长怎么变化,其宽永远和长保持一致,即正方形长宽比永远为1:1,在下方代码中,w为某个长方形的宽,h为长方形的长,在长宽比变的情况下,将长修改为原来的五分之一,则宽应该表示为?( )
A. w1 * (w / h)
B. w * (h / w)
C. w1 * (h / w)
D. h / 5
[超平老师解读]:
本题的正确答案是C,考查的知识点是数学。
根据数学知识,要保持比例不变,即 w / h = w1 / h1,所以w * h1 = w1 * h,因此h1 = w1 * (h / w) 。
从题目给出的答案来看,D选项也是可以的,所以,这道题选C和D都不能算错。
但是,如果从程序的可扩展性方面来考虑的话,C选项无疑是更好的选择。
第15题
关于 for i in range(6):中i的描述,下列说法正确的是?( )
A. i是一个变量,其变量名不可以更改
B. 在进入第三次循环时,i的值为2
C. i是一个变量,其值永远为6
D. i是一个变量,其取值范围在0~6
[超平老师解读]:
本题的正确答案是B,考查的知识点for…in语句。
在Python编程中,for…in是典型的计数循环,其中i是计数器变量,名称可以随意指定,比如i、j、k等。
在for i in range(6)语句中,计数器变量i的值从0开始,每循环一次,就增加1,一共循环6次,其值分别为0、1、2、3、4、5,循环结束时i的值为5。
所以B选项是正确的,其它3个选项都是错误的。
第16题
运行下方代码,输入52,输出结果为?( )
A. 中层建筑
B. 52
C. 高层建筑
D. 超高层建筑
[超平老师解读]:
本题的正确答案是C,考查的知识点是多分支语句。
在Python中,if…elif…else是多分支语句结构,在上面的代码中,输入的height值是52,第一个if条件 height > 100,不成立,所以继续执行elif语句,继续判断条件 height > 50,条件成立,所以执行 pirnt(“高层建筑”) 语句。
第17题
运行下列代码,输出的结果是?( )
A. 5
B. 6
C. 4
D. 3
[超平老师解读]:
本题的正确答案是D,考查的知识点是len函数。
在Python中,len函数用于获取对象(字符、列表、元组等)长度或项目个数。cartoon列表包含3个列表数据,所以其长度为3。
第18题
已知程序已导入了随机库和海龟库,则关于下方代码的描述正确的是?( )
A. 执行代码,海龟可能前进了120
B. 执行代码,海龟前进的距离不可能超过110
C. 执行代码,海龟可能前进了50
D. 执行代码,海龟会后退
[超平老师解读]:
本题的正确答案是B,考查的知识点包括海龟画图和随机数。
randint(90,110)方法会生成一个90~110之间的整数,包含90和110。forward方法则表示小海龟前进指定的像素。
综上所述,只有B选项是正确的。
第19题
下列选项不能输出三行你好的是?( )
A.
B.
C.
D.
[超平老师解读]:
本题的正确答案是D,考查的知识点包括循环和print函数。
在Python中,print()函数默认是换行的,输出指定内容后,会自动切换到下一行。很显然,D选项中的三个你好是在同一行输出的,其它3个选项都是输出3行你好。
第20题
下列代码的运行结果为?( )
A. 洛奇
B. 教父
C. 大鱼
D. movie[2]
[超平老师解读]:
本题的正确答案是A,考查的知识点是列表操作。
在Python编程中,列表元素可以通过下标来访问,在执行movie[2] = “洛奇”代码后,movie列表的值变为了[“雨人”, “大鱼”, “洛奇”],这是一个更新操作。
四.总结与思考
本次初赛一共20道选择题,题目相对比较简单,考查的知识点包括如下几个方面:
- Python基本语法,包括缩进规则、变量命名等;
- 输入和输出;
- 常见库的导入及使用,包括turtle、random等;
- 循环结构,包括for循环和while循环;
- 选择结构,包括if、if…else、if…elif…else语句等;
- range()函数的使用;
- 列表的常见操作、包括插入、删除、更新和获取长度等;
从知识点的分布情况来看,主要还是考查学生对Python基础知识的掌握情况,这也是每一个孩子学习编程时要掌握的基本功。
初赛还没有涉及到复杂的逻辑和算法题目,对于基础扎实的孩子来说,只要仔细看题,认真作答,拿90分以上还是挺容易的。