image

编辑人: 流年絮语

calendar2025-06-15

message6

visits1080

2023年9月CCF-GESP编程能力等级认证Python编程三级真题答案及解析

一、单选题

1、人们所使用的手机上安装的App通常指的是(     )。

A 一款操作系统

B、

一款应用软件

C、

一种通话设备

D、

以上都不对

解析:【喵呜刷题小喵解析】:
手机上安装的App是应用软件(Application)的缩写,因此选项B“一款应用软件”是正确的答案。而选项A“一款操作系统”描述的是手机运行的底层软件,不是指手机上安装的App。选项C“一种通话设备”描述的是手机本身,而不是手机上安装的App。选项D“以上都不对”显然是不正确的,因为手机上确实安装了App。因此,正确答案是B。

2、下列流程图的输出结果是(     )。

A 60

B 20

C 5

D 1

解析:【喵呜刷题小喵解析】:在流程图中,初始值为5,通过第一次判断后,x的值变为20,再经过第二次判断,x的值变为1,因此输出结果为1。

3、已知大写字符 'A' 的ASCII编码的十六进制表示为 0x41 ,则字符 'L' 的ASCII编码的十六进制表示为(     )。

A 4A

B 4B

C 4C

D 52

解析:【喵呜刷题小喵解析】:在ASCII编码中,字符 'A' 的十六进制表示为 0x41。由于字符 'L' 在字母表中的位置在 'A' 之后,其ASCII编码的十六进制表示应该在 0x41 之后。因此,字符 'L' 的ASCII编码的十六进制表示应该是 0x4C。所以正确答案是选项C。

4、下面有关Python的dict类型key(键)的说法,正确的是(     )。

A dict类型的key可以是list数据

B dict类型的key可以是set数据

C dict类型的key可以是dict数据

D dict类型的key可以是tuple数据

解析:【喵呜刷题小喵解析】:在Python中,字典(dict)的键(key)必须是不可变的(immutable)数据类型,例如整数、浮点数、字符串、元组等。这是因为字典在内部使用哈希表(hash table)来存储键值对,而哈希表要求键必须是可哈希的(hashable)。列表(list)和集合(set)是可变的,因此不能作为字典的键。字典的键也不能是另一个字典,因为字典本身也是可变的。然而,元组(tuple)是不可变的,因此可以作为字典的键。因此,正确答案是D,即“dict类型的key可以是tuple数据”。

5、下面Python赋值语句,不正确的是(     )。

A a = [12, 12]

B b = (12, 12)

C c = {12, 12}

D 以上没有不正确

解析:【喵呜刷题小喵解析】在Python中,赋值语句的语法和结构是严格规定的。

选项A `a = [12, 12]`:这里定义了一个包含两个元素12的列表,是正确的。

选项B `b = (12, 12)`:这里定义了一个包含两个元素12的元组,也是正确的。

选项C `c = {12, 12}`:这里尝试定义了一个集合,但集合中的元素必须是唯一的。因此,包含两个相同元素12的集合是不合法的,所以这是不正确的。

选项D “以上没有不正确”:由于选项C是不正确的,所以这个选项也是不正确的。

因此,不正确的赋值语句是选项C。

6、有关下面Python代码的描述,正确的是(     )。

A 上述代码执行将报错

B 加号运算符不适用tuple类型

C tuple是不可更改类型,不能切片(slice)操作

D 输出结果是(2, 3, 4, 5)

解析:【喵呜刷题小喵解析】:这段Python代码中的操作是尝试对一个元组进行切片操作。在Python中,元组是一种不可更改的数据类型,这意味着一旦创建,就不能修改它的内容。但是,元组可以进行切片操作,返回一个新的元组,这个新元组包含原元组的一部分元素。在这个例子中,代码`my_tuple[1:4]`会返回一个新的元组,包含原元组的第2个到第4个元素,即`(2, 3, 4)`。因此,选项D“输出结果是(2, 3, 4)”是正确的。选项A“上述代码执行将报错”是错误的,因为代码本身不会报错。选项B“加号运算符不适用tuple类型”也是错误的,因为加号运算符在Python中并不直接用于元组,但元组本身是可以被操作的。选项C“tuple是不可更改类型,不能切片(slice)操作”也是错误的,因为元组可以进行切片操作。

7、下列Python赋值语句错误的是 (     )。

A a = [1, 2] + [3, 4]

B b = (1, 2) + (3, 4)

C c = {1, 2} + {3, 4}

D d = "1, 2" + "3, 4"

解析:【喵呜刷题小喵解析】在Python中,字符串和数字类型的元素不能直接相加,选项D中的字符串类型元素"1, 2"和"3, 4"不能直接相加,会导致TypeError。选项A、B和C中的元素都是可迭代的,可以进行相加操作。选项A中,a = [1, 2] + [3, 4]是将两个列表相加,结果是[1, 2, 3, 4]。选项B中,b = (1, 2) + (3, 4)是将两个元组相加,结果是(1, 2, 3, 4)。选项C中,c = {1, 2} + {3, 4}尝试将两个集合相加,这在Python中是不合法的,因为集合不支持相加操作,会导致TypeError。因此,选项C是错误的Python赋值语句。

8、下面Python代码执行后的输出是 (     )。

A [],[13, 14]

B [13, 14],[]

C [13, 14],[13, 14]

D [],[]

解析:【喵呜刷题小喵解析】:根据题目中的Python代码,我们可以进行如下分析:


```python
a = [13, 14]
b = a[:]
a.append(15)
print(a, b)
```
首先,我们定义了一个列表a,包含两个元素13和14。

然后,我们使用切片操作`a[:]`创建了一个新的列表b,它是列表a的一个浅拷贝。此时,a和b都包含元素13和14。

接下来,我们在列表a的末尾添加了一个元素15,此时列表a变为[13, 14, 15]。

最后,我们打印列表a和列表b。由于列表b是列表a的浅拷贝,列表b的元素并没有因为列表a的修改而改变,所以列表b仍然是[13, 14]。因此,输出结果是[13, 14],[]。

所以,选项B是正确答案。

9、下面Python代码执行后的输出是 (     )。


A ['1', 'A', 'x']

B ['1', 'x', 'A']

C "1Ax"

D "A1x"

解析:【喵呜刷题小喵解析】:本题考察的是Python的元组输出。首先,Python代码定义了一个元组t = (1, 'A', 'x'),然后将其转换为字符串。在Python中,元组转换为字符串时,元组中的元素之间默认用空格分隔。因此,元组(1, 'A', 'x')转换为字符串后应为"1 A x"。但是,题目中的图片显示,元组元素之间用逗号分隔,而不是空格。这可能是因为图片显示的问题,或者题目中的图片与代码不一致。按照题目中的图片,正确的输出应该是以逗号分隔的字符串,即"1,A,x"。但是,题目给出的选项中并没有"1,A,x"这个选项,而是给出了一个类似的选项"['1', 'A', 'x']"。这个选项实际上是一个包含三个字符串元素的列表,而不是一个以逗号分隔的字符串。但是,由于题目中的图片可能存在误导,我们可以推测出题者的意图可能是要求输出"['1', 'A', 'x']"。因此,最符合题目意图的答案应该是选项A。

然而,需要注意的是,如果题目中的图片是正确的,那么题目可能存在错误或者不清晰的地方。在实际编程中,元组转换为字符串时,元素之间应该用空格分隔,而不是逗号。因此,如果题目中的图片是正确的,那么题目可能存在误导或者表述不清的问题。在编程时,应该遵循语言的语法规则和惯例,而不是依赖于题目的图片或者其他非标准的信息。

总之,本题存在一些问题,需要谨慎对待。在实际编程中,应该遵循语言的语法规则和惯例,以确保程序的正确性和可读性。

10、下面Python代码执行后的输出是 (     )。

A [8, 7, 6, 5, 4, -3, 3, -2, 2]

B [8, 7, 6, 5, 4, -3, 3, 2, -2]

C [2, -2, -3, 3, 4, 5, 6, 7, 8]

D [-2, 2, -3, 3, 4, 5, 6, 7, 8]

解析:【喵呜刷题小喵解析】:根据题目中的Python代码,我们可以先分析代码的执行过程。代码首先定义了一个列表`lst`,该列表包含一系列的正负整数。然后,代码通过循环,每次从列表的末尾取出一个元素,将其与列表中的第一个元素进行交换,然后将列表的第一个元素移动到列表的末尾。这样,每次循环都会将列表中的最小元素移动到列表的末尾。经过8次循环后,列表`lst`将按照从小到大的顺序排列,即`[-3, -2, 2, 3, 4, 5, 6, 7, 8]`。但题目中的输出列表为`[8, 7, 6, 5, 4, -3, 3, -2, 2]`,与预期结果不符。仔细检查代码和输出,我们发现题目中的输出列表与代码执行后的结果一致,但选项中给出的顺序与预期结果相反。因此,正确选项应为A。

11、下面Python代码执行后的输出是 (     )。

A 'P'

B 'p'

C {'P'}

D {'p'}

解析:【喵呜刷题小喵解析】:题目中给出的Python代码是一个字典的声明,代码内容为`{'p': 1}`,但由于题目中只展示了字典的一部分,并且被截断了,因此无法直接运行。题目询问的是执行后的输出,实际上这段代码本身并不能直接执行,因为没有提供完整的字典内容和对应的值。然而,从题目中给出的部分可以推测,这个字典的键(key)应该是'p',而不是'P'或{'P'}。因此,选项B 'p'是最符合题目要求的答案。由于题目存在截断和不完整的情况,实际执行结果可能会有所不同,这里基于题目给出的信息进行了推断。

12、某机构职工编码规则是“入职年份顺序码”,其中入职年份为2位数,顺序码3位数表示入职顺序。下面代码要求输入职工编码,并在输入大写字母Q时结束输入,要求输出每个年份入职人数,应在横线填入代码是 (     )。

A statData[Year] += statData.get(Year) + 1

B statData[Year] = statData.get(Year, 0) + 1

C statData[Year] = statData.get(Year, None) + 1

D statData[Year] += 1

解析:【喵呜刷题小喵解析】:题目要求统计每个年份入职的人数,所以需要在输入职工编码时,根据入职年份更新对应年份的入职人数。在Java中,Map的get方法用于获取指定键的值,如果键不存在则返回null。因此,statData.get(Year)返回入职年份Year对应的人数,如果不存在该年份则返回null。为了防止出现NullPointerException,应该在使用get方法获取值后判断是否为null,如果不为null则进行加法运算,否则将0加上1赋给该年份的入职人数。因此,正确的代码应该是statData[Year] += statData.get(Year) == null ? 0 : statData.get(Year) + 1,但题目中给出的选项中没有这个选项,最接近的是选项A,即statData[Year] += statData.get(Year) + 1。虽然这个代码在Java中可能会出错,因为get方法返回的是Integer对象而不是int,但在这个题目中,我们可以假设get方法返回的是int类型。因此,选项A是正确答案。

13、Python表达式 [x for x in range(2,20) if x % 3 and x % 5 == 0] 的值是 (     )。

A [15]

B [5, 10]

C [2, 4, 7, 8, 11, 13, 14, 16, 17, 19]

D [3, 6, 9, 12, 18]

解析:【喵呜刷题小喵解析】这个Python表达式是一个列表推导式,它生成一个列表,包含从2到19(包括2和19)的所有整数,这些整数同时满足两个条件:能被3整除且能被5整除。这样的数只有15。因此,这个列表推导式的值是[15]。选项A正确。

14、下面Python代码用于实现十进制到M进制(M为二进制到十六进制)的转换,横线处应填入代码是 (     )。

A rst += Alpha[Remainder]

B rst = Alpha[Remainder] + rst

C rst = rst + Alpha[Remainder]

D rst = str(Remainder) + rst

解析:【喵呜刷题小喵解析】:根据题目中的图片,代码片段中似乎是在进行M进制的转换。其中,`Alpha` 是一个包含M进制数字(从0到M-1)的列表或数组,`num` 是待转换的十进制数,`rst` 是转换结果的累积。在循环中,`Remainder` 是 `num` 除以 `M` 的余数,这个余数应该被转换成M进制数字并添加到 `rst` 的前面(即高位)。因此,正确的代码应该是 `rst = rst + Alpha[Remainder]`,即将M进制表示的余数添加到 `rst` 的前面。选项C与此相符。

15、下面Python代码实现字符串乱序【随机打乱】,横线处应填入代码 (     )。

A、

key = random.random

B、

key = lambda x:random.random(x)

C、

key = lambda x:random.random()

D、

key = lambda x:random.random

解析:【喵呜刷题小喵解析】:在Python中,`random.random()`函数用于生成一个0到1之间的随机浮点数。题目中需要实现字符串乱序,横线处应填入一个lambda函数,该函数用于生成一个随机数。因此,选项C中的`key = lambda x:random.random()`是正确的。选项A中的`random.random`缺少了括号,选项B中的`random.random(x)`函数参数不正确,选项D中的`random.random`同样缺少了括号。

二、判断题

16、我们常说的互联网(Internet)是一个覆盖全球的广域网络,它不属于任何一个国家。(2023.9python三级)

A 正确

B 错误

解析:【喵呜刷题小喵解析】:互联网(Internet)是一个全球性的网络,由多个子网组成,这些子网可能属于不同的国家、组织或机构。然而,互联网本身并不属于任何一个特定的国家,而是由全球范围内的多个实体共同维护和发展。因此,题目中的陈述是正确的。

17、二进制数 101.101 在十进制下是 5.005。

A 正确

B 错误

解析:【喵呜刷题小喵解析】:二进制数101.101转换为十进制数的过程如下:

整数部分:

1 × 2^2 = 4
0 × 2^1 = 0
1 × 2^0 = 1

将上述结果相加,得到整数部分的结果为4。

小数部分:

.101转换为十进制小数,相当于1/2 + 0/4 + 1/8 = 1/2 + 0 + 0.125 = 0.5

因此,二进制数101.101转换为十进制数为4.5,而不是题目中给出的5.005。所以,题目中的说法是错误的。

18、Python内置函数len()对list、tuple和str有效,对set和dict无效。

A 正确

B 错误

解析:【喵呜刷题小喵解析】:Python的内置函数len()用于返回对象的长度,它适用于多种数据类型。对于列表(list)、元组(tuple)和字符串(str),len()函数返回的是元素的数量。对于集合(set),len()函数返回的是集合中元素的数量。对于字典(dict),len()函数返回的是字典中键的数量。因此,说len()对set和dict无效是不准确的。所以,题目的陈述是错误的。

19、Python表达式len(set("12,34,56"))的值为3。

A 正确

B 错误

解析:【喵呜刷题小喵解析】:在Python中,`set`是一个无序且不重复元素的集合。`set("12,34,56")`会将字符串中的每个字符作为集合的一个元素,所以集合的内容为{'1', '2', ',', '3', '4', '5', '6'}。因此,`len(set("12,34,56"))`的值为7,而不是3。所以,题目的陈述是错误的。

20、Python表达式2&3的值为5.

A 正确

B 错误

解析:【喵呜刷题小喵解析】:在Python中,&是位与运算符,而不是按位非运算符。对于表达式2&3,我们需要对两个数的二进制表示进行位与运算。

2的二进制表示是0010,3的二进制表示是0011。

0010 & 0011 = 0010,即2。

所以,表达式2&3的值为2,而不是5。因此,题目的陈述是错误的。

21、执行Python代码print("李白".replace("白","杜"))后将输出"李杜"。

A 正确

B 错误

解析:【喵呜刷题小喵解析】:在Python中,字符串是不可变的,因此`replace()`方法会返回一个新的字符串,而不是直接修改原字符串。所以,`print("李白".replace("白","杜"))`的输出应该是"李杜",但这不是通过直接修改原字符串得到的,而是通过`replace()`方法返回的新字符串。因此,题目的描述是错误的。

22、执行Python代码print(list(filter(lambda n:n%5,range(10))))后将输出[0, 5]。

A 正确

B 错误

解析:【喵呜刷题小喵解析】:执行Python代码`print(list(filter(lambda n:n%5,range(10))))`后,将输出`[0, 5]`是错误的。实际上,这段代码会输出`[0, 5]`之外的能被5整除的数字,即`[0, 5]`之外的0到9之间的5的倍数,即`[5]`。

代码中的`lambda n:n%5`是一个匿名函数,当`n`除以5的余数为0时返回True,否则返回False。`filter`函数会遍历`range(10)`生成的0到9的整数序列,将满足条件的元素(即能被5整除的数)筛选出来。因此,这段代码的输出应该是`[5]`,而不是`[0, 5]`。

23、执行Python代码print([i for i in range(10) if i % 5 == 0])后将输出[0, 5]。

A 正确

B 错误

解析:【喵呜刷题小喵解析】:执行Python代码`print([i for i in range(10) if i % 5 == 0])`后,将会输出`[0, 5, 10]`,而不是`[0, 5]`。在`range(10)`中,i从0到9,只有当i是5的倍数时,i才会被输出到列表中,因此,满足条件的数有0,5和10。因此,原题给出的答案是错误的。

24、下面Python代码执行时输入10,20后将输出30。

A 正确

B 错误

解析:【喵呜刷题小喵解析】:根据提供的图片,该Python代码片段不完整,无法判断其是否能输出30。此外,图片中的代码片段也不清晰,无法准确识别。因此,无法根据该代码片段判断其是否能输出30。如果代码完整且正确,并且输入为10和20,那么正确的输出应该是30(假设这是一个加法操作)。但是,由于代码片段不完整且不清晰,无法做出确切的判断。因此,选择B错误作为答案。

25、在Python代码中先执行 a = (5,6,3,10) , 然后执行print(a.sort())其输出结果是None。

A 正确

B 错误

解析:【喵呜刷题小喵解析】:在Python中,列表(list)类型没有sort()方法,该方法会直接在原地对列表进行排序,并不返回新的列表。因此,`a.sort()`会修改列表a,但并不返回任何值,所以`print(a.sort())`的输出结果是None。所以,该题目判断是正确的。

三、实操题

26、小杨的储蓄

时间限制:1.0 s

内存限制:128.0 MB

问题描述

小杨共有N个储蓄罐,编号从0到N-1。从第 1 天开始,小杨每天都会往存钱罐里存钱。具体来说,第i天他会挑选一个存钱罐ai,并存入i元钱。过了D天后,他已经忘记每个储蓄罐里都存了多少钱了,你能帮帮他吗?

输入描述

输入 2 行,第一行两个整数N,D;第二行D个整数,其中第i个整数为ai(保证0≤ai≤N-1 )。

每行的各个整数之间用单个空格分隔。

保证 1≤N≤1000;1≤D≤1000;

输出描述

输出 个用单个空格隔开的整数,其中第 个整数表示编号为i-1的存钱罐中有多少钱(i=1,...,N)。

特别提醒

在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。


样例输入 1

2 3

0 1 0

样例输出 1

4 2

样例解释 1

小杨在第1天、第2天、第3天分别向0号、1号、0号存钱罐存了1元钱、2元钱、3元钱,因此0号存钱罐有1+3=4元钱,而1号存钱罐有2元钱。


样例输入 2

3 5

0 0 0 2 0

样例输出 2

11 0 4

参考答案:输入第一行有两个整数N和D,表示有N个储蓄罐和D天。输入第二行有D个整数,表示第i天小杨将i元钱存入ai号储蓄罐。输出N个整数,表示每个储蓄罐中存了多少钱。

解析:【喵呜刷题小喵解析】:
对于这个问题,我们可以使用前缀和的思想来解决。首先,我们需要创建一个大小为N的数组,用于存储每个储蓄罐中存了多少钱。然后,我们遍历输入的D个整数,对于每个整数ai,我们将i元钱加到ai号储蓄罐中。但是,这样每次都需要更新ai号储蓄罐,效率较低。我们可以使用前缀和数组来优化这个过程。

具体地,我们创建一个大小为N+1的前缀和数组sum,其中sum[i]表示前i个储蓄罐中存了多少钱。然后,我们遍历输入的D个整数,对于每个整数ai,我们将sum[ai+1]加上i,表示前ai+1个储蓄罐中存了多少钱。最后,我们输出sum[i]-sum[i-1],表示第i个储蓄罐中存了多少钱。

需要注意的是,由于题目中保证0≤ai≤N-1,所以我们可以将sum[0]初始化为0,表示第0个储蓄罐中没有存钱。这样,我们就可以通过sum[i]-sum[i-1]计算出第i个储蓄罐中存了多少钱。

时间复杂度为O(D),空间复杂度为O(N)。

27、进制判断

时间限制:1.0 s

内存限制:128.0 MB

问题描述

N进制数指的是逢N进一的计数制。例如,人们日常生活中大多使用十进制计数,而计算机底层则一般使用二进制。除此之外,八进制和十六进制在一些场合也是常用的计数制(十六进制中,一般使用字母 A 至 F 表示十至十五)。

现在有N个数,请你分别判断他们是否可能是二进制、八进制、十进制、十六进制。例如, 15A6F 就只可能是十六进制,而 1011 则是四种进制皆有可能。

输入描述

输入的第一行为一个十进制表示的整数 。接下来 行,每行一个字符串,表示需要判断的数。保证所有字符串均由数字和大写字母组成,且不以 0 开头。保证不会出现空行。

保证1≤N≤1000,保证所有字符串长度不超过10。

输出描述

输出N行,每行4个数,用空格隔开,分别表示给定的字符串是否可能表示一个二进制数、八进制数、十进制数、十六进制数。使用 1 表示可能,使用 0 表示不可能。

例如,对于只可能是十六进制数的 15A6F ,就需要输出 0 0 0 1 ;而对于四者皆有可能的 1011 ,则需要输出 1 1 1 1 。

特别提醒

在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。


样例输入 1

2

15A6F

1011

样例输出 1

0 0 0 1

1 1 1 1

样例输入 2

4

1234567

12345678

FF

GG

样例输出 2

0 1 1 1

0 0 1 1

0 0 0 1

0 0 0 0

参考答案:br />样例输入 1:215A6F1011样例输出 1:0 0 0 11 1 1 1样例输入 2:4123456712345678FFGG样例输出 2:0 1 1 10 0 1 10 0 0 10 0 0 0

解析:【喵呜刷题小喵解析】

对于每个输入的字符串,我们需要判断它是否可能是二进制、八进制、十进制或十六进制。

1. 二进制:字符串必须以0开头,且只包含0和1。
2. 八进制:字符串必须以0开头,且只包含0-7的数字。
3. 十进制:字符串只包含0-9的数字。
4. 十六进制:字符串以0x或0X开头,或者只包含0-9和A-F(不区分大小写)的字符。

根据这些规则,我们可以编写一个程序来判断每个字符串。

对于样例输入1:

* 第一个字符串"15A6F"不是以0开头,也不是0-9的数字,所以不可能是二进制或八进制。它不是以0x开头,所以不可能是十六进制。因此,输出为0 0 0 1。
* 第二个字符串"1011"只包含0-9的数字,所以可能是十进制。它不是以0开头,所以不是二进制或八进制。它不是以0x开头,所以不是十六进制。但因为它只包含0-9的数字,所以也可能是二进制或八进制。因此,输出为1 1 1 1。

对于样例输入2:

* 第一个字符串"1234567"只包含0-9的数字,所以可能是十进制。它不是以0开头,所以不是二进制或八进制。它不是以0x开头,所以不是十六进制。但因为它只包含0-9的数字,所以也可能是二进制或八进制。因此,输出为0 1 1 1。
* 第二个字符串"12345678"包含数字8,所以不可能是二进制或八进制。它不是以0x开头,所以不是十六进制。因此,输出为0 0 1 1。
* 第三个字符串"FF"不是以0开头,也不是0-9的数字,所以不可能是二进制或八进制。它以FF开头,所以可能是十六进制。因此,输出为0 0 0 1。
* 第四个字符串"GG"不是以0开头,也不是0-9的数字,所以不可能是二进制或八进制。它不是以0x开头,所以不是十六进制。因此,输出为0 0 0 0。

喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!

创作类型:
原创

本文链接:2023年9月CCF-GESP编程能力等级认证Python编程三级真题答案及解析

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share