
点击上方蓝字·关注我们




CCF编程能力等级认证,英文名Grade Examination of Software Programming(以下简称GESP),由中国计算机学会发起并主办,是为青少年计算机和编程学习者提供学业能力验证的平台。GESP覆盖中小学全学段,符合条件的青少年均可参加认证。GESP旨在提升青少年计算机和编程教育水平,推广和普及青少年计算机和编程教育。
GESP考察语言为图形化编程、Python编程及C++编程,主要考察学生掌握相关编程知识和操作能力,熟悉编程各项基础知识和理论框架,通过设定不同等级的考试目标,让学生具备编程从简单的程序到复杂程序设计的编程能力,为后期专业化编程学习打下良好基础。
本次为大家带来的是2024年12月Python三级认证真题解析。
一、单选题(每题2分,共30分)
|
题号 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
|
答案 |
C |
A |
C |
B |
A |
B |
D |
C |
B |
D |
A |
B |
B |
A |
D |
1、2024年10月8日,诺贝尔物理学奖“意外地”颁给了两位计算机科学家约翰·霍普菲尔德(John J. Hopfield)和杰弗里·辛顿(Geoffrey E. Hinton)。这两位科学家的主要研究方向是( )。
A.天体物理
B.流体力学
C.人工智能
D.量子理论
【参考答案】C
【问题解析】2024年10月8日,诺贝尔物理学奖确实授予了两位在计算机科学和人工智能领域做出重大贡献的科学家,这两位科学家的主要研究方向是基于人工神经网络实现机器学习的基础性发现和发明,两人的研究不仅跨越了传统学科界限,还将物理学工具应用于解决计算机科学问题,从而开启了机器学习的新纪元,并对多个领域产生了深远影响。
2、计算机系统中存储的基本单位⽤B来表⽰ ,⽐如某个照⽚⼤⼩为3MB,其中B代表的是( )。
A. Byte
B. Block
C. Bulk
D. Bit
【参考答案】A
【问题解析】MB是"Megabyte"的缩写,其中的"M"代表"Mega",表示10^6(一百万);而"B"则代表"Byte",字节是计算机中数据量的基本单位。1 MB(兆字节)等于1024×1024Byte或1024 KB(千字节)。
3、下列流程图的输出结果是? ( )

A. 12
B. 13
C. 14
D. 15
【参考答案】C
【问题解析】根据题目中i与k的关系无论走哪条分支,都会是i自增1,所以总的重复执行次数为6次。每次是ans增加n,判断j是否等于n,如果等于则j归0,n自增1,所以n为1是在ans上增加1次n,n为2是在ans上增加2次n,6次重复ans增长的是1、2、2、3、3、3,最终输出的ans = 14。
4、⼗六进制数2024转换为八进制数是? ( )
A. 3750
B. 20044
C. 11111101000
D. 10000000100100
【参考答案】B
【问题解析】将16进制数2024转换为8进制,可以考虑先从16进制转为10进制,再从10进制转换为8进制,也可以采用16进制和8进制与2进制之间的对应关系,先将16进制通过1分4的方法转换为2进制,再从2进制通过3合1的方法转换为8进制,最终的结果是20044。
5、执行print(10 ^ 3) 语句的输出结果是? ( )
A. 9
B. 10
C. 30
D. 1000
【参考答案】A
【问题解析】在Python中,^操作符并不用于执行幂运算,而是用于执行按位异或运算。因此,当执行print(10 ^ 3) 时,Python会将数字10和3视为二进制数,并对它们的每一位进行异或操作,也就是1010和0011做异或运算,结果为1001,最终输出9。
6、运行下列程序 ,输出结果是? ( )

A. [3, 6, 9, 12]
B. [2, 5, 8, 11]
C. [1, 4, 7, 10]
D.上述代码执⾏报错
【参考答案】B
【问题解析】根据题面给出的代码,首先使用列表生成式,生成一个包含从1到12的列表,然后使用切片输出列表,从下标为1开始,步长为3,第一个数字是2,三步后是5,然后是8、11,后面只剩下12,切片输出结束。
7、下列创建列表的⽅法中不正确的是( )
A. lst = [1, 2, '信息']
B. lst = [1]
C. lst = ['信息',]
D. lst = '⾳乐', '体育', '美术'
【参考答案】D
【问题解析】首先A选项是正确的,包含三个元素,B选项和C选项都是包含一个元素的列表,是否带逗号都是合法的形式,D选项是错误的,这种形式会创建一个元组而非列表,因此D选项错误。
8、运行下列程序,输出结果是?()

A. (4, 3, 2, 1)
B. (8, 6, 4, 2)
C. (4, 3, 2, 1, 4, 3, 2, 1)
D.上述代码执行报错
【参考答案】C
【问题解析】依据题面给出的程序,首先是tuple2这种形式是整数2而非元组里面一个元素2,因为单元素元组创建需要在单个元素的后面添加逗号,所以是tuple1乘以2的含义,会将元组tuple1里的内容重复两次,变为(4、3、2、1、4、3、2、1)。
9、关于字典的描述错误的是? ( )
A.字典查找和插⼊的速度极快 ,通常不会随着 key的增加⽽增加
B.可以通过字典的键找到对应的值 ,也可以通过值来找到对应的键
C.字典⾥⾯的值(不是键)可以包含列表和其它数据类型
D.字典的元素以键为索引进⾏访问
【参考答案】B
【问题解析】字典以键值对的形式进行查找和插入速度非常快,A选项正确;字典中的值可以是其他数据类型,比如列表,C选项正确;字典是通过键来作为索引找到对用的值,这也是为什么键不可以重复的原因,因此D选项正确,B选项错误。
10、下列关于字符串的描述正确的是? ( )
A.多个字符串不能进⾏连接
B.字符串是⼀个可变的序列
C. "Hello".find("l") 的结果是3
D.字符串是⽤⼀对双引号" "或者单引号' '括起来的零个或者多个字符
【参考答案】D
【问题解析】A选项错误,因为字符串通过+号即可连接;B选项错误,python中字符串是不可变的;C选项错误,在字符串Hello中查找字母l,返回的下标应该是2,而不是3;D选项是正确的,描述的是字符串的概念。
11、下列程序执⾏结果正确的是? ( )

A. {'杜'}
B. {'杜甫'}
C. {'杜牧'}
D. {'杜甫杜牧'}
【参考答案】A
【问题解析】在Python中,set()函数可以用于创建一个集合。当使用set()将字符串作为参数传入时,它会将字符串中的每个字符拆分开,作为集合中的元素(集合中的元素具有唯一性,重复的元素会被自动去除)。这里首先定义了x为通过set("杜甫")创建的集合,那么x集合中的元素就是"杜"和"甫";接着定义了y为通过set("杜牧")创建的集合,y集合中的元素就是"杜"和"牧"。
然后代码中使用&操作符,在Python的集合操作中,&表示求两个集合的交集,也就是找出同时存在于两个集合中的元素,杜字是同时存在。
12、向集合s = set() 中添加多个元素的⽅法是? ( )
A. add()
B. update()
C. extend()
D.利⽤ ( +=)运算符
【参考答案】B
【问题解析】A选项错误,add是向集合中添加单个元素的方法;B选项正确,update方法可以向集合中添加多个元素;C选项错误,这不是集合的方法,是向列表中添加多个元素的方法;D选项错误,集合不可以使用+=运算符号。
13、图书馆准备举办⼀次读书分享会 ,设计通知的过程中需要对⼀段⽂本进⾏编辑 ,⽂本由⼤⼩写英⽂字母和 英⽂标点符号组成 ,根据活动主题 ,需要将⽂本中⼩写字母'b'替换为⼤写字母'B'。有⼀点要注意:第⼀个和最后⼀ 个'b'不⽤替换 。请在下⾯程序空⽩处填上正确内容以实现程序功能。
A. s[x:]
B. s[x + 1:y]
C. s[x:y]
D. s[:y]
【参考答案】B
【问题解析】根据题目描述整个字符串中第一个b和最后一个b需要替换,所以需要避开找到的第一个b最后一个b,也就是x位置和y位置,切片应该从x+1开始到y结束,切片是不包含结束位置,所以写y是到y-1结束,所以选择B选项。
14、小杨想编写⼀个程序来统计⽇志⽂件中每种错误出现的次数 ,这样可以⽅便他快速定位问题 。他希望能够输⼊⼀段⽇志⽂件的内容后 ,程序就输出每种错误及其出现的次数 。请在下⾯程序空⽩处填上正确内容以实现程序功能。

A. ① error_count[error] += 1 ② error_count[error] = 1
B. ① error_count[error] = 1 ② error_count[error] += 1
C. ① error_count[error]++ ② error_count[error] = 1
D. ① error_count[error] = 1 ② error_count[error]++
【参考答案】A
【问题解析】题目是想要统计每种错误及出现的次数,根据已有的代码,可以发现是将错误名称作为键,出现的次数作为值保存在字典中。在遍历所有的错误时,如果该错误已经在字典中出现过,即表明我们之前已记录过该错误,此时我们需将其对应的出现次数增加1,error_count[error] += 1,没出现过需要往字典里增加这一项,并且把初始值设为1,即error_count[error] = 1。C选项不是Python增加的方法,所以选择A选项。
15、⼩杨想要编写⼀个程序来记录他每周的健⾝情况 。他希望在输⼊每天健⾝的时间后 ,能够查看⼀周内健⾝的总时间 。为了实现这个⽬标 ,请在下⾯程序空⽩处填上正确内容以实现程序功能。

A. gym_times
B. gym_times[:]
C. time for time in gym_times
D. int(time) for time in gym_times
【参考答案】D
【问题解析】根据题目已有代码,可以知道:依次输入每天的健身时间,保存到列表里,注意,通过input()输入的是字符串类型,这里直接把字符串类型保存到了列表里。下边通过sum()函数统计一周健身总时间,这里用到了一个列表推导式,它遍历gym_times列表中的每个元素time,并将其转换为整数类型int(time),再用sum()函数对列表推导式生成的新列表中的元素进行求和操作。A和B选项列表里都是字符串类型,C选项中遍历出的time是字符串类型,D选项有类型转换,所以选择D选项。
二、判断题(每题2分,共20分)
|
题号 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
|
答案 |
√ |
× |
× |
√ |
√ |
× |
√ |
√ |
× |
√ |
1、在Windows的资源管理器中为已有文件A建立副本的操作是Ctrl + C,然后Ctrl + V。( )
【参考答案】正确
【问题解析】Ctrl+C:这个快捷键在Windows操作系统中被广泛用作“复制”操作,当你选中一个文件或文本后,按下Ctrl+C,系统会将你选中的内容复制到剪贴板中。Ctrl+V:这个快捷键用于执行“粘贴”操作,在按下Ctrl+V后,系统会将剪贴板中的内容粘贴到你当前选中的位置,这样就能为文件A创建一个副本。故本题正确。
2、整数-8的16位反码可⽤⼗六进制表⽰为FFF8。
【参考答案】错误
【问题解析】对于一个n位的二进制数,其反码的计算方法是将原数的每一位取反(即0变为1,1变为0)。对于16位二进制数,-8的原码表示为:
原码:1000 0000 0000 1000(最高位为符号位,1表示负数)
反码的计算是将原码除符号位外的其他位取反,得到:
反码:1111 1111 1111 0111
将反码1111 1111 1111 0111 转换为十六进制,我们可以将二进制数按每4位一组进行分组:
1111 1111 1111 0111 可分为:1111 1111 1111 0111
将每组二进制数转换为十六进制:
1111对应F,1111对应F,1111对应F,0111对应7
所以-8的16位反码的十六进制表示为FFF7
因此,题目中说整数-8的16位反码可用十六进制表示为FFF8是错误的。
3、运⾏下列代码 ,输出的结果可能是 {1: '1 ', 2: '2 ', 3: '3 '} 。

【参考答案】错误
【问题解析】zip(a, b) 函数的作用是将可迭代对象a和b中的元素按顺序组合成元组,即( '1 ', 1), ( '2 ', 2), ( '3 ', 3)。当使用dict()函数将这些元组转换为字典时,会将元组中的第一个元素作为键,第二个元素作为值。列表a中的元素是字符串,列表b中的元素是整数。正确结果应该是{'1 ': 1, '2 ': 2, '3 ': 3}。故本题错误。
4、表达式 int( '13 ', 8) 的返回值是11。
【参考答案】正确
【问题解析】表达式int('13', 8),表示将八进制的字符串'13'转换为十进制的整数,即1 * 8^1 + 3 * 8^0=11。故本题正确。
5、Python代码 print([x for x in range(1, 11) if x % 2 == 1]) 被执⾏后 ,将得到从1到11所有的奇 数 ,不含11。
【参考答案】正确
【问题解析】本题使用了列表推导式,遍历range(1, 11) 中的每个元素x,并且使用if x % 2 == 1 条件筛选出满足条件的元素,即那些除以2余数为1的元素,也就是奇数。range(1, 11) 生成一个可迭代对象,包含从1开始到10的数字,是不包含11的,故本题正确。
6、Python代码print(f"{3.1415926:06.3f}")被执⾏后 ,输出为3.142。
【参考答案】错误
【问题解析】对于print(f"{3.1415926:06.3f}"):
06表示总长度为6位,不足的部分用0填充。
.3f表示将浮点数保留三位小数。
当执行该代码时:
首先将3.1415926四舍五入到三位小数,得到3.142。
然后考虑总长度为6位,由于3.142已经是5位,前面会填充一个0,得到03.142。
因此本题是错误的,正确的输出是03.142。
7、编写 Python 程序模拟⽯头剪⼑布游戏 ,数字 0 代表⽯头 ,数字 1 代表剪⼑ ,数字 2 代表布 ,⽯头胜剪⼑ ,剪 ⼑胜布 ,布胜⽯头 ,模拟玩家出拳可以使⽤下⾯的程序代码。

【参考答案】正确
【问题解析】random模块,提供了生成随机数的功能,使用random.randint(0, 2) 函数能够生成一个在0到2之间(包括0和2)的随机整数。是符合模拟玩家出拳(0或1或2)的需求的。故本题正确。
8、执⾏下列两段Python代码 ,输出的结果相同。

【参考答案】正确
【问题解析】第一段代码中,遍历lst列表中的每个元素item,对于每个元素item,检查它是否不在列表a中,如果不在,将其添加到列表a中,这是一种去重的方式,最终列表a中的元素不会重复,最后,使用sorted(a)对列表a进行排序并打印结果。
第二段代码中,使用set(lst)将lst列表转换为一个集合。集合的特性是元素不重复,因此会自动去除lst列表中的重复元素。然后,将集合转回列表list(set(lst))。最后,使用sorted()函数对列表进行排序并打印结果。
因此两段代码都能对列表元素去重并排序,得到相同结果[0, 1, 2, 3, 4, 5]。故本题正确。
9、在Python中 ,使⽤乘法运算符 *乘⼀个正整数可以对同⼀个字符串、列表、元组甚⾄是集合进⾏合并, 即以 下赋值语句都是合法的。

【参考答案】错误
【问题解析】对于字符串、列表和元组都可以使用乘法运算符*进行元素的重复操作。而对于集合,my_set = {10, 20, 30} * 3 是不合法的,集合是一种无序且不允许重复元素的数据结构,是不支持乘法运算符*进行元素重复操作的,这违背了集合的元素唯一性原则。故本题错误。
10、“⽔仙花数”是指⼀个三位数各位数字的⽴⽅和等于该数本⾝ ,求100到999之间的所有⽔仙花数并统计个 数 。可以使⽤枚举的⽅法来求解这个问题。
【参考答案】正确
【问题解析】枚举法的核心思想是将问题的所有可能的解一一列举出来,并对每个可能的解进行判断,以确定其是否满足问题的条件,最终找到满足条件的解或解的集合。求100到999之间的所有⽔仙花数,就可以通过枚举法遍历100到999之间的每一个数,将其拆分为百位、十位和个位数字,然后检查是否满足水仙花数。故本题正确。
三、编程题(每题25分,共50分)
|
题号 |
1 |
2 |
|
答案 |
1、数字替换
题目描述
小杨有一个包含π个数字的序列A,即A={a1,“.………,an},他想将其中大于k的数字都替换为序列的最大值,将其中小于k的数字都替换为序列的最小值,请你帮他计算出替换后的序列。
输入格式
第一行包含两个正整数n,k,含义如题面所示。
第二行包含几个数字,代表序列A。
输出格式
输出n个整数,代表替换后的结果。
样例

对于全部数据,保证有1≤n≤105,|k|,|ai|≤105。
【代码解析】根据题目要求,在接收数据完成后,首页先需要求出整个数组中的最大值和最小值,设定max_value和min_value,通过max和min函数求解出最大值和最小值,最后通过for循环进行遍历操作并且输出,如果大于K就对数进行重新赋值max_value,如果小于K就对数组重新赋值min_value,并且配合输出格式的要求空格,完成程序设计。
【参考代码】

2、打印数字
题目描述
小杨为数字0,1,2和3设计了一款表示形式,每个数字占用了5×5的网格。数字0,1,2和3的表示形式如下:

小杨想请你将给定的数字几转换为对应的表示形式。
输入格式
第一行包含一个正整数代表n。
输出格式
输出对应的表示形式。
样例

对于全部数据,保证有0≤n≤106,且n仅由数字0,1,2,3组成。
【代码解析】根据题目描述的任务要求,是要使用星号和点,来完成数字时钟样式的0 1 2 3这四个数字的表示,给定的数字N接收后,然后通过多条分支语句的嵌套,分情况绘制出对应数字每一行,例如数字0,只有第一行和最后一行全部都是点,其余的行是开头和结尾是点中间是星号,其他数字的绘制以此类推。需要注意的是程序是按行来绘制,将所有数字的第一行先绘制好,然后再绘制所有数字的第二行,并且是完成一行就输出一行,共循环五次 。
【参考代码】

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


点击此处 “阅读原文” 查看更多内容


