当前位置:首页>python>GESP第12次认证真题解析|Python三级真题回顾

GESP第12次认证真题解析|Python三级真题回顾

  • 2026-09-14 14:51:30
GESP第12次认证真题解析|Python三级真题回顾

点击上方蓝字·关注我们

CCF编程能力等级认证,英文名Grade Examination of Software Programming(以下简称GESP),由中国计算机学会发起并主办,是为计算机和编程学习者提供学业能力验证的平台。GESP旨在提升青少年计算机编程能力,培训机构编编程教育水平,推广和普及计算机和编程教育。

GESP考察语言为图形化编程、Python编程及C++编程,主要考察学生掌握相关编程知识和操作能力,熟悉编程各项基础知识和理论框架,通过设定不同等级的考试目标,让学生具备编程从简单的程序到复杂程序设计的编程能力,为后期专业化编程学习打下良好基础。

本次为大家带来的是2025年12月Python三级认证真题解析。

Python三级

2025年12月

一、单选题(共15题,每题2分,共30分)

题号

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

答案

B

B

C

A

B

B

B

B

B

C

C

A

B

A

D

1、近日,空中客车公司表示,约6000架空客A320系列飞机需要紧急更换一种易受太阳辐射影响的飞行控制软件。空客表示,在对一起飞行事故进行分析后,表明强烈的太阳辐射可能会损坏飞行控制系统所需的关键数据,导致判断失误,进而可能引发飞行异常。在这里的飞行控制系统中,执行判断的部件最可能是下面的( )。

A.辐射传感器

B.处理器

C.内存单元

D.输出设备

【答案】B

【考察知识点】计算机硬件组成及功能

【解析】飞行控制系统中,辐射传感器仅负责采集太阳辐射相关数据,无逻辑判断能力;处理器(CPU)是核心运算和逻辑判断部件,可执行 “判断” 核心逻辑;内存单元仅用于临时存储数据和指令,不具备判断功能;输出设备仅用于反馈系统结果(如显示、告警)。因此执行判断的部件是处理器。

2、小杨最近为了备考GESP,开始看网络上关于网络知识的视频。其中提到计算机网络系统有不同的划分标准,其中之一就是按照地理覆盖的范围来划分。那他平时上学所在的教学楼内的网络是一个( )。

A.PAN

B.LAN

C.MAN

D.WAN

【答案】B

【考察知识点】计算机网络的分类

【解析】按地理覆盖范围,计算机网络分为四类:PAN(个人区域网)覆盖几米范围(如蓝牙、无线键鼠);LAN(局域网)覆盖局部区域(如教学楼、办公室、家庭);MAN(城域网)覆盖整个城市;WAN(广域网)跨地域(如互联网、跨省企业内网)。教学楼内的网络属于局域网(LAN)。

3、下面选项中最大的数是?( )

A.(42)10

B.(2F)16

C.(110111)2

D.(41)8

【答案】C

【考察知识点】进制转换

【解析】将所有选项转换为十进制后比较:

A选项:(42)10=42;

B选项:十六进制(2F)16=2×16+15=47;

C选项:二进制(110111)2=1×32+1×16+0×8+1×4+1×2+1×1=55;

D选项:八进制(41)8=4×8+1=33。

综上,最大的数是C选项。

4、在Python中,有一个整数变量,现需要将其二进制表示中的第三位(从右向左,最低位为第0位)设置为1,而其它位保持不变。下列哪段代码可以正确实现此功能?(  )

A.x = x | (1 << 3)

B.x = x & (1 << 3)

C.x = x ^ (1 << 2)

D.x = x | 0b100 

【答案】A

【考察知识点】位运算

【解析】需求是将整数x二进制表示的第三位(从右数,最低位为第0位)设为1,其他位不变:

A选项:1 << 3 生成二进制1000(仅第三位为1),x | (1 << 3) 是按位或运算,可保留x原有位,仅将第三位强制置1,符合需求;

B选项:x & (1 << 3) 是按位与运算,会仅保留第三位的值,其他位清零,不符合;

C选项:1 << 2 对应第二位,且^(按位异或)会翻转该位值(0变1、1变0),而非强制置1,位置和运算逻辑均错误;

D选项:0b100是二进制第二位(值为4),位置错误,无法修改第三位。

5、执行下面Python代码后,输出的结果是?( )

A.[3, 2]

B.[1, 2]

C.[1, 3]

D.[3, 3]

【答案】B

【考察知识点】列表

【解析】a.copy()对列表a执行拷贝,会生成一个新的列表b,a和b指向内存中不同的存储空间,修改a的元素不会影响b。

6、Python表达式 [x % 3 for x in range(10) if x % 2 == 0] 的值是?

A.[0, 1, 0, 1, 0]

B.[0, 2, 1, 0, 2]

C.[0, 1, 2, 0, 1]

D.[0, 2, 4, 6, 8]

【答案】B

【考察知识点】列表推导式的执行逻辑

【解析】列表推导式[x % 3 for x in range(10) if x % 2 == 0]的执行步骤:

range(10)生成0-9的整数序列;

if x % 2 == 0 筛选出偶数:0、2、4、6、8;

对筛选后的每个数执行x % 3(取余):

0%3=0,2%3=2,4%3=1,6%3=0,8%3=2;

最终推导式结果为[0, 2, 1, 0, 2]。

7、已知 lst = list(range(10)),即 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]。要获取切片 [8, 6, 4, 2],应该使用的切片操作是?

A.lst[-2:2:-2]

B.lst[8:1:-2]

C.lst[8:2:-2]

D.lst[-2:1:2]

【答案】B

【考察知识点】列表切片的使用

【解析】已知lst = [0,1,2,3,4,5,6,7,8,9],切片格式为lst[起始索引:结束索引:步长](左闭右开,步长为负表示反向取数),目标是获取[8,6,4,2]:

A选项:lst[-2:2:-2],起始- 2 对应索引8,结束2对应索引2(不包含),步长- 2,取到8、6、4(缺少2),不符合;

B选项:lst[8:1:-2],起始8,结束1(不包含),步长- 2,取到8、6、4、2,符合需求;

C选项:lst[8:2:-2],结束2对应索引2(不包含),取到8、6、4(缺少2),不符合;

D选项:步长为2(正向),无法反向取数,结果为空列表[]。

第8题 分析以下代码段,最终的输出结果是什么?( )

A.True

B.False

C.程序报错

D.{'debug': True, 'port': 8080, 'timeout': 30}

【答案】B

【考察知识点】字典的键的唯一性

【解析】Python字典的键具有唯一性,若重复定义同一键,后定义的键值对会覆盖前一个。代码中config字典里'debug'先被赋值为True,后又赋值为False,最终config['debug']的取值为False。

9、合并两个字典d1 = {'a':1} 和 d2 = {'b':2} 的正确方式是?( )

A.d1 + d2

B.d1.update(d2)

C.d1.extend(d2)

D.d1.append(d2)

【答案】B

【考察知识点】字典的合并方法

【解析】逐一分析选项:

A选项:字典不支持+运算符拼接,执行会报错;

B选项:d1.update(d2)是字典合并的标准方法,会将d2的键值对原地合并到d1中(d1变为{'a':1, 'b':2}),符合需求;

C选项:extend()是列表的方法,用于追加可迭代对象,字典无此方法,执行报错;

D选项:append()是列表的方法,用于追加单个元素,字典无此方法,执行报错。

10、关于字符串的不可变性,下列说法正确的是?( )

A.可以通过索引直接修改字符串中的某个字符

B.字符串的 replace 方法会直接修改原字符串

C.任何看似修改字符串内容的操作(如 upper(), lower() 等)都会返回一个新字符串,原始字符串不受影响。

D.字符串拼接操作 += 会直接在原字符串末尾追加内容

【答案】C

【考察知识点】Python字符串的不可变性

【解析】字符串是不可变对象,即无法直接修改原有字符串的内容,所有看似 “修改” 的操作都会生成新字符串:

A选项:无法通过索引修改字符串字符(如s[0] = 'A' 会抛出TypeError),错误;

B选项:replace()方法会返回修改后的新字符串,原字符串保持不变,错误;

C选项:upper()、lower()、replace()等方法均返回新字符串,原始字符串不受影响,正确;

D选项:+=看似修改原字符串,实际是创建新字符串并重新赋值(原字符串内存地址改变),并非直接追加,错误。

11、对于字符串 s = "Hello, Python",执行s.find("Java")和s.index("Java")的结果分别是?( )

A.-1,-1

B.程序报错,程序报错

C.-1,程序报错

D.程序报错,-1

【答案】C

【考察知识点】字符串

【解析】对字符串s = "Hello, Python"执行两个方法:

s.find("Java"):查找子串,若不存在返回- 1;

s.index("Java"):查找子串,若不存在会抛出ValueError(程序报错);

因此结果是- 1 和程序报错。

12、执行 (1, 2) + (3, 4) 的结果是?( )

A.(1, 2, 3, 4)

B.(4, 3, 2, 1)

C.(1, 3, 2, 4)

D.报错

【答案】A

【考察知识点】元组的拼接操作

【解析】元组支持+运算符进行拼接,会将两个元组的元素按顺序合并为一个新元组。(1, 2) + (3, 4) 会将(1,2)和(3,4)的元素依次合并,结果为(1, 2, 3, 4)。

13、在以下场景中,使用元组比使用列表更合适的是?( )

A.存储一个需要频繁更新用户分数的排行榜。

B.表示一个二维平面上的点坐标 。

C.缓存一批需要动态增删的临时数据。

D.存储一组程序运行时需要不断追加记录的日志信息。

【答案】B

【考察知识点】Python元组与列表的特性及适用场景

【解析】元组的核心特性是不可变、有序,适合存储固定、无需修改的数据;列表的核心特性是可变、有序,适合动态增删改的数据:

A选项:排行榜需频繁更新分数,适合列表;

B选项:二维平面点坐标(x,y)是固定值,无需修改,适合元组;

C选项:临时数据需动态增删,适合列表;

D选项:日志信息需不断追加,适合列表。

14、表达式 {x**2 for x in range(-2, 3)} 的显示结果可能是?( )

A.{0, 1, 4}

B.{4, 1, 0, 1, 4}

C.{0, 1, 2, 4}

D.{1, 4, 9}

【答案】A

【考察知识点】Python集合推导式及集合的去重特性

【解析】集合推导式{x**2 for x in range(-2, 3)}的执行步骤:

range(-2, 3) 生成- 2、-1、0、1、2;

计算每个数的平方:(−2)2=4、(−1)2=1、02=0、12=1、22=4;

集合具有自动去重特性,最终结果为{0, 1, 4}。

15、现有集合s1={1, 2, 3} 和s2 = {3, 4, 5},表达式(s1 - s2) | (s2 - s1) 的结果是(   )

A.{1, 2}

B.{4, 5}

C.{3}

D.{1, 2, 4, 5}

【答案】D

【考察知识点】集合的差集、并集运算

【解析】已知s1 = {1, 2, 3},s2 = {3, 4, 5},分步解析:

s1 - s2:差集,取s1中有、s2中没有的元素 → {1, 2};

s2 - s1:差集,取s2中有、s1中没有的元素 → {4, 5};

|:并集,合并两个差集的元素 → {1, 2, 4, 5}。

二、判断题(共10题,每题2分,共20分)

题号

1

2

3

4

5

6

7

8

9

10

答案

×

√

×

√

×

√

×

×

×

√

1、鸿蒙是华为公司开发的一款操作系统,那么它能够将正确的源程序翻译成目标程序,并运行。( )

【答案】×

【考察知识点】操作系统

【解析】操作系统的核心功能是管理计算机硬件和软件资源(如进程、内存、设备),而 “将源程序翻译成目标程序” 是编译器(编译型语言,如C/C++)或解释器(解释型语言,如Python)的功能,并非操作系统的功能。因此该说法错误。

2、二进制数的奇偶性可以通过其最低位(最右边的位)来判断:最低位为0是偶数,为1是奇数。

【答案】√

【考察知识点】二进制数的奇偶性判断

【解析】二进制数的最低位(最右侧位)对应20=1:若最低位为0,该数可被2整除(偶数);若最低位为1,该数不可被2整除(奇数)。

3、在Python中,print(~0) 的输出结果仍是0。

【答案】×

【考察知识点】位运算

【解析】Python中~是按位取反运算符,运算规则为~x = -x-1。因此~0 = -0-1 = -1,输出结果为-1而非0。该说法错误。

4、执行下面Python代码后,输出的结果是 ['apple', 'grape', 'banana', 'cherry', 'orange']。

【答案】√

【考察知识点】列表的insert()和append()方法

【解析】代码执行过程:

fruits = ['apple', 'banana', 'cherry'],初始化列表;

fruits.insert(1, 'grape'),在索引1的位置插入grape,列表变为['apple', 'grape', 'banana', 'cherry'];

fruits.append('orange'),在列表末尾追加orange,列表变为['apple', 'grape', 'banana', 'cherry', 'orange'];

最终打印结果与题目描述一致,该说法正确。

5、下面Python代码的作用是统计字符串 s 中每个字符出现的次数。

【答案】×

【考察知识点】字典get()方法的使用及字符计数逻辑

【解析】dict_count.get(char)若char未在字典中,会返回None,执行None + 1 会抛出TypeError,无法完成字符计数。正确写法应为dict_count.get(char, 0) + 1(指定默认值0)。因此该代码无法实现统计功能,说法错误。

6、执行下面Python代码后,输出的结果是 2。

【答案】√

【考察知识点】字符串

【解析】s.count("aa")统计字符串中非重叠子串"aa"的出现次数:

s = "aaaaa" 可拆分为aa(索引0-1)、aa(索引2-3),索引1-2的aa与前一个重叠,不计入;

最终计数结果为2,该说法正确。

7、执行代码 a = (1, 2, 3); a.sort() 后,打印 a 会输出[1, 2, 3]。

【答案】×

【考察知识点】元组的不可变性

【解析】元组是不可变对象,没有sort()方法(sort()是列表的原地排序方法),执行a.sort()会抛出AttributeError,无法完成排序。因此该说法错误。

8、表达式 {} 在Python中可以创建一个空集合。

【答案】×

【考察知识点】Python空集合与空字典的创建方式

【解析】{}在Python中默认创建空字典;创建空集合需使用set()函数(如s = set())。因此该说法错误。

9、字符串可以通过 list() 函数直接转换为列表,但无法通过 tuple() 函数直接转换为元组。

【答案】×

【考察知识点】字符串与列表、元组的转换

【解析】字符串可通过list()转为列表(每个字符为列表元素),也可通过tuple()转为元组(每个字符为元组元素)。例如s = "abc",tuple(s)结果为('a', 'b', 'c')。因此该说法错误。

10、以下代码是使用枚举算法,找出所有各位数字的立方和等于该数本身的三位数。

【答案】√

【考察知识点】枚举算法的应用

【解析】枚举算法的核心是遍历所有可能的情况,验证条件并筛选结果:

代码遍历100-999的所有三位数(枚举所有可能);

拆分每个数的百位、十位、个位;

验证 “各位数字立方和等于自身” 的条件,符合则输出;

完全符合枚举算法的逻辑,该说法正确。

三、编程题(共2题,每题25分,共50分)

编程题1

  • 试题名称:密码强度

  • 时间限制:1.0 s

  • 内存限制:512.0 MB

题目描述

小杨是学校网络安全小组的成员,今天他的任务是设计一个“密码强度检测器”,帮助同学们检查自己的密码是否足够安全。一个安全的密码需要满足以下条件:

  • 密码至少包含8个字符(太短的密码容易被猜出来哦!)。

  • 密码至少包含一个大写字母(A、B、C、...、Z都可以)。

  • 密码至少包含一个数字(0、1、2、3、...、9 都可以)。

例如:

  • 密码PAs1s2an是安全密码(有8位、包含大写字母 P、A 和数字1、2)。

  • 密码ab1da3cd不是安全密码(没有大写字母)。

  • 密码Paabdbcd不是安全密码(没有数字)。

  • 密码Pa2不是安全密码(只有3位,太短了)。

输入格式

第一行一个正整数T,代表需要安全检测的密码组数。

对于每组密码,一行包含一个字符串,代表需要安全检测的密码。

输出格式

对于每组密码,输出一行,如果满足强度要求输出Y,否则输出N。

样例

输入样例

6

PAs1s2an

1a2bCql3

Pa12bsna

ab1da3cd

Paabdbcd

Pa2

输出样例

Y

Y

Y

N

N

N

样例解释

  • 密码PAs1s2an是安全密码(有8位、包含大写字母P、A 和数字1、2)。

  • 密码1a2bCql3是安全密码(有8位、包含大写字母C 和数字1、2、3)。

  • 密码Pa12bsna是安全密码(有8位、包含大写字母P 和数字1、2)。

  • 密码ab1da3cd不是安全密码(没有大写字母)。

  • 密码Paabdbcd不是安全密码(没有数字)。

  • 密码Pa2不是安全密码(只有3位,太短了)。

数据范围

对于所有测试点,保证1 ≤T ≤100,并且每组密码长度不超过100且至少为1,每组密码仅由大小写字母和数字组成。

【考察知识点】字符串

【解析】

需求分析:验证密码是否满足三个条件(长度≥8、含大写字母、含数字),满足输出Y,否则输出N;

核心逻辑:

读取测试用例数T,遍历每个密码;

len(password) >= 8 判断长度是否达标;

any(c.isupper() for c in password) 高效判断是否含大写字母(any()找到一个满足即返回true);

any(c.isdigit() for c in password) 高效判断是否含数字;

三个条件同时满足则输出Y,否则输出N;

参考程序

编程题2

  • 试题名称:小杨的智慧购物

  • 时间限制:1.0 s

  • 内存限制:512.0 MB

题目描述

小杨的班级要举办一个环保手工作品展览,老师请小杨去文具店购买M种不同的文具(例如:铅笔、橡皮、尺子等)。

商店里共有N件文具,每件文具都有一个种类编号(从1到M)和价格。

小杨的预算有限,他想了一个聪明的办法:对于每种文具,他只买最便宜的那一件(如果同种文具有多件价格相同且都是最便宜的,他只会购买其中的一件)。请你帮小杨计算出,买齐这M种文具一共需要花费多少钱。

输入格式

第一行两个正整数M,N,代表文具的种类数和总数。

之后N行,每行两个正整数Ki和Pi,分别代表第i件文具的种类编号和它的价格。数据保证每个种类至少有一件文具可供购买。

输出格式

输出一行,代表购买文具的总价。

样例

输入样例

2 5

1 1

1 2

1 1

2 3

2 10

输出样例

4

样例解释

文具清单如下:

  • 文具 1:种类 1,价格 1

  • 文具 2:种类 1,价格 2

  • 文具 3:种类 1,价格 1

  • 文具 4:种类 2,价格 3

  • 文具 5:种类 2,价格 10

小杨的选择过程:对于种类1:有三件商品,价格分别为1,2,1。其中最便宜的价格是1。对于种类2:有两件商品,价格分别为3,10。其中最便宜的价格是3。

计算总价:小杨购买这两类文具的总花费为1+3=4。

数据范围

对于所有测试点,保证1 ≤ M ≤ N ≤ 105,1 ≤ Ki≤ M,1 ≤ Pi≤ 103。

【考察知识点】枚举算法

【解析】

需求分析:统计每种文具的最低价格,求和得到买齐M种文具的总花费;

核心逻辑:

初始化min_prices列表,长度为M+1(索引0占位),初始值为正无穷(float('inf')),确保首次读取的价格能覆盖初始值;

遍历每件文具,若当前价格低于该类文具的已记录最低价,则更新;

对min_prices[1:M+1]求和(仅取1~M类的最低价格),输出总和;

参考程序

策划:GESP技术委员会副主席 刘晓庆

技术支持:朱浩淼

GESP第13次认证报名倒计时4天

GESP2026年3月认证报名倒计时4天,报名将于3月5日24点截止;点击登录CCF GESP网站(https://gesp.ccf.org.cn/)进行报名,欢迎学有余力的同学参加认证!

联系方式

1.GESP微信:关注“CCF GESP”公众号,点击"GESP小助手"即可交流。

2.GESP邮箱:gesp@ccf.org.cn

注:请在邮件中详细描述咨询的问题并留下考生的联系方式及姓名、身份证号,以便及时有效处理。

3.GESP电话:0512-67656856

咨询时间:周一至周五(法定节假日除外): 上午 8:30-12:00;下午 13:00-17:30

扫描下方二维码,关注GESP公众号了解更多资讯

最新文章

随机文章