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

GESP第七次认证真题解析|Python四级真题回顾

  • 2026-09-11 06:16:15
GESP第七次认证真题解析|Python四级真题回顾

点击上方蓝字·关注我们

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

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

本次为大家带来的是2024年9月份Python四级认证真题解析。

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

题号

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

答案

A

C

C

D

A

B

A

A

C

D

C

C

D

B

A

1、据有关资料,山东大学于1972年研制成功DJL-1计算机,并于1973年投入运行,其综合性能居当时全国第三位。DJL-1计算机运算控制部分所使用的磁心存储元件由磁心颗粒组成,设计存贮周期为2μs(微秒)。那么该磁心存储元件相当于现代计算机的( )。

A.内存

B.磁盘

C. CPU

D.显示器

答案:A

解析:DJL-1计算机使用的磁心存储元件是一种快速的存储设备,设计存储周期为2微秒,这与现代计算机的内存(RAM)功能相似。内存用于临时存储正在处理的数据和指令,因此是计算机系统中重要的组件。而磁盘主要用于长期存储数据,CPU则负责执行指令,显示器则用于输出信息。

2、IPv4版本的因特网总共有( )个A类地址网络。

A. 65000

B. 200万

C. 126

D. 128

答案:C

解析:在IPv4中,A类地址的网络范围是从1.0.0.0到126.0.0.0,共有126个可用的A类网络

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

A. [1, 2, 5, 6]

B. [1, 2, [3, 4]]

C. [1, 2, [3, 4, 5, 6]]

D. [1, 2, [3, 4, [5, 6]]]

答案:C

解析:代码中的my_list[2] 是对列表[3, 4] 的引用。使用extend([5, 6]) 方法后,会将[5, 6] 中的元素添加到这个子列表中,因此最终my_list 的内容变为[1, 2, [3, 4, 5, 6]]

4、执行下面Python代码后,会发生什么?( )

A. my_tuple变为(1, 2, (5, 6))

B.代码正常执行,没有变化

C.抛出ValueError异常

D.抛出TypeError异常

答案:D

解析:元组是不可变的,因此不能修改元组中的元素。当尝试通过my_tuple[2] = (5, 6)来更改元组中索引为2的元素时,会抛出TypeError 异常

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

A. 10#30#

B. 10#

C. 20#

D. 30#

答案:A

解析:int('a')会引发ValueError 异常,程序会跳转到except 块,并打印"10#"。由于发生了异常,else块不会执行。最后,finally块总是会执行,打印"30#"。所以输出结果是10#30#

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

A. 8

B. 10

C. 11

D. 15

答案:B

解析:代码中的列表推导式[num for num in range(n) if num % 2 == 0] 用于生成从0 到n-1 中所有偶数的列表。当n 为20 时,生成的偶数有0, 2, 4, 6, 8, 10, 12, 14, 16, 18,总共有10 个偶数。因此,func(20)的输出结果是10

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

A. HelloWorld

B. Hello World

C. "Hello" "World"

D.抛出异常

答案:A

解析:func接受可变数量的参数*args,并将这些参数连接成一个字符串。''.join(args)会将所有传入的字符串连接在一起,因此func('Hello', 'World') 的输出结果是HelloWorld

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

A. [1, 2, 3, 10, 10] [1, 2, 3, 10, 10]

B. [1, 2, 3] [1, 2, 3, 10]

C. [1, 2, 3, 10] [1, 2, 3, 10]

D. [1, 2, 3, 10] [1, 2, 3, 10, 10]

答案:A

解析:第一次调用func(lstA) 后,lstA变为[1, 2, 3, 10]。然后在print 语句中再次调用func(lstA),又会在lstA 末尾添加一个10,最终变为[1, 2, 3, 10, 10]。因此,输出为[1, 2, 3, 10, 10] [1, 2, 3, 10, 10]。注意:lst参数是可变参数类型。

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

A. (1, 2, 3, 5, 6, 5, 6) (1, 2, 3, 5, 6, 5, 6)

B. (1, 2, 3, 5, 6) (1, 2, 3, 5, 6)

C. (1, 2, 3) (1, 2, 3, 5, 6)

D. (1, 2, 3) (1, 2, 3)

答案:C

解析:在函数tpADD(tpl) 中,tpl作为参数被传入,原始的元组tp 不会被修改。【不可变参数类型】调用tpl = tpl + (5, 6) 创建了一个新的元组(1, 2, 3, 5, 6),但这个新元组并没有赋值回tp。所以第一次打印tp 时,输出仍然是原始元组(1, 2, 3)。第二次调用tpADD(tp) 返回的是新元组(1, 2, 3, 5, 6),因此输出结果为(1, 2, 3) (1, 2, 3, 5, 6)

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

A. 5#5#

B. 10#5#

C. 5#10#

D. 10#10#

答案:D

解析:当调用bar() 时,它会将全局变量x 设置为10。因此,在foo() 内部的print(x, end="#")输出10,然后当foo() 完成后,再次输出print(x, end="#")时,x仍然是10。所以最终的输出是10#10#

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

A. {'a': 1, 'b': 2}

B. {'b': 2}

C. {'a': 5, 'b': 2}

D.抛出异常

答案:C

解析:在函数func(d) 中,d['a'] = 5 将字典d 中的键'a' 的值修改为5。在func(c) 调用时,c是一个字典{'a': 1, 'b': 2}。调用后,c的内容变为{'a': 5, 'b': 2}。因此,最终输出结果为{'a': 5, 'b': 2}

12、以下Python代码实现的排序算法的时间复杂度是?( )

A. O(n)

B. O(2n)

C. O(n^2)

D. O(n^3)

答案:C

解析:这段代码实现的是选择排序算法。外层循环运行n-1 次,内层循环在最坏情况下运行n-i 次,总体的时间复杂度为O(n)+O(n−1)+O(n−2)+...+O(1)即O(n2)

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

A. [(1, 'apple'), (0, 'cherry'), (2, 'banana')]

B. [(2, 'banana'), (1, 'apple'), (0, 'cherry')]

C. [(0, 'cherry'), (1, 'apple'), (2, 'banana')]

D. [(1, 'apple'), (2, 'banana'), (0, 'cherry')]

答案:D

解析:sorted()函数根据元组的第二个元素进行排序。对于'apple', 'banana', 和'cherry',它们的排序顺序是'apple', 'banana', 'cherry',所以输出结果是[(1, 'apple'), (2, 'banana'), (0, 'cherry')]

14、假设你正在爬楼梯,每次可以爬1阶或2阶。给定楼梯的阶数n ,计算有多少种不同的方法可以爬到楼顶。 以下Python代码的横线处应该填写?( )

A. dp[i] = 2 * dp[i - 1] + dp[i - 2]

B. dp[i] = dp[i - 1] + dp[i - 2]

C. dp[i] = 2 * dp[i - 2]

D. dp[i] = dp[i - 1] + 2 * dp[i - 2]

答案:B

解析:为了到达第i 阶楼梯,你可以从第i-1 阶爬上来(方式为dp[i-1]),或者从第i-2 阶爬上来(方式为dp[i-2])。因此,总的方法数是这两者之和,即dp[i] = dp[i - 1] + dp[i - 2]

第15 题 文件numbers.txt的内容如下:

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

A. [15, 20]

B. [12, 15, 20, 8]

C. [5, 12, 7, 15, 20, 8]

D. [12, 15, 20]

答案:A

解析:代码读取numbers.txt文件中的每一行,将其转换为整数。它只会将大于threshold(即12)的数字添加到列表lst 中。在文件内容中,数字15

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

题号

1

2

3

4

5

6

7

8

9

10

答案

√

×

×

√

√

×

×

√

√

×

1、小杨最近开始学习C++编程,老师说C++是一门面向对象的编程语言,也是一门高级语言。( )

答案:正确

解析:C++是一门面向对象的编程语言,也是一门高级语言

2、在Python程序中,自定义函数可以定义在主程序代码的前面,也可以定义在主程序代码的后面,都不会发生错误。( )

答案:错误

解析:在Python中,函数必须在调用之前定义。如果你在调用一个函数之前没有定义它,程序会抛出NameError异常。因此,自定义函数必须在主程序代码中被调用之前进行定义,否则会发生错误

3、在Python程序中,如果自定义函数内没有return语句或者return语句不带任何返回值,那么该函数的返回值为False。

答案:错误

解析:在Python中,如果自定义函数没有return 语句或者return 语句不带任何返回值,函数的返回值是None,而不是False。None是一个特殊的值,表示“无值”或“空”。只有在函数中显式返回False 时,返回值才会是False

4、try-except-else-finally异常处理结构中,只有try程序段中的语句没有异常,else程序段中的语句才会得到执行。

答案:正确

解析:在try-except-else-finally结构中,try块中的代码如果没有发生异常,则会执行else 块中的代码。若try 块中发生了异常,则会跳过else 块,直接执行except 块。因此,只有当try 中的代码正常执行,没有抛出异常时,else中的语句才会被执行

5、Python中避免使用反斜线\ 指定文件路径时出错,如C:\test\numbers.txt ;常常使用正斜线/ 或者双反斜线\\ 。

答案:正确

解析:在Python中,反斜线\ 是转义字符,因此在文件路径中使用时可能会导致错误。

6、'w'可以作为open()函数的参数,表示以写的方式打开文件,若文件不存在,则会抛出异常。

答案:错误

解析:在Python中,使用'w' 作为open()函数的参数表示以写的方式打开文件。如果指定的文件不存在,open()不会抛出异常,而是会创建一个新文件。因此,使用'w' 模式打开文件时,如果文件不存在,它会自动创建该文件

7、下面这段程序的时间复杂度为线性阶O(n)。( )

答案:错误

解析:在while 循环中,条件是i^2 < n。这意味着循环会继续,直到i 的平方达到或超过n。因此,循环的次数是O(√n)而不是O(n)

8、对一组数据[5, 2, 6, 4, 8, 1, 7, 3]使用冒泡的方法按从大到小的顺序进行排序,则第2轮排序过后的结果是[6, 5, 8, 4, 7, 3, 2, 1]。

答案:正确

解析:对于数据[5, 2, 6, 4, 8, 1, 7, 3],在进行冒泡排序以从大到小的顺序排列时,第一轮排序结果为[5, 6, 4, 8, 2, 7, 3, 1],第二轮排序结果为[6, 5, 8, 4, 7, 3, 2, 1]

9、执行下面Python代码后,输出的结果为(0, 0)。

答案:正确

解析:第一行生成一个包含元组的列表,min函数会比较元组的第二个元素(即x**2)的绝对值。由于平方值都是非负的,最小值就是0,对应的元组是(0, 0)

10、在Python中表达式{1, 3, 5} & {2, 4, 6} == {} 的值为True。

答案:错误

解析:{1, 3, 5} & {2, 4, 6} == {} 的结果是False,由于空集 {} 与任何集合比较都返回 False,因此整个表达式的结果为 False。{1, 3, 5} & {2, 4, 6}将得到空的集合,而{}是字典

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

题号

1

2

答案



1、黑白方块

题面描述

小杨有一个n行m列的网格图,其中每个格子要么是白色,要么是黑色。小杨想知道网格图中是否存在一个满足如下条件的子矩形:

  • 子矩形由4行4列组成;

  • 子矩形的第1行和第4行只包含白色格子;

  • 对于子矩形的第2行和第3行,只有第1个和第4个格子是白色的,其余格子都是黑色的;

请你编写程序帮助小杨判断。

输入格式

第一行包含一个正整数t,代表测试用例组数。

接下来是t组测试用例。对于每组测试用例,一共+1行。

第一行包含两个正整数n,m,含义如题面所示。

之后n行,每行一个长度为m的01串,代表网格图第行格子的颜色,如果为0,则对应格子为白色,否则为黑色。

输出格式

对于每组测试用例,如果存在,输出Yes,否则输出No。

样例1

满足条件的子矩形形如:

对于全部数据,保证有1 ≤ t ≤ 10,1 ≤ n,m ≤ 100。

【解题思路】

定义二维列表,存储将要输入的网格数据;

将要匹配的模版矩形初始化,4X4的二维列表;

使用循环遍历网格数据中每一个可能的4X4子矩形,检查从位置(i,j)开始的子矩形是否与之前定义好的模版匹配

进行判断,输出结果

【参考程序】

2、区间排序

题面描述

小杨有一个包含n个正整数的序列a。

小杨计划对序列进行多次升序排序,每次升序排序小杨会选择一个区间[l,r],(l ≤ r)并对区间内所有数字,即ai, ai+1,..., ar进行升序排序。每次升序排序会在上一次升序排序的结果上进行。

小杨想请你计算出多次升序排序后的序列。

输入格式

第一行包含一个正整数n,含义如题面所示。

第二行包含几个正整数a1, a2,..., an,代表序列。

第三行包含一个正整数q,代表排序次数。

之后q行,每行包含两个正整数li,ri,代表将区间[li,ri]内所有数字进行升序排序。

输出格式

输出一行包含n个正整数,代表多次升序排序后的序列。

样例1

  • 第一次升序排序后,序列为[3,4,5,1,2];

  • 第二次升序排序后,序列为(3,4,1,5,2];

  • 第三次升序排序后,序列为[1,3,4,5,2];

对于全部数据,保证有1 ≤ n ≤ 100, 1 ≤ ai≤ 100,1 ≤ q ≤ 100,1 ≤ li≤ ri ≤ n。

【解题思路】

1. 将要排序的数据存储在列表中,初始化定义一个长度为1010的列表,尽可能大的数据,确保在输入规模较大的情况下不会越界

2. 定义排序方法对数据进行排序

3. 处理部分:

4. 存储输入数据

5. 处理需要进行排序的区间操作数q

6. 对选定的l,r区间范围内数据进行排序操作,调用之前定义好的排序方法

7. 输出结果(注意每个元素用空格分割,且最后一个元素没有空格)

【参考程序】

技术支持:郝利斌

策划: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公众号,了解更多资讯


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

最新文章

随机文章