点击上方蓝字·关注我们



CCF编程能力等级认证,英文名Grade Examination of Software Programming(以下简称GESP),由中国计算机学会发起并主办,是为青少年计算机和编程学习者提供学业能力验证的平台。GESP覆盖中小学全学段,符合条件的青少年均可参加认证。GESP旨在提升青少年计算机和编程教育水平,推广和普及青少年计算机和编程教育。
GESP考察语言为图形化编程、Python编程及C++编程,主要考察学生掌握相关编程知识和操作能力,熟悉编程各项基础知识和理论框架,通过设定不同等级的考试目标,让学生具备编程从简单的程序到复杂程序设计的编程能力,为后期专业化编程学习打下良好基础。
本次为大家带来的是2025年6月Python三级认证真题解析。
Python 三级
2025年06月
一、单选题(每题2 分,共30 分)
题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
答案 | C | A | B | A | C | D | A | D | B | B | C | C | B | A | A |
第1 题 2025年4月19日在北京举行了一场颇为瞩目的人形机器人半程马拉松赛。比赛期间,跑动着的机器人会利用身上安装的多个传感器所反馈的数据来调整姿态、保持平衡等,那么这类传感器类似于计算机的( )。
A.处理器
B.存储器
C.输入设备
D.输出设备
【答案】C
【考纲知识点】 计算机基础
【解析】 输入设备是指用于向计算机输入数据的设备,例如键盘、鼠标、扫描仪等。传感器的数据输入到机器人中,进行处理和分析。
第2 题 小杨购置的计算机使用一年后觉得内存不够用了,想购置一个容量更大的内存条,这时需要的内存条是( )。
A. RAM
B. ROM
C. CACHE
D. EPROM
【答案】A
【考纲知识点】 计算机的存储
【解析】RAM 是计算机的随机存储器,用于存储计算机正在运行的程序和数据。当内存不足时,需要更换或增加容量更大的RAM,而非ROM(只读存储器)或其他存储部件。
第3 题 下列哪个Python表达式能正确将十六进制数”2A”转换为十进制?( )
A. int('2A', 10)
B. int('2A', 16)
C. bin(0x2A)
D. hex(42)
【答案】B
【考纲知识点】 数据类型
【解析】int(‘2A’, 16)的作用是将字符串形式的十六进制数2A转换为其对应的十进制数。int()函数的第二个参数表示进制,因此选择B是正确的。A. int(‘2A’, 10)
错误原因:第二个参数指定的是进制,这里写的是10(十进制),但’2A’是十六进制字符串,十进制中不允许出现字母,因此会报错。
C. bin(0x2A)
错误原因:bin()用于将数字转换为二进制字符串形式,例如bin(42)会返回’0b101010’,而不是将十六进制转换为十进制。
D. hex(42)
错误原因:hex()用于将数字转换为十六进制字符串,例如hex(42)会返回’0x2a’,而不是进行进制转换。
第4 题 执行下面Python代码后,输出的结果是?( )

A. ['apple', 'grape', 'banana', 'cherry', 'orange']
B. ['apple', 'banana', 'grape', 'cherry', 'orange']
C. ['apple', 'grape', 'banana', 'cherry']
D. ['apple', 'grape', 'orange', 'banana', 'cherry']
【答案】A
【考纲知识点】 列表
【解析】代码通过append(‘orange’)将orange添加到列表末尾,然后通过insert(1, ‘grape’)在索引1的位置插入grape。最终列表为[‘apple’, ‘grape’, ‘banana’, ‘cherry’, ‘orange’],故答案为A。
第5 题 执行下面Python代码后,输出的结果是?( )

A. [2, 4, 6, 7, 4]
B. [2, 4, 6, 6, 3, 0]
C. [2, 4, 6, 7, 4, 1]
D. [2, 4, 6, 7, 4, 1, 0]
【答案】C
【考纲知识点】 列表
【解析】numbers[2:7:2]提取从索引2到索引6(不含7),步长为2,结果是[2, 4, 6];numbers[-3::-3]从倒数第3个元素逆向每隔3步提取,结果是[7, 4, 1];拼接后结果为[2, 4, 6, 7, 4, 1],故答案为C。
第6 题 关于Python元组,以下说法错误的是?( )
A.元组是不可变的数据类型
B.元组可以作为字典的键
C.元组支持切片操作
D.元组中的元素可以被重新赋值
【答案】D
【考纲知识点】 元组
【解析】元组是不可变的数据类型,一旦创建就不能修改其中的元素。因此,元组中的元素不能被重新赋值。
第7 题 执行下面Python代码后,输出的结果是?( )

A. True
B. False
C.报错
D. None
【答案】A
【考纲知识点】 元组
【解析】元组比较遵循字典序规则,从左到右依次比较对应位置的元素。比较时,3 < 4为真,因此表达式(1, 2, 3) < (1, 2, 4)输出True。答案为A。
第8 题 关于字典的.get()方法,以下说法错误的是?( )
A.当键不存在时,.get()方法可以返回None
B. .get()方法可以设置默认返回值
C. .get()方法比直接使用[]访问更安全
D. .get()方法会修改原字典
【答案】D
【考纲知识点】 字典
【解析】字典的.get()方法不会修改原字典,只是返回指定键的值。如果键不存在,会返回默认值(如果指定了默认值)或None(如果没有指定默认值)。
第9 题 以下哪个字典推导式能正确将列表['Python', 'Java', 'C++']转换为{'Python':6, 'Java':4, 'C++':3}(字符串作为键,长度作为值)?( )
A. {len(x): x for x in ['Python', 'Java', 'C++']}
B. {x: len(x) for x in ['Python', 'Java', 'C++']}
C. {x: x.length() for x in ['Python', 'Java', 'C++']}
D. {x: size(x) for x in ['Python', 'Java', 'C++']}
【答案】B
【考纲知识点】 字典
【解析】字典推导式{x: len(x) for x in [‘Python’, ‘Java’, ‘C++’]}将列表中的每个字符串作为键,字符串的长度作为值,创建一个新的字典。
第10 题 执行下面Python代码后,输出的结果是?( )

A. Hello, python!
B. Hello, Python!
C. hello, python!
D. hello, Python!
【答案】B
【考纲知识点】 字符串
【解析】代码依次执行以下操作:
1)s.strip()去掉字符串两端的空格,结果为”Hello, World!“。
2).lower()将所有字母变为小写,结果为”hello, world!“。
3).replace(‘world’, ‘Python’)将”world”替换为”Python”,结果为”hello, Python!“。
4).capitalize()将字符串的首字母大写,结果为”Hello, Python!“。
最终输出为Hello, Python!,答案为B。
第11 题 执行下面Python代码后,输出的结果是?( )

A. o-t-t
B. one-two-three
C. on-tw-th
D. one,two,three
【答案】C
【考纲知识点】 字符串
【解析】字符串的.split()方法将字符串按照指定的分隔符(默认为空格)分割成子字符串,返回一个列表。列表推导式[p[:2] for p in parts]将每个子字符串取前两个字符,用’-’连接,结果为on-tw-th。
第12 题 以下哪个操作会修改集合 s = {1, 2, 3} 的内容?( )
A. s.union({4, 5})
B. s.difference({1})
C. s.intersection_update({2, 3})
D. s.issubset({1, 2, 3, 4})
【答案】C
【考纲知识点】 集合
【解析】集合的.intersection_update()方法会修改原集合,只保留两个集合的交集元素。
A. s.union({4, 5})
union()返回两个集合的并集,但不修改原集合s,因此不会更改内容。
B. s.difference({1})
difference()返回集合的差集,但不修改原集合s,因此原集合保持不变。
D. s.issubset({1, 2, 3, 4})
issubset()只是检查集合是否是另一个集合的子集,属于查询操作,不会修改集合s。
第13 题 执行下面Python代码后,输出的结果是?( )

A. {1, 2, 3, 4, 5}
B. {1, 2, 4, 5}
C. {3}
D. set()
【答案】B
【考纲知识点】 集合
【解析】集合的对称差集运算符^会返回两个集合的对称差集,即只在其中一个集合中出现的元素。
第14 题 下列哪个选项可以将字符串 “hello” 转换为列表['h', 'e', 'l', 'l', 'o']?( )
A. list("hello")
B. "hello".split()
C. "hello".to_list()
D. ["hello"]
【答案】A
【考纲知识点】 字符串
【解析】list(“hello”)将字符串逐字符分解为列表,因此得到[‘h’,‘e’,‘l’, ‘l’,‘o’]。其他选项中,.split()分割字符串但不会逐字符分解,.to_list()不存在,[“hello”]只是创建包含整个字符串的列表。答案为A。
第15 题 凯撒加密是一种经典的加密方法,它通过将字母表中的每个字母按照固定的位移量进行替换来实现加密。例如,当位移量为1时:
· a→b, b→c, ..., y→z
· z→a(循环回到字母表开头)
· 其他字符(如大写字母、数字、符号等)保持不变
现在需要实现一个凯撒加密程序,具体要求如下:
· 只对小写字母进行加密
· 位移量为1
· 非小写字母字符保持原样不变
· 加密后的字符需要保持原始的大小写格式
请补全下面代码中的空白处,使其能够正确实现上述加密功能:

A. code - ord('a') + 1
B. code + 1
C. ord(char) + 1
D. (code - ord('a')) * 2
【答案】A
【考纲知识点】 字符串
【解析】凯撒加密需要将字符转化为字母表索引(通过减去ord(‘a’)),进行位移运算后再转换回字符。正确计算方式是code - ord(‘a’) + 1,适配字母循环规则,并结合% 26进行循环。答案为A。
二、判断题(每题2 分,共20 分)
题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
答案 | √ | × | × | √ | √ | √ | × | × | √ | × |
第1 题 现在,人们参加各种闭卷考试时通常都不允许将智能手机、平板电脑等带入考场,因为智能手表通常都有嵌入操作系统及通信等功能,所以也不允许携带入考场。( )
【答案】
【考纲知识点】 计算机基础
【解析】表述正确。
第2 题 执行下面Python代码后,输出的结果是True。

【答案】
【考纲知识点】 位运算
【解析】x ^ y是按位异或操作,结果为8;x & y是按位与操作,结果为7。比较8 < 7为False,因此代码输出为False。
第3 题 表达式~0b0011 << 2 的结果是-0b1100(即十进制-12)。
【答案】
【考纲知识点】 位运算
【解析】0b0011取反后为-0b0100(即十进制-4),左移2位后结果为-0b010000(即十进制-16)。因此,0b0011 << 2的结果不是-12。
第4 题 若用枚举算法解决”密码锁破解”问题,则十进制3位数字密码最多需要尝试1000次就一定能打开。
【答案】
【考纲知识点】 枚举算法
【解析】十进制3位数字密码的范围为000到999,共有1000种可能。在使用枚举算法时,最差情况下需要尝试全部可能性。因此最多尝试1000次就一定能破解密码锁。
第5 题 执行下面Python代码后,会将列表a 的前两个元素替换为[10, 20]。

【答案】
【考纲知识点】 列表
【解析】代码中a[:2]表示列表前两个元素(索引0和1)的切片,通过赋值[10, 20]将其替换。结果为[10, 20, 3, 4, 5],因此前两个元素被成功替换。
第6 题 使用update()方法合并字典时,如果键重复,新值会覆盖旧值。
【答案】
【考纲知识点】 字典
【解析】update()方法用于将一个字典的键值对更新到另一个字典中。如果新字典有与原字典重复的键,新值会覆盖旧值。这是该方法的设计特性。
第7 题 执行下列Python代码,输出的结果是2。

【答案】
【考纲知识点】 元组
【解析】元组乘法会重复元素,(1, 2, 3) * 2 得到 (1, 2, 3, 1, 2, 3),长度为6而非2。
第8 题Python代码set1 = {1, 2, 3}; set1.remove(4) 能正常执行,且set1 保持不变。
【答案】
【考纲知识点】集合
【解析】remove()用于移除集合中的指定元素,若元素不存在,会引发KeyError异常。代码尝试移除不存在的元素4,会导致出错。
第9 题 在Python中,字符串是不可变对象,因此执行s = "hello"; s[0] = "H"会导致程序报错。
【答案】
【考纲知识点】 字符串
【解析】在Python中,字符串是不可变对象,无法通过索引直接修改其中的字符。因此执行s[0] = “H”会触发TypeError错误,无法完成操作。
第10 题 在Python中使用list({"a": 1, "b": 2}) 可以将字典{"a": 1, "b": 2} 转换为[("a", 1), ("b", 2)]。
【答案】
【考纲知识点】 字典
【解析】list({“a”: 1, “b”: 2})只会提取字典的键,结果是[“a”, “b”],而不是键值对形式的列表[(“a”, 1), (“b”, 2)]。若需要键值对,可以使用list({“a”: 1, “b”: 2}.items())。因此答案为×。
三、编程题(每题25 分,共50 分)
题号 | 1 | 2 |
答案 |
编程题1
试题名称:奇偶校验
时间限制:3.0 s
内存限制:512.0 MB
题目描述
数据在传输过程中可能出错,因此接收方收到数据后通常会校验传输的数据是否正确,奇偶校验是经典的校验方式之一。
给定n个非负整数c1,c2,c3......cn,代表所传输的数据,它们的校验码取决于这些整数在二进制下1的数量之和的奇偶性。如果这些整数在二进制下共有奇数个1,那么校验码为1;否则校验码为0。你能求出这些整数的校验码吗?
输入格式
第一行,一个正整数n,表示所传输的数据量。
第二行,n个非负整数c1,c2,c3......cn,表示所传输的数据。
输出格式
输出一行,两个整数,以一个空格分隔:
第一个整数表示c1,c2,c3......cn在二进制下1的总数量;
第二个整数表示校验码(0或1)。
样例
输入样例1

输出样例1

输入样例2

输出样例2

数据范围
对于所有测试点,保证1≤n≤100,0≤ci≤255。
【考纲知识点】枚举算法、位运算、进制转换
【解题思路】
1.通过bin()将每个数转为二进制字符串。
2.使用.count(“1”)统计每个数的二进制中1的个数,累加得到总数。
3.通过one_count % 2判断奇偶性,确定校验码为1或0。
4.输出总数与校验码即可。
参考程序

编程题2
试题名称:分糖果
时间限制:3.0 s
内存限制:512.0 MB
题目描述
有 位小朋友排成一队等待老师分糖果。第i位小朋友想要至少ai颗糖果,并且分给他的糖果数量必须比分给前一位小朋友的糖果数量更多,不然他就会不开心。
老师想知道至少需要准备多少颗糖果才能让所有小朋友都开心。你能帮帮老师吗?
输入格式
第一行,一个正整数n,表示小朋友的人数。
第二行,n个正整数a1,a2,....an,依次表示每位小朋友至少需要的糖果数量。
输出格式
输出一行,一个整数,表示最少需要准备的糖果数量。
样例
输入样例1

输出样例1

输入样例2

输出样例2

数据范围
对于所有测试点,保证1≤n ≤1000,1≤ai≤109。
【考纲知识点】列表
【解题思路】
1.从第二个小朋友开始,检查糖果数量是否满足 “更多” 的条件:
· 如果当前糖果数a[i] 小于或等于前一个小朋友的糖果数,则将其更新为a[i-1] + 1。
2.最后,利用sum()函数求出更新后的糖果总数,输出结果。
参考程序

策划: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
