
点击上方蓝字关注我们吧

CCF编程能力等级认证,英文名Grade Examination of Software Programming(以下简称GESP),由中国计算机学会发起并主办,是为青少年计算机和编程学习者提供学业能力验证的平台。GESP覆盖中小学全学段,符合条件的青少年均可参加认证。GESP旨在提升青少年计算机和编程教育水平,推广和普及青少年计算机和编程教育。
GESP考察语言为图形化编程、Python编程及C++编程,主要考察学生掌握相关编程知识和操作能力,熟悉编程各项基础知识和理论框架,通过设定不同等级的考试目标,让学生具备编程从简单的程序到复杂程序设计的编程能力,为后期专业化编程学习打下良好基础。
本次为大家带来的是2024年6月认证Python三级真题解析。
GESP2024年6月认证Python三级
单选题(每题2分,共30分)
|
题号 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
|
答案 |
C |
B |
B |
C |
C |
A |
A |
D |
B |
C |
D |
A |
C |
B |
B |
1、⼩杨⽗母带他到某培训机构给他报名参加CCF组织的GESP认证考试的第1级 ,那他可以选择的认证语言有 ( ) 种。
A. 1
B. 2
C. 3
D. 4
答案:C
解析:GESP认证目前支持的语言有Scratch、Python、C++三种
2、下⾯流程图在yr输⼊2024时,可以判定yr代表闰年,并输出2月是29天,则图中菱形框中应该填入( )。

A. (yr%400==0) || (yr%4==0)
B. (yr%400==0) || (yr%4==0 && yr%100 !=0)
C. (yr%400==0) && (yr%4==0)
D.(yr%400==0) && (yr%4==0 && yr%100 !=0)
答案:B
解析:闰年判断,四年一闰百年不闰四百年再闰;
3、下列流程图的输出结果是?( )

答案:B
解析:先手推几次找找规律
sum=0,i=0
i<5 j=0 【j>=i i=1】
i<5 j=0 j<i sum=1,j=1【j>=i i=2】
i<5 j=0 j<i sum=2, j=1,sum=3,j=2 【j>=i i=3】
i<5 j=0 j<i sum=4, j=1,sum=5,j=2,sum=6,j=3 【j>=i i=4】
i<5 j=0 j<i sum=7, j=1, ... sum=10,j=4 【j>=i i=5】
i>5 sum=10
整体操作是个循环嵌套,不断地给sum加i(0,1,2,3,4)次1后输出sum。
4、将⼗进制2024转化成⼋进制 ,可以使⽤下列哪个表达式? ( )
A. bin(2024)
B. int(2024)
C. oct(2024)
D. hex(2024)
答案:C
解析:0CT(num)是将num转化为八进制的表达式
5、执⾏下⾯Python代码后 ,输出的结果是? ( )

1
2
3
4
答案:C
解析:执行上述Python代码后,字典b会被字典a的键值对更新。具体来说,b中的' name'键的值会被更新为'Tom',并且会添加一个新的键值对'age': 12。因此,更新后的字典b包含3个键值对,所以输出的结果是3。
6、执⾏下⾯Python代码后 ,输出的结果不可能是哪⼀项? ( )
A. {0:
8, 4: 4, 6: 2, 2: 6}
B. {8: 0, 6: 2, 4: 4, 2: 6}
C. {4: 4, 6: 2, 8: 0, 2: 6}
D. {8: 0, 2: 6, 4: 4, 6: 2}
答案:A
解析:分析zip(range(8, 0, -2), range(0, 8, 2))的结果。
range(8, 0, -2)生成一个序列:[8, 6, 4, 2]。
range(0, 8, 2)生成一个序列:[0, 2, 4, 6]。
zip函数将这两个序列“打包”成一个元组的列表:[(8, 0), (6, 2), (4, 4), (2, 6)]。
dict函数将这个元组的列表转换成字典:{8: 0, 6: 2, 4: 4, 2: 6}。
现在,比较选项:
A. {0: 8, 4: 4, 6: 2, 2: 6} ——键的顺序和值都是错误的。
B. {8: 0, 6: 2, 4: 4, 2: 6} ——与我们计算的字典相同。
C. {4: 4, 6: 2, 8: 0, 2: 6} ——键的顺序不同,但值是正确的,字典是无序的,所以这也是可能的。
D. {8: 0, 2: 6, 4: 4, 6: 2} ——键的顺序不同,但值是正确的,字典是无序的,所以这也是可能的。
因此,输出的结果不可能是A选项:{0: 8, 4: 4, 6: 2, 2: 6}。
7、执⾏下⾯Python代码后 ,输出的结果是? ( )

('scratch', 'c++', 'python')
('python', 'scratch', 'c++')
('scratch', 'python','c++')
( 'c++','python','scratch')
答案:A
解析:这段代码先定义了一个元组t1,包含三个字符串:"python", "c++", "scratch"。
接着,通过列表推导式(i for i in t1[::-1])和tuple()函数创建了一个新的元组t2。
t1[::-1]表示将t1中的元素逆序。
因此,t2会包含t1中元素的逆序,即("scratch", "c++", "python")。
所以,输出的结果是:('scratch', 'c++', 'python')
8、执⾏下⾯Python代码后 ,输出的结果是? ( )

A. (3, 4, 5, 6, 7, 'c', 'd', 'e')
B. (3, 4, 5, 6, 7, 'f', 'e', 'd', 'c')
C. (3, 4, 5, 6, 'f', 'e', 'd', 'c')
D. (3, 4, 5, 6, 7, 'f', 'e', 'd')
答案:D
解析:分析表达式t1[2:] + t2[5:2:-1]。
t1[2:]表示从元组t1中取索引从2开始到最后的所有元素,即(3, 4, 5, 6, 7)。
t2[5:2:-1]表示从元组t2中取索引从5开始到2(不包括2)的所有元素,并且步长为-1, 即逆序取元素。 这会产生 ('f', 'e', 'd')。
将这两个结果相加,即(3, 4, 5, 6, 7) + ('f', 'e', 'd'),结果是(3, 4, 5, 6, 7, 'f', 'e', 'd')。
所以,输出的结果是(3, 4, 5, 6, 7, 'f', 'e', 'd')。 答案是 D. (3, 4, 5, 6, 7, 'f', 'e', 'd')。
9、执⾏下⾯Python代码后 ,输出的结果是? ( )

[9, 7, 5, 3, 1] [8, 6, 4, 2, 0]
[8, 6, 4, 2, 0] [9, 7, 5, 3, 1]
[0, 2, 4, 6, 8] [1, 3, 5, 7, 9]
D. [1, 3, 5, 7, 9] [0, 2, 4, 6, 8]
答案:B
解析:代码首先生成了一个包含0到9的列表a(通过取10到19之间每个数字对10的余数)。
然后,它定义了两个空列表b和c,用于存储偶数和奇数。
接着,代码进入一个循环,从列表a中逐个弹出元素,并根据其是偶数还是奇数将其添加到列表b或c中。
由于pop()方法默认弹出列表的最后一个元素,所以处理顺序是从9到0。最终,列表b包含了所有的偶数(8, 6, 4, 2, 0),而列表c包含了所有的奇数(9, 7, 5, 3, 1),因此输出的结果是[8, 6, 4, 2, 0] [9, 7, 5, 3, 1],对应选项B。
10、执⾏下⾯Python代码后 ,输出的结果是? ( )

A. ['a', 'e', 'g', 'n', 'o', 'r']
B. ['e', 'g', 'n', 'a', 'r', 'o']
C. ['r', 'o', 'n', 'g', 'e', 'a']
D. ['o', 'r', 'a', 'n', 'g', 'e']
答案:C
解析:分析Python代码的执行流程:
创建一个列表a,包含元素['o', 'r', 'a', 'n', 'g', 'e']。
使用sort()方法对列表a进行排序。排序后,列表a变为['a', 'e', 'g', 'n', 'o', 'r']。
使用reverse()方法将列表a反转。反转后,列表a变为['r', 'o', 'n', 'g', 'e', 'a']。
打印列表a。
根据以上分析,输出的结果是['r', 'o', 'n', 'g', 'e', 'a']。
因此,正确答案是C. ['r', 'o', 'n', 'g', 'e', 'a']。
11、下⾯可以正确输出 They 're planning a party for their friend 's birthday. 的Python语句是?( )
A. print('They\ 're planning a party for their friend\ 's birthday.")
B. print("They\ 're planning a party for their friend\ 's birthday. ')
C. print('They 're planning a party for their friend 's birthday. ')
D. print('They\ 're planning a party for their friend\ 's birthday. ')
答案:D
解析:在Python中,单引号内的单引号需要通过转义字符\来转义,否
则Python解释器会将其视为字符串的结束。选择D
12、执⾏下⾯Python代码后 ,输出的结果是? ( )

A. [ 'gesp ', 'ccf.org.cn ']
B. [ 'gesp ', 'ccf ', 'org.cn ']
C. [ 'gesp ', 'ccf ', 'org ', 'cn ']
D. [ 'gesp.ccf.org.cn ']
答案:A
解析:这段代码的作用是将字符串'gesp.ccf.org.cn'在第一个出现的点号(.)处进行分割。split('.', 1) 方法中的参数表示使用点号作为分隔符,并且只分割一次。
因此,字符串被分割成两部分:'gesp'和'ccf.org.cn'。
最后,这两部分作为列表输出,即['gesp', 'ccf.org.cn'],对应选项A。
13、执⾏下⾯Python代码后 ,输出的结果可能是? ( )

{'H', 'p', 'w', 'e', 'y', 'a', 'r', 'p', 'n'}
{'p', 'n', 'w', 'r', 'H', 'y', 'a', 'e'}
{'r', 'y', 'w', 'n', 'e', 'a', 'p', 'H', ' '}
D. {'r', 'p', 'e', 'a', 'H', 'w', 'n', 'a', 'y'}
答案:C
解析:这段代码首先创建了一个字符串"Happy new year",然后将其转换为一个集合。 集合是一个无序且不包含重复元素的数据结构,所以转换后的集合将包含字符串中的所有唯一字符,但不包括任何重复的字符。最后,代码打印出这个集合。
由于集合是无序的,所以打印出的字符顺序可能与原始字符串中的顺序不同。但是,集合中的字符 将包括 'H', 'a', 'p', 'y', ' ', 'n', 'e', 'w', 'y', 'e', 'a', 'r' 中的每一个,但重复的字符(如'p', ' ', 'y', 'e')只会出现一次。
因此,输出的结果是一个包含字符串中所有唯一字符的集合,但字符的顺序可能有所不同。选项C {'r', 'y', 'w', 'n', 'e', 'a', 'p', 'H', ' '}是这种集合的一个可能表示,尽管实际输出时字符的顺序可能不同。
14、⼩杨在做数学题 ,题⽬要求找出从1到35中能被7整除的数字, 即[7, 14, 21, 28, 35], 以下哪个解析式可以完 成这样的任务? ( )
A. [i for i in range(36) if i % 7 == 0]
B. [i for i in range(1, 36) if i % 7 == 0]
C. [i for i in range(1, 35) if i % 7 == 0]
D. [i for i in range(1, 36) if i // 7 == 0]
答案:B
解析:这个问题要求找出从1到35中能被7整除的数字,即[7, 14, 21, 28, 35]。需要使用列表推导式来完成这个任务。
A选项的范围是从0到35,包含了0,但题目要求是从1开始,所以A选项不正确。
B选项的范围是从1到35,正好符合题目要求。同时,它使用了条件i % 7 == 0来筛选出能被7整除的数字,也符合题目要求。因此,B选项是正确的。
C选项的范围是从1到34,不包含35,所以C选项不正确。
D选项虽然范围是从1到35,但它使用的条件i // 7 == 0表示筛选出除以7余数为0且 商也为0的数字,这在1到35的范围内是不存在的,所以D选项也不正确。
15、某⼩学男⼦篮球队招募新成员 ,要求加⼊球队的成员⾝⾼在135厘⽶以上(不含135厘⽶) 。本次报名的⼈ 员有10⼈ ,她们的⾝⾼分别是125、127、136、134、137、138、126、135、140、145。完善以下代码 ,求出本次球 队能够招募到新成员的⼈数? ( )

A. a.index(135)
B. sum(b)
C. len(b)
D.b.count('True ')
答案:B
解析:问题要求计算一个小学男子篮球队能够招募到的新成员人数。招募的条件是成员的身高必须大于135厘米。给定 了一个包含10个人身高的列表,需要筛选出身高符合要求的人数。
通过列表推导式,可以得到一个布尔列表,其中True表示身高符合要求,False表示身高不符合要求。然后,使 用sum()函数来计算这个布尔列表中True的数量,因为True可以被当作1来处理。最终,我们得到了一个数字, 表示能够招募到的新成员人数。
二、判断题 (每题2分,共20分)
题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
答案 | √ | √ | × | × | √ | × | √ | × | √ | √ |
1、GESP测试是对认证者的编程能力进行等级认证, 同一级别的能力基本上与编程语言无关 。 ( )
答案:正确
解析:本题考察对GESP的认识,GESP认证是对认证者的编程能力进行等级认证, 同⼀级别的能力基本上与编程语言无关
2、在Python中 ,print(list("GESP"))将输出['G', 'E', 'S', 'P'] 。 ( )
答案:正确
解析:打印list结果为['G', 'E', 'S', 'P']
3、集合是⼀个⽆序的不重复元素序列 ,⽤{}作为界定符 ,如集合 {1, 2, {3: 4}, 5, 6} 。
答案:错误
解析;集合中的元素应该是不可变的(immutable)。{3: 4} 是一个字典(Dictionary),它是可变的(mutable),因此不能作为集合的元素
4、集合支持索引操作 ,可以通过索引访问元素 。
答案:错误
解析:集合不支持索引操作。由于集合是无序的,所以无法通过索引来访问集合中的元素。
5、整数-6的16位补码可用十六进制表⽰为FFFA。
答案:正确
解析:-6=(1000 0000 0000 0110)原
=> (1111 1111 1111 1001)反
=>(1111 1111 1111 1010)补码
6、十六进制FB 转成⼋进制为363。
答案:错误
解析:FB转二进制是1111 1011 转 八进制是 373
7、a,b为整数 ,如果表达式 a ^ b == 0 为True,那么说明a与b相等。
答案:正确
解析:考察位运算中的异或运算,相同为0、相异为1,若a^b==0,表示a和b是相同的。
8、执行下⾯Python代码后 ,输出的结果是8。

答案:错误
解析:(1010)2 & (001001000000)2 == 0
9、执行下⾯Python代码后 ,输出的结果不可能是89781。 ( )

答案:正确
解析:a为0~9之间的随机数,模拟上述代码运算 第一位可以为 2 5 8,第二位可以为0 3 6 9 ,第三位可以为1 4 7,第五位可以为0 3 6 9 因此8 9 7 8 1 的最后一位不符合。
10、把整数3025从中剪开分为30和25两个数 ,此时再将这两数之和平⽅ ,计算结果⼜等于原数。(30 + 25) × (30 + 25)= 55 × 55 = 3025 ,这样的数叫“雷劈数” 。可以使⽤枚举的⽅法求出所有符合这样条件的四位数 。
答案:正确
解析:枚举1000~9999找出符合要求的情况。
三、编程题(每题25分,共50分)
|
题号 |
1 |
2 |
|
答案 |
1、移位
题面描述
⼩杨学习了加密技术移位 ,所有⼤写字母都向后按照⼀个固定数⽬进⾏偏移 。偏移过程会将字母表视作⾸尾相接的环,例如,当偏移量是3的时候,⼤写字母A会替换成D⼤写字母Z会替换成C,总体来看,⼤写字母表ABCDEFGHIJKLMNOPQRSTUVWXYZ会被替换成DEFGHIJKLMNOPQRSTUVWXYZABC。
注:当偏移量是26的倍数时,每个⼤写字母经过偏移后会恰好回到原来的位置, 即⼤写字母表 ABCDEFGHIJKLMNOPQRSTUVWXYZ经过偏移后会保持不变。
输入格式
第⼀⾏包含⼀个正整数n。
输出格式
输出在偏移量为n的情况下 ,⼤写字母表 ABCDEFGHIJKLMNOPQRSTUVWXYZ移位替换后的结果。
样例1

样例解释
当偏移量是3的时候 ,⼤写字母 A会替换成D,⼤写字母Z会替换成C,总体来看 ,⼤写字母表 ABCDEFGHIJKLMNOPQRSTUVWXYZ会被替换成DEFGHIJKLMNOPQRSTUVWXYZABC。
数据范围
对于全部数据 ,保证有 1 ≤ n ≤ 100。
【解析】
周期问题,字符的原始位置是i,向右移动n个字符即 等于(i+n)%26;
【参考程序】

2、寻找倍数
题面描述
⼩杨有⼀个包含n个正整数的序列A=
[a1 ,
a2 ,
… , an
,他想知道是否存在i
(1 ≤ i ≤ n) 使得ai是序列A中所有数的倍数。
输入格式
第一行包含一个正整数t,代表测试用例组数。
接下来是t组测试用例。
对于每组测试用例,一共两行。其中,第一行包含一个正整数n;第二行包含几个正整数,代表序列A。
输出格式
对于每组测试用例,如果存在i(1≤i≤n)满⾜对于所有k(1≤k≤n)ai是ak的倍数,输出Yes,否则输出No。
样例1

样例解释
对于第⼀组数据 ,对于 a3= 4 ,满⾜a3是a1和a2的倍数。
数据范围
对于全部数据,保证有1 ≤ t ≤ 10,1 ≤ n ≤ 105,1 ≤ ai≤ 109。
【解析】
什么是倍数?a的整数倍一定>=a,即 若序列中存在 一个数是所有数的倍数,那么这个数只可能是序列 中最大的那个数。
【参考程序】

技术支持: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公众号,了解更多资讯

