Python四级
2025年09月
一、单选题(每题2分,共30分)
题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
答案 | D | C | B | B | C | B | A | C | D | D | B | C | C | B | A |
第1 题 人工智能现在非常火 ,小杨就想多了解一下 ,其中就经常听人提到“大模型” 。那么请问这里说的“大模型”最贴切是指 ( )。
A.大电脑模型
B.大规模智能
C.智能的单位
D.大语言模型
【答案】D
【考纲知识点】人工智能基础概念
【解析】“大模型” 在 AI 领域特指 “大语言模型”,可实现自然语言理解与生成等复杂任务。A “大电脑模型” 无此概念,B “大规模智能” 表述模糊,C “智能的单位” 不符合定义,故D 正确。
第2 题 在TCP协议中 ,完成连接建立需要通过( )握手。
A. 一次
B. 二次
C. 三次
D. 四次
【答案】C
【考纲知识点】TCP协议基础
【解析】TCP协议通过 “三次握手” 建立可靠连接:①客户端发请求,②服务器确认,③客户端再确认。一次(A)、二次(B)握手无法保证可靠性,四次(D)握手用于断开连接,故C 正确。
第3 题 执行下面Python代码后 ,输出的结果是? ( )
A. (1 , [2 , 3 ] , 4 )
B. (1 , [2 , 3 , 5 , 6 ] , 4 )
C. (1 , [2 , 3 , [5 , 6 ]] , 4 )
D. 报错
【答案】B
【考纲知识点】元组与列表特性
【解析】Python中元组不可变,但内部可变元素(如列表)可修改。t[1]是列表[2,3],extend([5,6])会将元素追加到列表,元组最终为(1, [2,3,5,6], 4)。A未体现修改,C错误使用extend,D无报错,故 B正确。
第4 题 执行下面Python代码后 ,输出的结果是? ( )

A. [1 ]
B. [1 , 3 ]
C. 报错
D. ( 'a ' , [1 , 3 ])
【答案】B
【考纲知识点】字典与列表引用
【解析】列表data转字典d时,键'a'对应列表[1](字典存列表引用)。d['a'].append(3)会修改原列表,故data[0][1]变为[1,3]。A未体现修改,C无报错,D格式错误,故 B正确。
第5 题 以下哪种函数定义是正确的? ( )
A. def func(a=1 , b , *args) :pass
B. def func(a , b=2 , **kwargs , *args) :pass
C. def func(a , *args , b=2 , **kwargs) :pass
D. def func(**kwargs , *args , a ) :pass
【答案】C
【考纲知识点】函数参数定义顺序
【解析】Python函数参数需遵循 “位置参数→*args→默认参数→**kwargs”顺序。A默认参数在位置参数前,B**kwargs在*args前,D**kwargs在最前,均错误;C顺序正确,故 C正确。
第6 题 执行下面Python代码后 ,输出的结果是? ( )

A. [1 ] [2 ]
B. [1 ] [1 , 2 ]
C. [1 ] [2 , 1 ]
D. 报错
【答案】B
【考纲知识点】函数默认参数特性
【解析】函数默认参数(可变类型如lst=[])赋值于定义时,多次调用共享该列表。第一次func(1)列表为[1],第二次func(2)列表为[1,2]。A未体现共享,C追加顺序错,D无报错,故 B正确。
第7 题 执行下面Python代码后 ,输出的结果是? ( )

A. 6
B. (1 , 2 , 3 )
C.报错
D. 123
【答案】A
【考纲知识点】元组解包操作
【解析】*values将元组(1,2,3)拆分为demo的三个参数,函数返回1+2+3=6。B未解包报参数错,C无报错,D是字符串拼接,故 A正确。
第8 题 下列有关函数内修改全局变量描述正确的是? ( )
A.函数内部可以直接修改任何全局变量
B.函数内部无法修改全局变量,只能读取
C.需要使用global关键字声明后才能修改全局变量
D.需要使用nonlocal关键字声明后才能修改全局变量
【答案】C
【考纲知识点】全局变量修改
【解析】函数内部默认无法修改全局变量,需用global声明后才可修改。A “直接修改” 错,B “无法修改” 绝对,Dnonlocal用于嵌套函数,故C 正确。
第9 题 下列有关Python处理异常的说法正确的是? ( )
A. 每一个try 模块只能设定一个except 模块。
B. finally 模块仅在 try模块中没有异常发生时才会执行。
C. else 模块会在 except模块之后,finally模块之前执行。
D.异常处理可以弥补程序漏洞 ,使得程序在一些情况下不会终止运行。
【答案】D
【考纲知识点】异常处理机制
【解析】A一个try可配多个except,Bfinally无论有无异常都执行,Celse仅try无异常时执行且表述不严谨;D异常处理可避免程序终止,正确,故D 正确。
第10 题 为了安全地打开并读取一个文件 ,确保即使发生异常 ,文件也能被正确关闭 ,最佳做法是? ( )
A.将 file .close() 放在 try 块的最后一行。
B. 将file .close() 放在except 块中。
C. 将file .close() 放在else 块中。
D.使用with open('file .txt ') asf:语句。
【答案】D
【考纲知识点】文件上下文管理器
【解析】:with语句自动管理文件资源,异常时也会关闭文件。A、B、C均可能导致资源泄漏,D是最佳做法,故 D正确。
第11 题 文件votes.txt内容如下:

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

A. [ 'Alice ' , 'Bob ' , 'Alice ' , 'Charlie ' , 'Bob ' , 'Alice ' , 'Alice ' ]
B. { 'Alice ' : 4 , 'Bob ' : 2 , 'Charlie ' : 1}
C. {4 , 2 , 1}
D. { 'Alice ' , 'Bob ' , 'Charlie '}
【答案】B
【考纲知识点】文件读取与字典统计
【解析】函数读取votes.txt,用字典统计姓名次数:Alice4次、Bob2次、Charlie1次,返回统计字典。A是文件内容列表,C是值集合,D是键集合,故 B正确。
第12 题 以下代码的时间复杂度是? ( )

A. (1)
B. O(n)
C. O(n²)
D. o(logn)
【答案】C
【考纲知识点】时间复杂度分析
【解析】代码含两层嵌套循环,外层n次、内层n次,总执行次数n×n,时间复杂度为O(n²)。A为O(1)、B为O(n),D为O(logn),故C 正确。
第13 题 下面代码采用递推算法来计算斐波那契数列f(n) = f(n 1) + f(n 2) ,则横线上应填写? ( )

A. a = b + a
B. a , b = a + b , a
C. a , b = b , a + b
D. b = a + b
【答案】C
【考纲知识点】斐波那契递推
【解析】斐波那契递推需更新a为前b、b为前a+b。A仅更新a,B不满足,D仅更新b,均错误;C更新正确,故 C正确。
第14 题 以下是Python冒泡排序(由小到大) 的优化版本 ,加入了提前终止机制 。划线处应填入? ( )

A. True False
B. False True
C. True break
D. False continue
【答案】B
【考纲知识点】优化版冒泡排序
【解析】优化冒泡排序需初始化swapped=False(标记是否交换),交换时设swapped=True。A初始True误判,Cbreak位置错,Dcontinue无法终止,故B 正确。
第15 题 执行下面Python代码后 ,输出的结果是? ( )

A. [ 'Date ' , 'cherry ' , 'banana ' , 'Apple ' ]
B. [ 'Apple ' , 'banana ' , 'cherry ' , 'Date ' ]
C. [ 'date ' , 'cherry ' , 'banana ' , 'apple ' ]
D. [ 'apple ' , 'banana ' , 'cherry ' , 'date ' ]
【答案】A
【考纲知识点】sorted函数排序
【解析】key=str.lower按小写排序,reverse=True降序。小写顺序apple<banana<cherry<date,降序对应原字符串为['Date', 'cherry', 'banana', 'Apple']。B是升序,C、D修改原字符串,故 A正确。
二、判断题(每题2分,共20分)
题号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
答案 | × | √ | √ | √ | × | √ | × | × | × | √ |
第1 题 在集成开发环境里调试程序时 ,要注意不能修改源程序, 因为如果修改 ,就要终止调试、关闭该文件并重新打开 ,才能再次开始调试 。 ( )
【答案】×
【考纲知识点】集成开发环境基本操作
【解析】在大多数现代集成开发环境中,支持 “动态调试”—— 即调试过程中修改源程序后,无需终止调试、关闭并重新打开文件,只需进行 “重新编译” 或 “热更新” 操作,就能继续调试。题目中描述的 “修改后必须终止调试、关闭文件并重新打开才能再次调试” 不符合主流 IDE 的实际功能,因此该说法错误。
第2 题 执行下面Python代码后 ,输出的结果为 qu 。
【答案】×
【考纲知识点】列表的基本使用
【解析】首先,data['numbers'].pop(-2)会从列表 [10, 20, 30] 中移除倒数第二个元素(即20),并返回20。然后,data["title"] += str(20) 使得data['title'] 变为'quiz20'。最后,data['title'][:-2]是对字符串切片,取从开头到倒数第3 个字符(因为[:-2]表示不包含最后两个字符),即'quiz',而非'qu'。因此,题目中说输出结果为qu是错误的。
第3 题 执行下面代码后 ,输出的结果为5。
【答案】×
【考纲知识点】字典
【解析】对于字典d = {'a': 3, 'b': 5, 'c': 1},max(d, key=lambda k: d[k]) 的作用是根据字典的值来选取对应的键。
这里lambda k: d[k] 表示以 “键对应的字典值” 作为比较依据,字典中值最大的是5,对应的键是'b',所以代码输出的是'b',而非5。因此,题目中说输出结果为5 是错误的,答案应为 “×”。
第4 题 在 Python中,如果一个函数没有执行到任何return语句 ,或者 return语句后没有指定返回值 ,Python解释器会默认让函数返回None 。
【答案】√
【考纲知识点】python基础语法
【解析】在Python中,函数的返回值有明确规则:当函数没有return语句,或return后未指定返回值时,Python解释器会默认让该函数返回None,这是Python 的语法规定,因此该说法正确。
第5 题 执行下面Python代码会抛出ValueError 异常。
【答案】×
【考纲知识点】异常的机制
【解析】要解析这道题,我们看代码逻辑:len()函数用于获取序列(如字符串、列表等)的长度,而123 是整数类型,不是len() 能处理的序列类型,执行len(123) 会抛出TypeError(类型错误),而非ValueError(值错误)。因此题目说法错误,答案为 “×”。
第6 题 若文件log.txt已存在 ,执行以下代码后文件内容被清空 ,仅保留 New log entry 。
【答案】√
【考纲知识点】文件的写入模式
【解析】在Python 中,以"w"(写入模式)打开文件时,如果文件已存在,会先清空原有内容,然后再写入新内容。代码中以"w" 模式打开log.txt,并写入 “New log entry”,因此文件原有内容会被清空,仅保留新写入的内容,该说法正确。
第7 题 以下代码的空间复杂度是 O(n) 。
【答案】√
【考纲知识点】空间复杂度
【解析】要解析这道题,我们从空间复杂度的定义出发:空间复杂度是指算法运行过程中临时占用的存储空间大小。
在函数create_dict(n) 中,循环会向字典my_dict 中插入n 个键值对,字典占用的存储空间与n 成正比,因此其空间复杂度为O(n),该说法正确。
第8 题 递推算法必须存在至少一个初始值 ,这是递推算法能够启动和正确运行的基础。
【答案】√
【考纲知识点】递推算法
【解析】递推算法的核心是通过已知的初始值,按照递推关系逐步推导后续结果。如果没有初始值,递推就失去了起点,无法启动和正确运行,因此递推算法必须存在至少一个初始值,该说法正确。
第9 题 选择排序和插入排序的平均时间复杂度都是 O(n2), 因此它们的效率在任何情况下都完全相同。
【答案】×
【考纲知识点】选择排序插入排序的时间复杂度
【解析】虽然选择排序和插入排序平均时间复杂度都是O (n²),但插入排序在接近有序的序列中效率更高(可达到O (n)),而选择排序时间复杂度始终是O (n²),所以它们的效率并非在任何情况下都相同,该说法错误。
第10 题 你收集了一些咖啡馆的信息 ,存储在字典 coffee_shops中, 以下代码可以筛选出所有评分(rating )高于4.5 且距离( distance )在1 公里以内的咖啡馆。
【答案】√
【考纲知识点】字典,函数式编程
【解析】代码通过filter 函数结合lambda 表达式,筛选出rating > 4.5 且distance < 1.0 的咖啡馆字典,逻辑符合题目要求,因此说法正确。
三、编程题(每题25分,共50分)
3.1编程题1
试题名称:排兵布阵
时间限制:1.0 s
内存限制:512.0 MB
3.1.1 题目描述
作为将军,你自然需要合理地排兵布阵。地图可以视为n行m列的网格,适合排兵的网格以1标注,不适合排兵的网格以0标注 。现在你需要在地图上选择一个矩形区域排兵,这个矩形区域内不能包含不适合排兵的网格。请问可选择的矩形区域最多能包含多少网格?
3.1.2 输入格式
第一行,两个正整数n, m ,分别表示地图网格的行数与列数。
接下来n行 ,每行m个整数ai, 1 , ai,2, … , ai,m,表示各行中的网格是否适合排兵。
3.1.3 输出格式
一行,一个整数,表示适合排兵的矩形区域包含的最大网格数。
3.1.4 样例
3.1.4.1 输入样例1
3.1.4.2 输出样例1
3.1.4.3 输入样例2
3.1.4.4 输出样例2
3.1.5 数据范围
对于所有测试点,保证1≤n,m≤12,0≤ai,j≤1。
3.1.6 参考程序
【题目大意】在n行m列网格(1适合排兵,0不适合)中,找全为1的矩形区域,求最大网格数(面积= 行数×列数),数据范围n,m≤12。
【考纲知识点】二维数组遍历,暴力枚举
【题目解析】这道题是要在n行m列的网格地图里,找一个只包含适合排兵的网格(标记为1)的矩形区域,求这个区域最多能包含的网格数。解题思路是枚举所有可能的矩形区域,然后验证每个区域是否合法,最后找出面积最大的合法矩形。具体来说,我们可以通过确定矩形的左上角顶点(用行号u和列号l表示)和右下角顶点(用行号d和列号r表示,其中d不小于u,r不小于l),来枚举所有可能的矩形范围。对于每个枚举到的矩形,遍历其内部所有网格,检查是否全为1,如果是,就计算这个矩形的面积(行跨度乘以列跨度,即(r - l + 1)×(d - u + 1)),并不断更新最大面积。因为题目中n和m都不超过12,所以这样的枚举方式效率是足够的,能在规定时间内找到答案。比如输入样例里,最终找到的最大矩形是2行2列的,面积为4。
3.2 编程题 2
试题名称:最长连续段
时间限制:1.0 s
内存限制:512.0 MB
3.2.1 题目描述
对于k 个整数构成的数组[b1, b2,
, bk],如果对1 ≤ i < k都有bi+1= bi+ 1 ,那么称数组b 是一个连续段。
给定由n 个整数构成的数组[a1, a2, … , an],你可以任意重排数组a中元素顺序。请问在重排顺序之后,a所有是连续段的子数组中,最长的子数组长度是多少?
例如,对于数组[1 , 0, 2, 4],可以将其重排为[4, 0, 1 , 2],有以下10个子数组:
[4] , [0] , [1] , [2] , [4, 0] , [0, 1] , [1 , 2], [4, 0, 1] , [0, 1 , 2] , [4, 0, 1 , 2]
其中除[4, 0] , [4, 0, 1] , [4, 0, 1 , 2] 以外的子数组均是连续段, 因此是连续段的子数组中,最长子数组长度为3。
3.2.2 输入格式
第一行,一个正整数n,表示数组长度。
第二行,n个整数a1, a2, … , an,表示数组中的整数。
3.2.3 输出格式
一行,一个整数,表示数组 重排顺序后,所有是连续段的子数组的最长长度。
3.2.4 样例
3.2.4.1 输入样例1
3.2.4.2 输出样例1
3.2.4.3 输入样例2
3.2.4.4 输出样例2
3.2.5 数据范围
对于 40%的测试点,保证1≤n≤8。
对于所有测试点,保证1≤n≤105,-109≤ ai≤109。
3.2.6 参考程序
【题目大意】数组可任意重排,求重排后“连续段子数组”(元素依次+ 1)的最长长度,数据范围n≤10⁵,a_i范围[-10⁹,10⁹]。
【考纲知识点】数组排序,连续序列统计
【题目解析】这道题是要找出数组重排后最长的连续段子数组长度。连续段的定义是数组中后一个数比前一个数大1。解题思路是先对数组排序,然后遍历排序后的数组,统计连续递增(每次加1)的序列长度。具体来说,先将数组排序,这样相同的数会相邻,递增的序列也能按顺序排列。然后从第一个数开始,依次判断当前数是否是前一个数加1,如果是,连续长度加1;如果不是,就重新开始计数,同时不断更新最大的连续长度。比如样例中的数组排序后是0、1、2、4,其中0、1、2是连续递增的,长度为3,这就是最长的连续段长度。