涉及考试:计算机学会编程能力等级认证(GESP)、电子学会等级考试 活动内容:提供不同等级的真题供小朋友们选择练习 备考建议:根据自己备考的等级选择相应题目 附加价值:可作为白名单比赛的备考训练 本月打卡:本月CIE_Python打卡题目
作图题:
请使用turtle画出如下标志。

要求:
(1)线条颜色为黑色,线条粗细为10;
(2)圆半径为50,填充颜色为蓝色;
(3)等边三角形边长为180;
(4)等边三角形底边中点位置为画布正中心。
参考程序:
注意:仅供参考,画法和顺序,考生可以自行设计,结果符合题意即可。
import turtleturtle.pencolor('black')turtle.pensize(10)turtle.fillcolor('blue')turtle.begin_fill()turtle.circle(50)turtle.end_fill()turtle.penup()turtle.goto(-90, 0)turtle.pendown()for i in range(5): turtle.forward(180) turtle.left(120)turtle.home()turtle.done()中国电子学会主办的“全国青少年信息素养大赛”总决赛要开始了,组委会的老师要统计各个赛项报名的人数。请帮着写一个程序,实现该功能:统计时,输入各项编号表示对应的比赛:
1:Python编程挑战赛2:开源鸿蒙主题赛3:智慧物流挑战赛0:表示录入完毕要求:
一、循环执行
二、当输入错误数据,可以提示“没有此编号请重复输入”;
三、当输入0后,自动统计所有项目的参赛人数,并输出出来;如下面的案例:
输入样例:
请输入赛项编号:1请输入赛项编号:2请输入赛项编号:3请输入赛项编号:2请输入赛项编号:1请输入赛项编号:1请输入赛项编号:0输出样例:
Python编程挑战赛:3人开源鸿蒙主题赛:2人智慧物流挑战赛:1人友情提示:
由于考试平台暂不支持eval()命令,同学们可以选用其他命令;当然如果您使用了,只要程序是正确的,我们阅卷时依然按照正常处理。
参考程序1:
lst = [0, 0, 0, 0]whileTrue: n = int(input("请输入赛项编号:"))if n == 0:breakif n > 3or n < 0: print("没有此编号请重复输入")continue lst[n] += 1print("Python编程挑战赛:%d人" % lst[1])print("开源鸿蒙主题赛:%d人" % lst[2])print("智慧物流挑战赛:%d人" % lst[3])参考程序2:
d = {"Python编程挑战赛": 0, "开源鸿蒙主题赛": 0, "智慧物流挑战赛": 0}whileTrue: n = int(input("请输入赛项编号:"))if n == 0:breakelif n == 1: d["Python编程挑战赛"] += 1elif n == 2: d["开源鸿蒙主题赛"] += 1elif n == 3: d["智慧物流挑战赛"] += 1else: print("没有此编号请重复输入")for i in d: print("{0}:{1}人".format(i, d[i]))某班“天天向上”小组共有6个同学,姓名和身高数据分别存放在列表a中,编写程序实现小组同学按身高从高到低输出名单,运行结果如图所示:

程序代码如下,请在划线处补充完整:
a = [["李洪全", 135], ["王倩倩", 154], ["吴乐天", 148], ["周立新", 165], ["鲁正", 158], ["杨颖颖", 150]]for i in range(1, len(a)):for j in range(0,____①____):if a[j][1]____②____a[j+1][1]: a[j], a[j + 1] = a[j + 1], a[j]print("小组名单是:")for i in range(len(a)): print(____③____)参考答案:
本题考查冒泡排序算法。从外循环看,6个元素排5趟,应该能全部排整齐。内循环每趟主要从第一个元素开始,相邻元素两两相比,i=1时,j最终取到4,i=2时,j最终取到3,i=3时,j最终取到2,i=2时,j最终取到1,i=1时,j最终取到0,由于range()的终值是取不到的,故第一空应填len(a)-i;根据题目从高到低的要求,若前一个数小于后一个数,则应将其往后移,故第二空应为“<”;由输出结果观察可知,只需要输出排序后列表中的姓名部分,故第三空应填a[i][0]。
① len(a)-i;
② <;
③ a[i][0]。
一个列表中存在n个数据,可以用分治算法来找到其中的最小值。具体过程如下:如果列表元素的个数小于等于2的时候,经过一个判断就找到其中的最小值,所以可以先把数据从中间划分为左右两部分,然后通过递归把每一部分再划分为左右两部分,直到数据规模小于等于2的时候,返回结果,然后通过递归到最后为两个数据对比,我们就可以找到最小值。
请根据以上算法过程,补全代码。
# 求列表中小于两个元素的最小值defget_min(number):if len(number) == 1:return _____①_____ else:if number[1] > number[0]:return number[0]else:return number[1]defsolve(number): n = len(number)if n <= 2:return get_min(number)else:# 将整个列表分为左右两部分 left_list, right_list = _____②_____, number[n // 2:]# 递归(树),分治 left_min, right_min = solve(left_list), _____③_____return get_min([left_min, right_min])test_list = [5, 11, 3, 2, 7, 9]print(solve(test_list))参考答案:
① number[0]
② number[:n // 2]
③ solve(right_list)
青少年编程竞赛交流
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),添加小助手微信,让他邀请大家进入学习群。进群之后大家可以参与定期组织的21天刷题打卡、等级考试测评、教育部白名单比赛辅导以及青少年编程组队竞赛等活动。
