GESP2025年09月Python六级试卷

从PDF导入:GESP2025年09月Python六级试卷

Python 180分钟 总分 100.0 27 题
试卷题目预览
第1题 中级 2.0分 单选
关于Python类的说法,错误的是( )。
A. 构造方法(__init__)不能声明为虚方法,但析构方法(__del__)可以
B. 函数参数传递的是对象的引用,不会复制对象
C. 静态方法属于类、不属于对象,因此不能使用对象.方法(...)的形式调用静态方法
D. 当派生类对象被销毁时,不会自动调用基类的__del__()
第2题 中级 2.0分 单选
下面代码执行结果是( )。

class Vehicle:
def __init__(self, brand):
self._brand = brand
def move(self):
print(f"{self._brand} is moving...")
class Car(Vehicle):
def __init__(self, brand, seat_count):
super().__init__(brand)
self._seat_count = seat_count
def move(self):
print(f"{self.get_brand()} car is driving on the road!")
v1 = Car("Toyota", 5)
v1.move()

A. Toyota is moving...
B. Toyota car is driving on the road!
C. 编译错误
D. 运行结果不确定
第3题 中级 2.0分 单选
下面代码中v1和v2调用了相同接口move(),但输出结果不同,这体现了面向对象编程的( )特性。

class Vehicle:
def __init__(self, brand):
self._brand = brand # 私有属性用下划线表示
def set_brand(self, brand):
self._brand = brand
def get_brand(self):
return self._brand
def move(self):
print(f"{self._brand} is moving...")
class Car(Vehicle):
def __init__(self, brand, seat_count):
super().__init__(brand)
self._seat_count = seat_count
def show_info(self):
print(f"This car is a {self.get_brand()} with {self._seat_count} seats.")
def move(self):
print(f"{self.get_brand()} car is driving on the road!")
class Bike(Vehicle):
def __init__(self, brand):
super().__init__(brand)
def move(self):
print(f"{self.get_brand()} bike is cycling on the path!")
def main():
v1 = Car("Toyota", 5)
v2 = Bike("Giant")
v1.move() # 输出: Toyota car is driving on the road!
v2.move() # 输出: Giant bike is cycling on the path!
if __name__ == "__main__":
main()

A. 继承 (Inheritance)
B. 封装 (Encapsulation)
C. 多态 (Polymorphism)
D. 链接 (Linking)
第4题 中级 2.0分 单选
栈的操作特点是( )。
A. 先进先出
B. 先进后出
C. 随机访问
D. 双端进出
第5题 中级 2.0分 单选

循环队列常用于实现数据缓冲。假设一个循环队列容量为 5 (即最多存放 4 个元素,留一个位置区分空与满),依次进行操作:入队数据1,2,3,出队1个数据,再入队数据4和5,此时队首到队尾的元素顺序是( )。

A. [2, 3, 4, 5]
B. [1, 2, 3, 4]
C. [3, 4, 5, 2]
D. [2, 3, 5, 4]
第6题 中级 2.0分 单选
以下函数createTree()构造的树是什么类型?

class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
def create_tree():
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
return root

A. 满二叉树
B. 完全二叉树
C. 二叉排序树
D. 其他都不对
第7题 中级 2.0分 单选
已知二叉树的中序遍历是[D, B, E, A, F, C],先序遍历是[A, B, D, E, C, F]。请问该二叉树的后序遍历结果是( )。
A. [D, E, B, F, C, A]
B. [D, B, E, F, C, A]
C. [D, E, B, C, F, A]
D. [B, D, E, F, C, A]
第8题 中级 2.0分 单选
完全二叉树可以用数组连续高效存储。如果节点从1开始编号,则对有两个孩子节点的节点i,( )。
A. 左孩子位于2i,右孩子位于2i+1
B. 完全二叉树的叶子节点可以出现在最后一层的任意位置
C. 所有节点都有两个孩子
D. 左孩子位于2i+1,右孩子位于2i+2
第9题 中级 2.0分 单选

设有字符集 {a, b, c, d, e, f} ,其出现频率分别为 {5, 9, 12, 13, 16, 45} 。哈夫曼算法构造最优前缀编码,以下哪一组可能是对应的哈夫曼编码?(非叶子节点左边分支记作 0,右边分支记作 1,左右互换不影响正确性)。

A. a: 00;b: 01;c: 10;d: 110;e: 111;f: 0
B. a: 1100;b: 1101;c: 100;d: 101;e: 111;f: 0
C. a: 000;b: 001;c: 01;d: 10;e: 110;f: 111
D. a: 10;b: 01;c: 100;d: 101;e: 111;f: 0
第10题 中级 2.0分 单选
下面代码生成格雷编码中,gray_code的目的是生成所有的长度为n位的格雷码,则横线上应填写( )。

def gray_code(n):
if n == 0:
return ["0"]
if n == 1:
return ["0", "1"]
prev = gray_code(n-1)
result = []
for s in prev:
____________________________
for i in range(len(prev)-1, -1, -1):
result.append("1" + prev[i])
return result

A. result.append("1" + s)
B. result.append("0" + s)
C. result.append("s" + 0)
D. result.append("0" + 0)
第11题 中级 2.0分 单选
请将下列树的深度优先遍历代码补充完整,横线处应填入( )。

class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
def dfs(root):
if not root:
return
_________________________
stack.append(root)
while stack:
node = stack.pop()
print(node.val, end=" ")
if node.right:
stack.append(node.right)
if node.left:
stack.append(node.left)

A. vector=[]
B. list=[]
C. queue=[]
D. stack = []
第12题 中级 2.0分 单选
令n是树的节点数目,下列代码实现了树的广度优先遍历,其时间复杂度是( )。

from collections import deque
def bfs(root):
if not root:
return
q = deque()
q.append(root)
while q:
node = q.popleft()
print(node.val, end=" ")
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)

A. O(1)
B. O(log n)
C. O(n)
D. O(n²)
第13题 中级 2.0分 单选
在二叉搜索树中查找元素50,从根结点开始:若根值为60,则下一步应去( )。
A. 左子树
B. 右子树
C. 随机
D. 根结点
第14题 中级 2.0分 单选
删除二叉排序树节点时,如果节点有两个孩子,则横线处应填入( ),其中 findMax 和 findMin 分别为 找树的最大值和最小值。

def find_min(node):
current = node
while current and current.left:
current = current.left
return current
def delete_node(root, key):
if not root:
return None
if key < root.val:
root.left = delete_node(root.left, key)
elif key > root.val:
root.right = delete_node(root.right, key)
else:
if not root.left:
return root.right
elif not root.right:
return root.left
else:
temp = find_min(____________)
root.val = temp.val
root.right = delete_node(root.right, temp.val)

A. root.left
B. root.left.right
C. root.right
D. root.right.left
第15题 中级 2.0分 单选

给定 个物品和一个最大承重为 的背包,每个物品有一个重量 和价值 ,每个物品只能选择放或不放。目标是选择若干个物品放入背包,使得总价值最大,且总重量不超过 ,则横线上应填写( )。
def knapsack(W, wt, val, n):
dp = [0] * (W + 1)
for i in range(n):
for w in range(W, wt[i] - 1, -1):
_____________________________
return dp[W]

A. dp[w] = max(dp[w], dp[wt[i]] + val[i])
B. dp[w] = max(dp[w], dp[w - wt[0]] + val[i])
C. dp[w] = max(dp[w], dp[w + wt[i]] - val[i])
D. dp[w] = max(dp[w], dp[w - wt[i]] + val[i])
第16题 中级 2.0分 判断
在Python中,类的方法默认是"虚函数",派生类只要重写方法。如果想复用基类逻辑时,可显式调用基类对应的函数。( )
T. 正确
F. 错误
第17题 中级 2.0分 判断
哈夫曼编码是最优前缀码,且编码结果唯一。( )
T. 正确
F. 错误
第18题 中级 2.0分 判断
一个含有n个结点的完全二叉树,高度为⌈log₂(n+1)⌉。( )
T. 正确
F. 错误
第19题 中级 2.0分 判断
栈的pop操作返回栈顶元素并移除它。( )
T. 正确
F. 错误
第20题 中级 2.0分 判断
循环队列通过模运算循环使用空间。( )
T. 正确
F. 错误
第21题 中级 2.0分 判断
一棵有n个结点的二叉树一定有n-1条边。( )
T. 正确
F. 错误
第22题 中级 2.0分 判断
以下代码实现了二叉树的中序遍历,输入二叉树,中序遍历结果是4 2 5 1 3 6。( )

# 1
# / \
# 2 3
# / \ \
# 4 5 6
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
def inorder_iterative(root):
stack = []
curr = root
while curr or stack:
while curr:
stack.append(curr)
curr = curr.left
curr = stack.pop()
print(curr.val, end=" ")
curr = curr.right

T. 正确
F. 错误
第23题 中级 2.0分 判断
下面代码实现的二叉搜索树的查找操作时间复杂度是O(h),h为树高。( )

def searchBST(root, val):
while root and root.val != val:
root = root.left if val < root.val else root.right
return root

T. 正确
F. 错误
第24题 中级 2.0分 判断
下面代码实现了动态规划版本的斐波那契数列计算,其时间复杂度是O(n)。( )

def fib_dp(n):
if n <= 1:
return n
dp = [0] * (n + 1)
dp[0] = 0
dp[1] = 1
for i in range(2, n + 1):
dp[i] = dp[i - 1] + dp[i - 2]
return dp[n]

T. 正确
F. 错误
第25题 中级 2.0分 判断
有一排香蕉,每个香蕉有不同的甜度值。小猴子想吃香蕉,但不能吃相邻的香蕉。以下代码能找到小猴子吃到最甜的香蕉组合。( )

def find_selected_bananas(bananas, dp):
selected = []
i = len(bananas) - 1
while i >= 0:
if i == 0:
selected.append(0)
break
if dp[i] == dp[i-1]:
i -= 1
else:
selected.append(i)
i -= 2
selected.reverse()
print("小猴子吃了第:", end="")
for idx in selected:
print(idx + 1, end=" ")
print("个香蕉")
def main():
bananas = [1, 2, 3, 1]
if not bananas:
return
n = len(bananas)
dp = [0] * n
dp[0] = bananas[0]
if n > 1:
dp[1] = max(bananas[0], bananas[1])
for i in range(2, n):
dp[i] = max(bananas[i] + dp[i-2], dp[i-1])
find_selected_bananas(bananas, dp)
if __name__ == "__main__":
main()

T. 正确
F. 错误
第26题 中级 25.0分 编程
划分字符串

时间限制:3.0 s 内存限制:512.0 MB
问题描述:小A有一个由n个小写字母组成的字符串s。他希望将s划分为若干个子串,使得子串中每个字母至多出现一次。例如,对于字符串street来说,str+e+e+t是满足条件的划分;而s+tree+t不是,因为子串tree中e出现了两次。
额外地,小A还给出了价值a,表示划分后长度为k的子串价值为a_k。小A希望最大化划分后得到的子串价值之和。你能帮他求出划分后子串价值之和的最大值吗?

【输入格式】
第一行,一个正整数n,表示字符串的长度。第二行,一个包含n个小写字母的字符串s。第三行,n个正整数a,表示不同长度的子串价值。
【输出格式】
一行,一个整数,表示划分后子串价值之和的最大值。
【样例】
样例输入:
6
street
2 1 7 4 3 3
样例输出:
13
第27题 中级 25.0分 编程
货物运输v

A 国有n 座城市,依次以 1,2....,n编号,其中1 号城市为首都。这 座城市由n-1 条双向道路连接,第 i条道路(1≤i现在 A 国需要从首都向各个城市运送货物。具体来说,满载货物的车队会从首都开出,经过一座城市时将对应的货物送出,因此车队需要经过所有城市。A 国希望你设计一条路线,在从首都出发经过所有城市的前提下,最小化经过的道路长度总和。注意一座城市可以经过多次,车队最后可以不返回首都。

【输入格式】
第一行,一个正整数n,表示A国的城市数量。接下来n-1行,每行三个整数u,v,w,表示一条双向道路连接编号为u和v的两座城市,道路长度为w
【输出格式】
一行,一个整数,表示你设计的路线所经过的道路长度总和。
【样例】
样例输入:
4
1 2 6
1 3 1
3 4 5
样例输出:
18
💬