
点击上方蓝字关注我们吧

CCF编程能力等级认证,英文名Grade Examination of Software Programming(以下简称GESP),由中国计算机学会发起并主办,是为青少年计算机和编程学习者提供学业能力验证的平台。GESP覆盖中小学全学段,符合条件的青少年均可参加认证。GESP旨在提升青少年计算机和编程教育水平,推广和普及青少年计算机和编程教育。
GESP考察语言为图形化编程、Python编程及C++编程,主要考察学生掌握相关编程知识和操作能力,熟悉编程各项基础知识和理论框架,通过设定不同等级的考试目标,让学生具备编程从简单的程序到复杂程序设计的编程能力,为后期专业化编程学习打下良好基础。
本次为大家带来的是2024年3月认证Python二级真题解析。
GESP2024年3月认证Python二级
一、单选题(每题2分,共30分)
|
题号 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
|
答案 |
C |
C |
B |
B |
A |
C |
B |
C |
D |
B |
C |
A |
D |
C |
A |
1、⼩杨的⽗母最近刚刚给他买了⼀块华为⼿表,他说⼿表上跑的是鸿蒙,这个鸿蒙是?( )
A.⼩程序
B.计时器
C.操作系统
D.神话⼈物
【答案】C
【解析】鸿蒙是华为开发的操作系统,正式名称为HarmonyOS,它被设计为一个多设备、跨平台的操作系统,可用于智能手机、平板电脑、智能手表、智能家居设备等多种类型的智能设备。本题小杨父母给小杨买了一块华为手表,华为产品的操作系统为鸿蒙系统,因此选C。
2、中国计算机学会(CCF)在2024年1⽉27⽇的颁奖典礼上颁布了王选奖,王选先⽣的重⼤贡献是( )。
A.制造⾃动驾驶汽车
B.创⽴培训学校
C.发明汉字激光照排系统
D.成⽴⽅正公司
【答案】C
【解析】王选先生是中国著名的计算机科学家,他的重大贡献是在汉字激光照排技术方面的突破。他领导的团队研发了世界上第一台汉字激光照排打印系统,极大地推动了中文出版业的现代化,提高了印刷质量和效率。王选先生因此被誉为中国现代出版业和印刷业的奠基人之一。
3、下列流程图的输出结果是?

A.优秀
B.良好
C.不及格
D.没有输出
【答案】B
【解析】cj初始值为75,大于60。当cj大于60时,程序从上半区运行,但是cj小于90,所以在输出“良好”后结束程序,答案为B。
第4题 以下选项中不符合 Python变量命名规则的是?( )
A.student
B.2_from
C._to
D.Text
【答案】B
【解析】Python变量命名规则主要包括以下几点:字母、数字和下划线:变量名只能包含字母(a-z,A-Z)、数字(0-9)和下划线(_)。变量名的第一个字符不能是数字。大小写敏感:变量名是区分大小写。
5、以下选项中,不能⽤于表⽰分⽀结构的python保留字是?( )
A.switch
B.elif
C.else
D.if
【答案】A
【解析】if,else,elif是用于表示分支结构的保留字(关键字),
switch不是python保留字,所以选A。
6、下列说法错误的是?( )
A. while 循环满⾜循环条件时不断地运⾏,直到指定的条件不满⾜为⽌
B. if 语句通常⽤于执⾏条件判断
C.在Python中可以使⽤do..while循环
D. break 和continue语句都可以⽤在for循环和while循环中
【答案】C
【解析】选项C是错误的。在Python中,并没有 do..while 循环这种结构。Python支持的循环结构有 for 循环和 while 循环。
7、下列4个表达式中,答案不是整数8的是?( )
A.abs(-8)
B.min(float(8),9,10,11)'
C.int(8.88)
D.round(7.55)
【答案】B
【解析】选项A中abs()表示取绝对值,abs(-8)的输出为8。选项B中在float(8),9,10,11中取最小值,同时float(8)输出为8.0,所以B最后输出8.0,并且不是整数,所以选B。选项C中int()表示对括号内数值取整,输出为8.选项D中的round表示对括号内数值四舍五入,round(7.55)输出结果为8。
8、下⾯Python代码执⾏后的输出是?()

A.8
B.14
C.26
D.50
【答案】C
【解析】两个变量n和a,分别赋值为3和5,m的值根据a的值算出等于8。接下来,代码进入一个 for 循环,循环的次数是 n - 1,即 3 - 1 = 2 次。在这个循环中,每一次迭代都会将 m 的值更新为 (m - 1) * 2,第一次迭代:m的初始值是8,所以m更新为(8 - 1) * 2 = 14,第二次迭代:m现在是14,所以m更新为(14 - 1) * 2 = 26,所以最后打印出的值为26。
9、下⾯Python代码执⾏后的输出是?()

A.16
B.36
C.49
D.81
【答案】D
【解析】 本题中, 循环执行条件是 i**2 <= 81,即 当i的值为9时循环执行最后一次。
故可以直接将i=9带入程序中,检查得出result的值为81,所以本题 选D。
10、下⾯Python代码执⾏后的输出是?()

A.2
B.3
C.4
D.5
【答案】B
【解析】设立初始值s和t,分别为2和10,同时用ans来记录总共需要需要多少步骤。在这个程序中,“t”可以通过两种操作来减小:如果“t”是偶数,并且“t”除以2之后仍然大于或等于“s”,那么“t”就除以2。整个过程为:1. `t`是偶数,并且`t/2`是5,大于`s`,所以我们将`t`除以2,`t`变为5,步数`ans`加1。s = 2,t = 5,ans = 1。2. `t`现在是奇数,不能除以2,所以我们将`t`减去1,`t`变为4,步数`ans`加1,s = 2,t = 4,ans = 2、3. `t`是偶数,并且`t/2`是2,等于`s`,所以我们将`t`除以2,`t`变为2,步数`ans`加1,s = 2,t = 2,ans = 3。所以最后的答案是3。
11、下⾯Python代码执⾏后的输出是?()

A.5
B.6
C.7
D.8
【答案】C
【解析】流程如下,masks = 10,days = 0, cur = 2,第一次循环,masks = 10- 1 =9,days = 0+1 = 1,cur = 3;第二次循环,masks = 9-1 = 8,days = 1+1 = 2,cur =4;第三次循环,masks= 8-1 = 7,days = 2+1 =3,cur =5。第四次循环,masks = 7-1 =6,days = 3+1 =4,cur = 6。第五次循环,masks = 6-1 =5, days =4+1 =5,cur = 6。第六次循环,masks = 5+7-1 =11,days = 5+1 =6,cur = 0。第七次循环,masks = 11+7-1=17,days = 6+1 =7,cur =1。在第7天结束时,我们正好有17个masks,满足条件masks != n 不再成立,因此循环结束。程序将输出days的值,即7。所以,代码的输出应该是7天。
12、以下Python代码判断⼀个正整数N的各个数位是否都是偶数,例如N=2024时输出“是”,否则输出“否”,横线处应填⼊( )。

A. break
B. continue
C. N = N/10
D. N = N%10
【答案】A
【解析】当输入结果为2024时,N%2==0,将横线上为break时,说明中断循环,返回Flag = True,否则会继续向下运行。
13、有句俗话叫“三天打渔,两天晒⽹”。如果⼩杨前三天打渔,后两天晒⽹,⼀直重复这个过程,以下程序代码⽤于判断,第n天⼩杨是在打鱼还是晒⽹,横线处应填写?( )

A. i == 0
B. i == 4
C. i == 0 and i == 4
D. i == 0 or i == 4
【答案】D
【解析】第一次条件判断的返回结果为print(“晒网”),说明小杨属于后两天的晒网阶段,也就是第四天和第五天,所以n%5应该返回4%5或者5%5的结果,即4和0,所以选D。
14、⼀个数的所有数字倒序排列后这个数的⼤⼩保持不变,这个数就是回⽂数,⽐如101与6886都是回⽂数,⽽100不是回⽂数。以下程序代码⽤于判断⼀个数是否为回⽂数,横线处应填写?( )

A. 10 * a + n % 10
B. a + n % 10
C. 10 * a + n // 10
D. a + n // 10
【答案】A
【解析】将a乘以10(移位),然后加上n的最低位(n % 10 是n除以10的余数)。
15、给定两个整数n与k,打印出⼀个栅栏图形,这个栅栏应该分成n段,段与段之间的间隔为+, 段内的填充为 k个-。形如n=5,k=6时,图形如下:

以下程序代码⽤于绘制该图形,横线处应填写?( )

A. print('+')
B. print('+', sep='')
C. print('+', end='')
D. print('+', sep='', end='')
【答案】C
【解析】 在第二个循环中,有了打印"-"的输出,因此只需要考虑"+"的输出即可,sep ="" 意味着每打印一次换行,end = ""代表着每打印后空一格。所以选C。
二、判断题(每题2分,共20分)
题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
答案 | √ | √ | × | √ | √ | √ | √ | √ | √ | × |
1、任何⼀个for循环都可以转化为等价的while循环。
【答案】√
【解析】 在任何一个 for 循环都可以转换为一个等价的 while 循环。for 循环通常用于遍历一个已知的范围、列表、字符串或任何其他可迭代对象。while 循环则更加通用,它会继续执行,直到满足某个条件。
2、⼩杨今年春节回奶奶家了,奶奶家的数字电视要设置ip地址并接⼊到WIFI盒⼦才能收看节⽬,那这个WIFI盒⼦具有路由器的功能。
【答案】√
【解析】 如果一个 WIFI盒子需要设置IP地址以连接设备,如数字电视,并允许它访问网络以收看节目,那么这个WIFI盒子具备了路由器的功能。路由器的主要功能之一是将网络连接分配给不同的设备,通常通过分配本地IP地址,并管理这些设备的网络流量。
3、执⾏以下Python代码,最后⼀⾏输出是28.5。

【答案】×
【解析】int()代表着取数值的整数,所以t= 18+10=28,而不是28.5,所以该题是错的。
4、Xyz,xYz,xyZ是三个不同的变量。
【答案】√
【解析】Python语言中变量名是区分大小写的。这意味着 Xyz、xYz 和 xyZ 会被视为三个完全不同的变量。
5、print(8< 9 < 10) 的输出结果为True。
【答案】√
【解析】在Python中,表达式 8 < 9 < 10 等同于 (8 < 9) and (9 < 10)。既然8确实小于9,且9也小于10,那么整个表达式的结果为 True。
6、for i in range(100) 语句中变量i的变化范围是0到99。
【答案】√
【解析】。在Python中,for i in range(100) 语句会创建一个循环,其中变量 i 的值从0开始,增加到99。每次循环迭代,i 的值会依次取这个序列中的下一个数。
7、float(2022)与float("2022")运⾏后的输出结果均为2022.0。
【答案】√
【解析】在Python中,float 函数可以将一个整数或者一个表示数字的字符串转换成浮点数。
8、执⾏代码a = min(3, 2, 4) ,变量a的值是2。
【答案】√
【解析】min() 会从它的参数中返回最小的值。
9、已知A的ASCII码值为65,表达式ord('C')+abs(-5.8)的值为72.8。
【答案】√
【解析】ASCII码值中,字符'C'对应的值是67。函数 ord() 可以返回一个字符的ASCII码值。因此 ord('C') 的值是67。abs() 函数返回一个数的绝对值。因此 abs(-5.8) 的值是 5.8。将两者相加:ord('C') + abs(-5.8) = 67 + 5.8 = 72.8 所以,表达式 ord('C') + abs(-5.8) 的值确实是 72.8。
10、bool()函数用与将给定参数或表达式转换为布尔类bool(-1)返回的是Flase值。
【答案】×
【解析】实际上,bool() 函数在Python中用于将给定的参数或表达式转换为布尔值。对于大多数参数,如果参数是某种形式的“空”值,如 0, None, ""(空字符串), [](空列表), {}(空字典)等,bool() 函数会返回 False。对于其他的非空值,包括 -1,bool() 函数会返回 True。所以,bool(-1) 返回的是 True,而不是 False。
三、编程题(每题25分,共50分)
|
题号 |
1 |
2 |
|
答案 |
1、乘法问题
题面描述
小杨同学最近刚刚学习了乘法,为了帮助他练习,我们给他若干个正整数,并要求他将这些数乘起来。
对于大部分题目,小杨同学可以精准地算出答案,不过,如果这些数的乘积超过106,小杨同学就不会做了。
请编写程序,告诉小杨同学会如何作答。
输入描述
第一行一个整数n,表示随后将输入的正整数个数。
接下来”行,每行一个整数a。小杨同学需要将所有的a乘起来。如第1行输入3,则表示随后将输入3个正整数,并在随后的输出中,将这3个正整数相乘的结果输出。
保证n ≤50,a ≤100【注意:这个两个条件为限制输入,不必反应到编写代码之中】。
输出描述
输出一行,如果乘积超过106,则输出>1000000;否则输出所有数的乘积。
特别提醒
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。
样例输入1

样例输出1

样例输入2

样例输出2

样例输入3

样例输出3

【解题思路】首先,本题小杨同学要在python中计算若干个数字的乘积,当乘积的结果超过1000000时,小杨同学便不会算了,也就是当乘积大于1000000时,整个程序便结束。同时,第一行代表着输入数字的个数,后面的行代表着有n个数字的不同值。例如样例1中,2代表有两个数,3和5是这两个数,输出1则是3 *5 =15 这一结果。所以,第一次输入的数字为总共的个数,后续的输入为每一次所选取的值,然后将第一次之后输入的值分别相乘。3.1.11表示这样的数字,n代表了相乘数字的个数,a是参与乘积的具体的值,product则等于1乘每一次输入的值(因为product初始值为1,所以是1乘其他数)。当product小于1000000时,输出product的值,当product大于1000000时,返回“>1000000"。
【参考程序】

2、小杨的日字矩阵
问题描述
小杨想要构造一个N
× N的日字矩阵(N为奇数),具体来说,这个矩阵共有N行,每行N个字符,其中最左列、最右列都是|,而第一行、最后一行、以及中间一行(即第
行)的第2~N-1个字符都是-,其余所有字符都是半角小写字母x。例如,一个N=5的日字矩阵如下:

请你帮小杨根据给定的N打印出对应的“日字矩阵”。
输入描述
一行一个整数N(5≤ N≤ 49,保证N为奇数)。
输出描述
输出对应的“日字矩阵”。
请严格按格式要求输出,不要擅自添加任何空格、标点、空行等任何符号。你应该恰好输出N行,每行除了换行符外恰好包含N个字符,这些字符要么是-,要么是|,要么是x。你的输出必须和标准答案完全一致才能得分,请在提交前仔细检查。
特别提醒
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任
何提示信息。
样例输入1

样例输出1

样例输入2

样例输出2

【解题思路】根据题目要求,需要生成一个两边都是|,第一行、最后一行和中间一行((N+1)/2行)都是-,其他行都是xxx 的日字矩阵。同时,该矩阵也要使得行数和列数都是N 个字符。因此,首先设立一个输入程序来表示N,接着for i in range(n)表示n行,同时需要一个变量来构建图案。接着,主要来生成具体的图案样式,首先两边都是|,所以一行中的第一个和最后一个都应该生成|,也就是if j == 0 or j == n-1: ch = "|"。接着第一行、最后一行以及中间的行都是“-”,所以当行数为1,n-1,或者n//2时,输出“-”,否则输出"x"来表示其他行。最后将最初构建的buf 和变量ch(表示每一行的具体图案的变量)相加,输出就是题目中要求的图案。
【参考程序】

技术支持:GESP技术委员会委员 宋旭彤
策划:GESP技术委员会副主席 刘晓庆




1. GESP微信:关注“CCF GESP”公众号,点击“GESP小助手”即可交流。
2. GESP邮箱:gesp@ccf.org.cn
注:请在邮件中详细描述咨询的问题并留下考生的联系方式及姓名、身份证号,以便及时有效处理。
3. GESP电话:0512-67656856
咨询时间:周一至周五(法定节假日除外)上午 8:30-12:00;下午 13:00-17:30
扫码关注GESP公众号,了解更多资讯

