2025年03月CCF编程能力等级认证Python四级试卷
1 单选题(每题2分,共30分)
1) 2025年春节有两件轰动全球的事件,一个是DeepSeek横空出世,另一个是贺岁片《哪吒2》票房惊人,入了全球票房榜。下面关于DeepSeek与《哪吒2》的描述成立的是( )。




查看答案
2) 对整型变量N,如果它能够同时被3和5整出,则输出 N是含有至少两个质因数 。如果用流程图来描述处理过程,则输出语句应该在哪种图形框中( )。




查看答案
3) 执行下面Python代码后,输出的结果是?( )

lst = [{'num': i} for i in range(3)]
lst[1]['num'] = 99
print(lst)





查看答案
4) 执行下面Python代码后,输出的结果是?( ) 
keys = ['a', 'b']
values = [[1], (2,)]
d = {k: v for k, v in zip(keys, values)}
d['a'].append(3)
print(d['a'])




查看答案
5) 执行下面Python代码后,输出的结果是?( )

def append_value(value, container=[]):
    container.append(value)
    return container

result1 = append_value(1)
result2 = append_value(2)
result3 = append_value(3, [])
print(result1, result2, result3)





查看答案
6) 以下哪个函数调用是合法的?( )

def func(a, b, c=0):
    print(a + b + c)





查看答案
7) 执行下面Python代码后,输出的结果是?( )

def swap(a, b):
    a, b = b, a
    return a, b

x, y = 1, 2
swap(x, y)
print(x, y)





查看答案
8) 执行下面Python代码后,输出的结果是?( )

def outer():
    n = 0

    def inner():
        nonlocal n
        n += 1
        return n

    return inner

f = outer()
print(f(), f(), f())





查看答案
9) 以下哪个函数调用会返回 [2, 4, 6]?( )

def process(lst, func):
    return [func(x) for x in lst]

nums = [1, 2, 3]





查看答案
10) 执行下面Python代码时,哪条调用会报错?( )

def func(a, *, b, c):
    pass





查看答案
11) 一只青蛙要跳上 n 级台阶。它每次可以跳1阶、2阶或3阶。下列代码可以计算青蛙有多少种不同的跳跃方式可以到达第 n 阶,其中横线处填写的代码是?( )
def jump_ways(n):
    if n <= 3:
        return [0, 1, 2, 4][n] 
    dp = [0] * (n + 1)
    dp[1], dp[2], dp[3] = 1, 2, 4
    for i in range(4, n + 1):
        dp[i] = _______________
    return dp[n]




查看答案
12) 下列代码可将24小时制的"HH:MM"时间字符串转换为从午夜(00:00)开始经过的总分钟数(注:此分钟数为正整数),其中横线处填写的代码是?( )
time_str = "8:30"
h, m = map(__________) # 横线在map的参数部分
total_min = h * 60 + m
print(total_min) # 应输出510




查看答案
13) 以下代码实现了哪种排序算法?( )

def sort(arr):
    for i in range(len(arr) - 1):
        min_idx = i
        for j in range(i + 1, len(arr)):
            if arr[j] < arr[min_idx]:
                min_idx = j
        arr[i], arr[min_idx] = arr[min_idx], arr[i]





查看答案
14) 以下代码的作用是?( )

with open(r"data.txt") as f:
    while True:
        line = f.readline()
        if not line:
            break
        print(line, end="")





查看答案
15) 执行下面Python代码后,输出的结果是?( )
def test():
    try:
        return "A"
    finally:
        return "B"

print(test())




查看答案
2 判断题(每题2分,共20分)
16) C++、Python都是高级编程语言,它们每条语句的执行最终都要通过机器指令来完成。( )

查看答案
17) 下列程序用于统计字符串中元音字母(a, e, i, o, u)的数量。

s = "hello world"
vowels = "aeiou"
count = sum(1 for c in s if c in vowels)
print(count)


查看答案
18) 在函数定义中, **kwargs 必须位于参数列表的最后。( )

查看答案
19) 执行下面Python代码后,调用函数func可以得到一个列表类型的数据。

def func():
    return [1, 2],

result = func()
print(type(result))


查看答案
20) Python代码尝试以读取模式("r")打开不存在的文件会引发 FileNotFoundError 异常。

查看答案
21) 下面这段程序的时间复杂度为平方阶O(n2) 。

def func(n):
    for i in range(n):
        for j in range(n):
            print(i, j)


查看答案
22) 对5个不同的数据元素进行直接插入排序,最多需要比较9次。

查看答案
23) 执行下面Python代码,会触发SyntaxError异常,但不会输出 Error 。

try:
    print("Hello"
except SyntaxError:
    print("Error")


查看答案
24) Python中允许在同一个 with 语句中打开多个文件。

with open('a.txt', 'r') as f1, open('b.txt', 'w') as f2:
    data = f1.read()
    f2.write(data)


查看答案
25) 执行下面Python代码后,会输出 [4, 6] 。

print(list(map(sum, zip([1, 2], [3, 4]))))


查看答案
3 编程题(每题25分,共50分)
26) 编程题
试题名称:荒地开垦
时间限制:3.0 s
内存限制:512.0 MB
【题面描述】
小杨有一大片荒地,可以表示为一个 n行 m列的网格图。
小杨想要开垦这块荒地,但荒地中一些位置存在杂物,对于一块不存在杂物的荒地,该荒地可以开垦当且仅当其上下左右四个方向相邻的格子均不存在杂物。
小杨可以选择至多一个位置,清除该位置的杂物,移除杂物后该位置变为荒地。小杨想知道在清除至多一个位置的杂物的情况下,最多能够开垦多少块荒地。
【输入格式】
第一行包含两个正整数 n,m,含义如题面所示。
之后 n行,每行包含一个长度为 m且仅包含字符 . 和 # 的字符串。如果为 . ,代表该位置为荒地,如果为 # ,代表该位置为杂物。
【输出格式】
输出一个整数,代表在清除至多一个位置的杂物的情况下,最多能够开垦的荒地块数。
【样例】
输入样例1
3 5
.....
.#..#
.....
输出样例1
11
样例解释
移除第二行从左数第二块空地的杂物后:
第一行从左数前 4块荒地,第二行从左数前 3块荒地,第三行从左数前 4块荒地,均可开垦, 4 + 3 + 4 = 11。
【数据范围】
对于全部数据,保证有 1<=n, m<1000。
查看答案
27) 编程题
时间限制:3.0 s
内存限制:512.0 MB

二阶矩阵
【题目描述】
小 A 有一个 n行 m列的矩阵 A。
小 A 认为一个 2 x 2的矩阵D是好的,当且仅当 D1,1 x D2,2 = D1,2 x D2.1。其中 Di,j表示矩阵D 的第 i行第 j列的元素。
小 A 想知道 A中有多少个好的子矩阵。
【输入格式】
第一行,两个正整数 n, m。
接下来 n行,每行 m个整数 Ai,1、Ai,2、... Ai,m。
【输出格式】
一行,一个整数,表示 A中好的子矩阵的数量。
【样例】
输入样例 1
3 4
1 2 1 0
2 4 2 1
0 3 3 0
输出样例 1
2
样例解释
样例中的好的子矩阵如下:

【数据范围】
对于所有测试点,保证 1<=n,1<=m<=500 ,-100<=Ai,j<=100 。
查看答案