2024 年 3 月青少年软件编程 Python 等级考试试卷四级真题(含答案和解析)
分数: 100 题数: 38
一、单选题 ( 共 25 题,共 50 分 ) 。
1. 运行如下代码,若输入整数 3 ,则最终输出的结果为?()
def f(x):
if x==1:
s=1
else:
s=f(x-1)*x
return s
n=int(input(" 请输入一个大于 1 的整数: "))
print(f(n)+f(n-1))
A. 2
B. 4
C. 8
D. 16
标准答案: C 。
试题解析:由于 f(3)=f(2)*3,f(2)=f(1)*2,f(1)=1, 所以 f(3)+f(2)=6+2=8 。
2. 运行下列程序,输出的结果是?()
def fun(x):
if x > 3:
return x * fun(x-1)
else:
return
x print(fun(6))
A. 120
B. 360
C. 720
D. 60
标准答案: B 。
试题解析:递归函数求解,根据递归函数 6*5*4*3=360 。
3. 下列关于递归的描述不正确的是?()
A. 递归函数一定包含 if 语句。
B. 递归函数体内一定包含调用自身的语句。
C. 在调用自身函数时需要明确的边界终止条件与边界值。
D. 递归算法一般代码简洁,执行效率高,空间复杂度低。
标准答案: D 。
试题解析:递归算法一般代码简洁,易于理解,但执行效率较低,空间复杂度高。
4. 运行下列程序,输出的结果是?()
def fun(a, n):
s = 0
for i in range(1, n+1):
temp = str(a)*i
s += int(temp)
return s
print(fun(1, 3))
A. 3
B. 6
C. 12
D. 123
标准答案: D 。
试题解析:递推函数求解,本题是求 1+11+111 之和。
5. 运行下列程序,输出的结果是?()
def fun(a, b):
s = 0
a = a[::-1]
for i in range(len(a)):
s += int(a[i])*b**i
return s
print(fun('45', 16))
A. 69
B. 45
C. 64
D. 61
标准答案: A 。
试题解析:递推函数求解,本题是根据一个字符串和进制,转换成对应的十进制。
6. 一个荷花池,第一天荷花开放得很少,第二天开放的数量是第一天的两倍,
之后的每一天,荷花都会以前一天两倍的数量开放。如果到第 30 天,荷花就开
满了整个池塘,设第一天开一朵,编程求第 30 天共开了多少朵荷花。下面空白
处的代码填写正确的是?()
s = 0
t = 1
for i in range(1,
①
):
s += t
②
print(s)
A. 30, t = t*2
B. 31, t = t*2
C. 31, t+=2
D. 30, t*=2
标准答案: B 。
试题解析:递推函数求解,本题递推关系是 t = t*2, 循环次数是 30 次。
7. 解决下列问题时,时间复杂度最大的是?()
A. 输入 n 个不同的包含两位小数的实数,计算这 n 个数的和。
B. 在 n 个数据中,查找数据 k 。
C. 将 n 个数据用冒泡排序实现排序。
D. 计算算式 1-2+3-4+...-n 的结果, n 为偶数。
标准答案: C 。
试题解析:算法优化。
8. 以下关于分治算法的描述正确的是?()
A. 各个子问题既相互独立又相互联系
B. 问题可以分解成若干个规模较小的相同问题
C. 可以直接对问题进行求解
D. 子问题的解不能合并成原问题的解
标准答案: B 。
试题解析:分治算法的特征,各个子问题相互独立,子问题的求解可以合并成原
问题的解。
9. 下列选项中哪一项使用了分治算法?()
A. 二分搜索
B. 选择搜索
C. 插入搜索
D. 顺序搜索
标准答案: A 。
试题解析:二分查找体现了分治算法。
10. 不超过 20 个元素的降序数列,使用对分查找能找到指定的元素,可能的查
找次数不包括?()
A. 3
B. 4
C. 5
D. 6
标准答案: D 。
试题解析: int(log220)+1=5 。
11. 下面程序段的输出结果是?()
def add_Run(L=None):
if L is None:
L = ['Lying']
else:
L.append('Run')
return L
add_Run()
print(add_Run())
print(add_Run(['Lying']))
A. ['Lying']
['Run']
B. ['Lying']
['Lying']
['Lying', 'Run']
C. ['Lying']
['Lying', 'Run']
D. []
['Lying', 'Run']
标准答案: C 。
试题解析: if 分支定义列表, else 分支添加列表元素。
12. 下面关于计数器的程序,输出结果正确的是?()
count = 0
def increment():
global count
count += 1
print(" 计数器的值: ", count)
increment()
increment()
increment()
A. 计数器的值: 1
计数器的值: 2
计数器的值: 3
B. 计数器的值: 0
计数器的值: 1
计数器的值: 2
C. 计数器的值: 1
计数器的值: 1
计数器的值: 1
D. 计数器的值: 3
标准答案: A 。
试题解析:在函数内部可以通过关键字 global 来定义全局变量。
13. 下列程序段的输出结果是?()
L = []
x = 3
def
test(x):
L.append(x)
x = 5
test(x)
print('L = {}, x = {}'.format(L, x))
A. L = [3], x = 3
B. L = [5], x = 5
C. L = [3], x = 5
D. L = 3, x = 5
标准答案: A 。
试题解析:函数内部定义变量 x 的值为 5 ,只能作用于函数内部。
14. 以下程序,运行程序输出结果正确的是?()
def demo(x):
return x*2
print(demo(demo(1)))
A. return
None
B. 2
C. 4
D. 8
标准答案: C 。
试题解析:调用二次, 1 乘以二次 2 ,因此结果为 4 。
15. Python 使用下列哪个函数接收用户输入的数据?()
A. accept()
B. input()
C. print()
D. login()
标准答案: B 。
试题解析:在 Python 中 , 用于获取用户输入的函数是 input() 。
16. 下面程序段的输出结果正确的是?()
def power():
x ='python'
y = 'world'
z = x + " " + y
return z
print(power())
A. z
B. x + " " + y
C. python world
D. python" "world
标准答案: C 。
试题解析:该函数作用为连接字符串。
17. 下列关于 Python 函数的描述中,不正确的是?()
A. 自定义函数时用到的关键字是 def 。
B. 在 python 函数中,至少有一条 return 语句。
C. 函数 print ()可以一次输出多个参数,如 print('1',"2",3,[4]) 。
D. 用函数 eval ()可以用于求字符串里表达式的值,如 eval ( '3+5-1' )。
标准答案: B 。
试题解析:函数可以有返 回 值, 也 可以 没 有返 回 值。需要返 回 值的函数,可以包
含一条 或者 多条 return 语句 ;没 有返 回 值的函数,不需要包含 return 语句。
18. 关于以下代码的描述中,正确的是?()
# 求两个正 方形 的面 积差
def MianJiCha(a,b):
s=a**2-b**2
return s
a=5
b=10
c=MianJiCha(b,a)+a
A. 代码运行后,变量 c 的值是 80 。
B. 函数 名 是 MianJiCha(a,b) 。
C. 可以用 MianJiCha(100) 的 形 式调用此函数。
D. 代码运行时会 报错 。
标准答案: A 。
试题解析: s=10**2-5**2+5=100-25+5=80 。
19. 下列关于 Python 函数的 说 法中, 错误 的是?()
A. 利 用函数可以降低编程复杂度, 增 加代码可 读性 。
B. 函数可以 重 复调用。
C. 函数可以降低 修改 代码的 工 作量。
D. 调用函数时,每次都 必须 输入相同的参数值。
标准答案: D 。
试题解析:有 些 函数需要输入参数 才 能调用,有 些 不需要。需要输入参数的函数
在多次调用时, 允许 输入合法的不同参数。这 也 正是函数可复用的实现 形 式。
20. 下列选项中,调用下列代码定义的函数时,程序会 报错 的是?()
def ShuChu(a,b,c):
print(c,b,a)
A. ShuChu('1','2','3')
B. ShuChu('1','2','3,4')
C. ShuChu(1,2,3)
D. ShuChu(1,2,3,4)
标准答案: D 。
试题解析:在使用位 置 实参的 方 式 传 值时, 传 入的实参个数 必须 与 形 参相同, 否
则运行程序会 报错 。
21. 下列选项中,调用以下代码定义的函数时,程序会 报错 的是?()
def kp(a,b,c):
print(a,b,c)
A. kp(1,b=2,3)
B. kp(a=3,b=1,c=2)
C. kp(1,2,3)
D. kp(1,b=2,c=3)
标准答案: A 。
试题解析:在函数调用时, 采 用位 置 实参与关键字实参 混 合 传 入参数时,位 置 实
参 必须 放在关键字实参之前。
22. 下列代码的输出结果是?()
>>>s=lambda m,n:m*n
>>>s(6,6)
A. 6
B. 6,6
C. 36
D. 12
标准答案: C 。
试题解析: 匿名 函数中,冒 号 前面是参数列表,冒 号 后面是函数的返 回 值。
m=6,n=6,s=m*n=6*6=36 。
23. 以下函数定义 错误 的选项是?()
A. def aFunc(m,n):
print(m,n)
B. def aFunc(m,n=2):
print(m,n)
C. def aFunc(*m,n):
print(m,n)
D. def aFunc(m,*n):
print(m,n)
标准答案: C 。
试题解析: *m 表 示 是可变参数,可 传 入值的个数不确定。可变参数只能放在不
可变参数的后面,不 然 解 释 器将不能 识别 哪 些 值 传给 可变参数,哪 些 值 传给 不可
变参数。
24. 用于 安装 Python 第 三方库 的 工具 是?()
A. install
B. pip
C. Wheel
D. setup
标准答案: B 。
试题解析: pip 是 Python 自 带 的第 三方库 的 安装工具 。
25. 编程时,如果只需要 导 入 某 第 三方库 中的 某 个成 员 ,需要使用到的关键字是?
()
A. from
B. as
C. into
D. inport
标准答案: A 。
试题解析: 导 入 外 部模 块 的 某 个成 员 ,使用 from 关键字。
二、 判断 题 ( 共 10 题,共 20 分 ) 。
26. 若 某 个问题既能用递归算法求解,又能用递推算法求解,则使用递归 方 法求
解 更容 易,效率 也 高得多。()
标准答案: 错误 。
试题解析:递归求解效率要低。
27. 如下代码因为递归的边界条件设 置错误 , 产生 了 无限 递归程序 报错 。()
def fun(n):
if n > 10:
return 0
else:
return n + fun(n-1)
print(fun(10))
标准答案:正确。
试题解析:递归的边界条件设 置错误 , 产生 了 无限 递归程序 报错 。
28. 算法的时间复杂度与空间复杂度 没 有 必然 关系。()
标准答案:正确。
试题解析:算法的时间复杂度与空间复杂度 没 有 必然 关系。
29. 已知 有 n 本 按照书名拼音 排序 好 的 图书 ,使用对分查找法搜索 其 中 任何 一本
书 ,最多查找次数为 4 次,则 n 的值有可能为 10 。()
标准答案:正确。
试题解析:根据二分查找最 坏 查找次数可得。
30. 函数定义语句 def f(c=1,d=2,a,b): 是正确的,因为 默认 值 形 参要放在前面。
()
标准答案: 错误 。
试题解析:函数定义, 默认 值 形 参要放在后面。
31. return 语句可以返 回任何 数据 类型 的值,包括整数、 浮点 数、字符串、列表、元
组 、字 典 等。()
标准答案:正确。
试题解析: return 语句可以用于在函数执行结 束 后返 回 一个值。这个值可以是
任何类型 , 例 如整数、 浮点 数、字符串、列表等等。
32. def ZiDian(**kwargs):
print(kwargs)
ZiDian(a=1)
运行 上 面的代码后,输出结果为 {'a':1} 。()
标准答案:正确。
试题解析: 当 不确定需要 传 入的值是多少时,在定义 形 参时,可以使用 *args (列
表)、 **kwargs (字 典 )来表 示 。在元素前加 上 ** 后, 传 入的值以字 典 的 形 式
显示 出来。
33. 以下代码可以正 常 运行 , 输出 8 。
() def qh(a,b=3):
print(a+b)
qh(b=2,6)
标准答案: 错误 。
试题解析:在 形 参列表中 必须先 列出 没 有 默认 值的 形 参, 再 列出有 默认 值的 形 参。不
然 ,程序会 报错 。
34. 代码 >>>lambda:x=2,y=3:x+y 的运行结果是 5 。
()标准答案: 错误 。
试题解析: 匿名 函数中冒 号 前面的部分表 示 参数列表,不能有 赋 值语句,不 然 会
报“ can't assign to lambda” 错误 。
35. 使用 pip install --upgrade numpy 命令 能 够升 级 numpy 科学 计算 库 。
()标准答案:正确。
试题解析: pip 的 install --upgrade numpy 指 令 用来 升 级 外 部模 块 。
三 、编程题 ( 共 3 题,共 30 分 ) 。
36. 数的分解。
给 出一个正整数 a ,要求分解成若干个正整数的乘 积 , 即 a=a1×a2×a3×...×
an ,并 且 1<a1≤a2≤a3≤...≤an ,问这 样 分解的 种类 有多少。 注意 到 a=a 也 是
一 种 分解。
例 如, 8 可以分解成 8=2*2*2,8=2*4,8=8 总 共 3 种 。
代码如下, 完善划线 处的代码:
def fun(x, y=2):
if x == 1:
global ans
①
for i in range(y, x+1):
if
②
:
fun(x//i,i)
lst = [2, 8, 9, 20] # 测 试数据
for i in lst:
ans = 0
③
print(ans)
程序运行结果如下:
1
3
2
4
参考程序:
def fun(x, y=2):
if x == 1:
global ans
ans += 1
for i in range(y, x+1):
if x % i == 0:
fun(x//i, i)
lst = [2, 8, 9, 20] # 测 试数据
for i in lst:
ans = 0
fun(i)
print(ans)
评 分标准:
( 1 ) ans += 1 或 等效答案 ; ( 2 分)
( 2 ) x % i == 0 或 等效答案 ; ( 3 分)
( 3 ) fun(i) 或 等效答案。( 3 分)
37. 购物组 合。
小明单位 发 了 100 元的 购物卡 ,小明到超 市买三类洗 化用 品 : 洗发水 ( 15 元)、
香皂 ( 2 元)、 牙刷 ( 5 元)。要 把 100 元正 好 花 掉 ,可有哪 些购买组 合?
def
gouwu(money):
for i in range(0,money//15+1):
for j in range(0,money//2+1):
for
k
in
range(0,①
):
if
②
:
print(' 可选择的 购买组 合 :\t 购买洗发水
{} 瓶 , 香皂 {} 块 , 牙刷 {} 个。 '.format(
③
))
gouwu(100)
参考程序:
def
gouwu(money):
for i in range(0,money//15+1):
for j in range(0,money//2+1):
for
k
in
range(0,money//5+1):
if i*15+j*2+k*5==money:
print(' 可选择的 购买组 合 :\t 购买洗发水 {} 瓶 , 香
皂 {} 块 , 牙刷 {} 个。 '.format(i,j,k))
gouwu(100)
评 分标准:
( 1 ) money//5+1 或 等效答案 ; ( 3 分)
( 2 ) i*15+j*2+k*5==money 或 等效答案 ; ( 4 分)
( 3 ) i,j,k 或 等效答案。( 3 分)