
青少年软件编程(Python)等级考试试卷(四级)
分数:100题数:38
一、单选题(共25题,共50分)
1.下列问题体现分治算法思想的是?( )
A. 打印1000以内的素数
B. 输出100以内能被5整除的整数
C. 求长方体的体积
D. 用快速排序算法对n个整数升序排序
试题编号:20250409-fcl-003
试题类型:单选题
标准答案:D
试题难度:一般
试题解析:快速排序体现了分治算法。
考生答案:D
考生得分:2
是否评分:已评分
评价描述:
2.编写如下Python代码求两个数的最大公约数,划线处选择合适的代码?( )
def gcd(m, n):
ifm % n == 0:
returnn
else:
return_________
print(gcd(49, 28))
A. gcd(n,m%n)
B. gcd(m,m%n)
C. gcd(m%n,n)
D. gcd(m%n,m)
试题编号:20250409-fcl-004
试题类型:单选题
标准答案:A
试题难度:一般
试题解析:欧几里得定理求最大公约数,gcd(n,m%n)。
考生答案:A
考生得分:2
是否评分:已评分
评价描述:
3.有如下Python程序,执行程序后输出的结果是?( )
def fib(n):
a= b = 1
fori in range(3,n+1):
c= a + b
a= b
b= c
returnc
print(fib(5))
A. 3
B. None
C. 5
D. 8
试题编号:20250409-fcl-006
试题类型:单选题
标准答案:C
试题难度:一般
试题解析:斐波那契数列第5项的值为5,故选C。
考生答案:C
考生得分:2
是否评分:已评分
评价描述:
4.小明每天存钱,第一天存1元,之后每天存前一天的2倍。
他想用递归算法求出第几天可以存到32元。请问以下Python程序的递归调用次数是?( )
def save_days(amount, target=32):
ifamount >= target:
return0
return1 + save_days(amount * 3)
print(save_days(1))
A. 4
B. 5
C. 6
D. 7
试题编号:20250416-qdc-019
试题类型:单选题
标准答案:A
试题难度:一般
试题解析:第1天:1元 → 未达标;第2天:1+1*2=3元 → 未达标;第3天:3+3*2=9元 → 未达标;第4天:9+9*2=27元 → 未达标,第5天:27+27*2=81元 → 达标,不再调用。
考生答案:C
考生得分:0
是否评分:已评分
评价描述:
5.小明每天存钱,第一天存1元,之后每天存前一天的2倍。 小明编写的Python程序,若递归函数缺少终止条件,会导致什么问题?( )
A. 计算结果不准确,但能正常结束
B. 程序陷入无限循环,无法停止
C. 程序运行报错
D. 计算结果正确,但效率降低
试题编号:20250416-qdc-020
试题类型:单选题
标准答案:B
试题难度:容易
试题解析:递归必须定义终止条件(如金额 ≥100 元时停止),否则函数会无限调用自身(如1元→2元→4元→…),导致栈溢出或无限循环。选项B正确,其他选项不符合递归的特性。
考生答案:B
考生得分:2
是否评分:已评分
评价描述:
6.老师用递归函数计算连续自然数1到5的和,调用sum_r(5) 时实际递归调用了几次函数?( )
def sum_r(n):
ifn == 1:
return1
returnn + sum_r(n-1)
A. 7
B. 6
C. 4
D. 5
试题编号:20250416-qdc-021
试题类型:单选题
标准答案:C
试题难度:一般
试题解析:第1次,sum_r(5)调用sum_r(4);第2次,sum_r(4)调用sum_r(3);第3次,sum_r(3)调用sum_r(2);第4次,sum_r(1)调用sum_r(1)。
考生答案:D
考生得分:0
是否评分:已评分
评价描述:
7.递归算法的Python程序实现问题,下列说法正确的选项是?( )
A. 问题的规模越大,递归算法的效率越高
B. 需要使用循环语句
C. 有明确的结束递归的边界条件
D. 无需结束递归的边界条件
试题编号:20250416-qdc-022
试题类型:单选题
标准答案:C
试题难度:一般
试题解析:递归算法必须有明确的结束递归的边界条件。
考生答案:C
考生得分:2
是否评分:已评分
评价描述:
8.小美想用递归算法实现字符串反转,以下代码能正确反转字符串,划线处应该填写哪个选项?( )
def r(s):
iflen(s) <= 1:
returns
returnr() + s[0]
s='abcde'
print(r(s))
A. s[::-1]
B. s[:]
C. s[:1]
D. s[1:]
试题编号:20250416-qdc-023
试题类型:单选题
标准答案:D
试题难度:一般
试题解析:每一次递归调用,把第一个字符移到右侧,最终实现整个字符串反转。C项正确。
考生答案:D
考生得分:2
是否评分:已评分
评价描述:
9.家里有16平方米的房间要打扫,小明和小红两兄妹分别想解决打扫的问题。 小明想用递归的方法解决“打扫房间”的问题:每次打扫一半区域,直到剩余区域小于1平方米。 以下哪项是递归解决此问题的核心思想?( )
A. 将大房间拆分成多个小房间,同时打扫所有小房间
B. 每次打扫房间剩余的一半区域,直到剩余区域小于1平方米
C. 先打扫整个房间,再逐步缩小范围检查是否干净
D. 随机选择区域打扫,直到剩余区域小于1平方米
试题编号:20250416-qdc-024
试题类型:单选题
标准答案:B
试题难度:一般
试题解析:递归的核心是分而治之,将原问题(打扫整个房间)分解为规模更小的同类子问题(每次打扫一半区域),直到子问题足够简单(剩余区域 <1 平方米)可直接解决。选项B准确描述了这一过程,其他选项未体现递归的“分解-解决”特性。
考生答案:B
考生得分:2
是否评分:已评分
评价描述:
10.小明写了一个关于计算梯形面积的函数,运行如下Python代码的结果是什么?( )
def s(a, b, h):
area= (a + b) * h / 2
print(s(1, 2, 2))
A. 2
B. 2.0
C. 3.0
D. None
试题编号:20250418-zj-011
试题类型:单选题
标准答案:D
试题难度:一般
试题解析:函数用return语句将值返回给调用函数的代码行。s()函数没有return语句,所以没有返回值,默认为None。
考生答案:D
考生得分:2
是否评分:已评分
评价描述:
11.下列有关Python自定义函数的描述,正确的是?()
A. 调用函数时传递的实参个数必须大于或等于形参个数
B. 函数参数可以是任意数据类型
C. 函数参数必须有默认值
D. 函数参数不能是字符串
试题编号:20250418-zj-012
试题类型:单选题
标准答案:B
试题难度:一般
试题解析:Python函数可以接受任意类型的参数,包括整数、浮点数、字符串、列表等。
考生答案:B
考生得分:2
是否评分:已评分
评价描述:
12.在Python语言中,运行如下代码,执行结果正确的是?( )
x = 10
def fun(x):
print(x)
x= 5
fun(x)
print(x)
A. 5
10
B. 5
5
C. 10
10
D. 10
5
试题编号:20250418-zj-013
试题类型:单选题
标准答案:C
试题难度:一般
试题解析:函数的局部变量作用域是函数内部。全局变量的作用域是整个程序。局部变量的修改不能影响全局变量。
考生答案:C
考生得分:2
是否评分:已评分
评价描述:
13.有如下Python程序,执行该程序后输出的结果是?( )
a = 5
def fun():
globala
a= a *2
print(a)
fun()
print(a)
A. 10
10
B. 5
5
C. 10
5
D. 5
10
试题编号:20250418-zj-014
试题类型:单选题
标准答案:A
试题难度:一般
试题解析:global定义全局变量。
考生答案:A
考生得分:2
是否评分:已评分
评价描述:
14.小明正在用Python编写一个“魔法数字盒”程序。这个数字盒有一个特殊功能:每次按下按钮时,数字会根据内部规则变化。以下是程序的一部分代码,如果小明连续按下按钮两次,屏幕上会显示什么数字?( )
def magic_box():
num= 0# 初始数字是0
defpress_button():
nonlocalnum
num+= 1# 每次按下按钮,数字加1
returnnum
returnpress_button
button = magic_box()
print(button())# 第一次按下按钮
print(button())# 第二次按下按钮
A. 1
1
B. 1
2
C. 0
1
D. 0
0
试题编号:20250418-zj-015
试题类型:单选题
标准答案:B
试题难度:一般
试题解析:nonlocal 关键字告诉 Python,变量 num 不属于 press_button 函数内部,而是属于外层的 magic_box 函数。因此,每次按下按钮时,num 的值会保留并增加 1。
第一次按下按钮时,num 从 0 变为 1;第二次按下按钮时,num 从 1 变为 2。
考生答案:B
考生得分:2
是否评分:已评分
评价描述:
15.Python3.5之后的版本新增了对函数参数和返回值的类型指定和检查,运行如下代码块,结果正确的是?( )
def fun(a:int, b:int)->int:
if(a> b):
returna + b
else:
returnb
print(fun("3", "2"))
A. 2
B. 5
C. 32
D. 类型不对,程序报错!
试题编号:20250418-zj-016
试题类型:单选题
标准答案:C
试题难度:一般
试题解析:Python本质上还是动态类型语言,所以类型不匹配也不会出错。这里参数是两个字符,字符相加是连接。
考生答案:C
考生得分:2
是否评分:已评分
评价描述:
16.在Python语言中,导入第三方库的语法正确的是哪一项?( )
A. from math import as m
B. import m as math
C. import math as m
D. from math as m import *
试题编号:20250418-zj-033
试题类型:单选题
标准答案:C
试题难度:容易
试题解析:在Python语言中,导入第三方库的语法有两种:
import 模块名1 [as 别名1], 模块名2 [as 别名2], ......
from 模块名 import 成员名1 [as 别名1], 成员名2 [as 别名2], ......
考生答案:C
考生得分:2
是否评分:已评分
评价描述:
17.在Python语言中,可以使用pip命令安装第三方库,以下哪个命令是安装命令?( )
A. pip download
B. pip search
C. pip show
D. pip install
试题编号:20250418-zj-034
试题类型:单选题
标准答案:D
试题难度:容易
试题解析:pip install <第三方库名>:安装指定的第三方库。
pip download <第三方库名>:下载但不安装指定的第三方库。
pip search <第三方库名>:根据关键词在名称和介绍中搜索第三方库。
pip show <第三方库名>:列出指定第三方库的详细信息。
考生答案:D
考生得分:2
是否评分:已评分
评价描述:
18.在Python语言编程中,创建一个自定义函数,用于统计图书借阅次数,以下正确的无参函数定义是?( )
A. def get_count(book_id=0):
B. def get_count():
C. def get_count(None):
D. def get_count(*):
试题编号:20250424-tr-001
试题类型:单选题
标准答案:B
试题难度:容易
试题解析:无参数函数定义的正确语法,不带参数传入。
考生答案:B
考生得分:2
是否评分:已评分
评价描述:
19.小张想用lambda函数计算两个数的和,正确的写法是?( )
A. lambda a,b: a + b
B. lambda a,b: return a + b
C. lambda a,b -> a + b
D. lambda (a,b): a + b
试题编号:20250424-tr-002
试题类型:单选题
标准答案:A
试题难度:一般
试题解析:A:lambda a,b: a + b 是正确写法,lambd函数隐式返回表达式结果,无需return。 B:错误,lambda函数中不能显式使用return语句。 C:错误,Python的lambda语法使用冒号(:)而非箭头(->)。 D:错误,Python 3中lambda的参数不能以元组形式声明。
考生答案:A
考生得分:2
是否评分:已评分
评价描述:
20.有如下Python自定义函数,能正确调用该函数的选项是?( )
def f(a,b,c)
returna-b/c
A. f(1,2)
B. f(1,2,c=3)
C. f(a=1,2,3)
D. f(1,b=2,3)
试题编号:20250424-tr-003
试题类型:单选题
标准答案:B
试题难度:较难
试题解析:参数传递数量要一致,关键字参数要在位置参数后面。
考生答案:B
考生得分:2
是否评分:已评分
评价描述:
21.下面Python代码的输出结果是?( )
def add(x=2, y=3):
returnx + y
print(add(y=5))
A. 5
B. 7
C. 8
D. 报错
试题编号:20250424-tr-004
试题类型:单选题
标准答案:B
试题难度:容易
试题解析:Python函数允许通过关键字参数覆盖部分默认参数,未覆盖的参数仍使用默认值,结果为2+5=7。
考生答案:C
考生得分:0
是否评分:已评分
评价描述:
22.在下列Python代码中,将data变为全局变量,横线处应该填入的是?( )
data = 0
def add_data():
______
data+=2# 修改全局变量
A. global
B. nonlocal
C. var
D. 不需要填
试题编号:20250424-tr-005
试题类型:单选题
标准答案:A
试题难度:容易
试题解析:修改全局变量需global声明。
考生答案:A
考生得分:2
是否评分:已评分
评价描述:
23.有以下食堂点餐Python函数,现需要点"牛肉面"、不点甜品(dessert),下列四个点餐选项中最合适的是?( )
def order_meal(food, dessert=None):
...
A. order_meal('牛肉面', dessert=0)
B. order_meal(food='牛肉面', dessert=True)
C. order_meal('牛肉面', dessert='')
D. order_meal('牛肉面')
试题编号:20250424-tr-006
试题类型:单选题
标准答案:D
试题难度:较难
试题解析:使用默认参数dessert=None。
考生答案:D
考生得分:2
是否评分:已评分
评价描述:
24.在Python语言编程中,以下哪个函数调用后,可以打印输出欢迎语“Welcome!”?( )
A. def greet():
print("Welcome!")
B. def greet:
return"Welcome!"
C. def greet():
return "Welcome!"
D. def greet("user"):
print("user","Welcome!")
试题编号:20250424-tr-007
试题类型:单选题
标准答案:A
试题难度:一般
试题解析:直接打印输出欢迎语,选A。
考生答案:A
考生得分:2
是否评分:已评分
评价描述:
25.下列哪种情况的程序,时间复杂度最低?( )
A. 一个for循环,循环 100 次
B. 两个嵌套的for循环,每个循环 100 次
C. 执行一次print语句
D. 用while循环找列表里的某个元素
试题编号:20250424-tr-031
试题类型:单选题
标准答案:C
试题难度:容易
试题解析:执行一次print语句,操作次数固定,时间复杂度是 O (1) ;一个for循环循环 100 次是 O (n) ;两个嵌套for循环是 O (n2) ;用while循环找列表元素,最坏情况要遍历整个列表,也是 O (n) ,O (1) 是最低的时间复杂度。
考生答案:C
考生得分:2
是否评分:已评分
评价描述:
二、判断题(共10题,共20分)
26.分治思想是将一个大问题分解成若干个小问题,分别解决这些小问题,然后再将小问题的解合并起来以解决原始的大问题。程序实现时必须使用递归程序。( )
正确 错误
试题编号:20250409-fcl-010
试题类型:判断题
标准答案:错误
试题难度:一般
试题解析:分治思想程序实现时可以不使用递归程序,如二分查找。
考生答案:错误
考生得分:2
是否评分:已评分
评价描述:
27.Python语言编程中,递归函数可以没有终止条件,只要问题规模能自动缩小到最小值。( )
正确 错误
试题编号:20250416-qdc-025
试题类型:判断题
标准答案:错误
试题难度:容易
试题解析:无终止条件会导致无限递归,触发RecursionError。
考生答案:错误
考生得分:2
是否评分:已评分
评价描述:
28.对于斐波那契数列,递推算法的时间复杂度远低于递归算法。( )
正确 错误
试题编号:20250416-qdc-026
试题类型:判断题
标准答案:正确
试题难度:一般
试题解析:斐波那契数列的计算求解,递推算法时间复杂度为 O(n),递归算法时间复杂度为 O(2^n)。
考生答案:正确
考生得分:2
是否评分:已评分
评价描述:
29.Python语言中,全局变量的作用域是整个程序,局部变量的作用域是函数内部。所以执行以下代码块打印输出是"wang"。( )
name = "zhang"
def fun(name):
print(name)
name= "wang"
fun(name)
正确 错误
试题编号:20250418-zj-017
试题类型:判断题
标准答案:错误
试题难度:容易
试题解析:全局变量的作用域是整个程序,局部变量的作用域是函数内部,没错。
但函数中的同名局部变量在print()调用之后申明的,所以print()函数调用的name,是参数传入的全局变量值,应该输出"zhang"。
考生答案:错误
考生得分:2
是否评分:已评分
评价描述:
30.在Pyhon语言中,nonlocal关键字用来在定义局部变量的同时,修改全局变量的值;global关键字用来在函数或局部作用域使用外层(非全局)变量。( )
正确 错误
试题编号:20250418-zj-018
试题类型:判断题
标准答案:错误
试题难度:容易
试题解析:global与nonlocal两者定义搞反了。
考生答案:错误
考生得分:2
是否评分:已评分
评价描述:
31.小明想用Python画一幅彩色的图画,他听说可以使用一个叫turtle的库来完成。因此,必须打开命令窗口输入"pip install turtle"来安装这个第三方库。( )
正确 错误
试题编号:20250418-zj-035
试题类型:判断题
标准答案:错误
试题难度:一般
试题解析:turtle是Python的标准库之一,已经默认包含在Python的安装包中,因此不需要额外安装。
考生答案:错误
考生得分:2
是否评分:已评分
评价描述:
32.Python语言编程中,函数convert = lambda x: str(x)可以把数字转为字符串。( )
正确 错误
试题编号:20250424-tr-008
试题类型:判断题
标准答案:正确
试题难度:一般
试题解析:lambda合法赋值使用。
考生答案:正确
考生得分:2
是否评分:已评分
评价描述:
33.在Python中,自定义函数的函数体内必须有return语句。( )
正确 错误
试题编号:20250424-tr-009
试题类型:判断题
标准答案:错误
试题难度:一般
试题解析:自定义函数的函数体内可以没有return语句。
考生答案:错误
考生得分:2
是否评分:已评分
评价描述:
34.函数参数**kwargs可以接收学号-姓名键值对。( )
正确 错误
试题编号:20250424-tr-010
试题类型:判断题
标准答案:正确
试题难度:一般
试题解析:**kwargs接收键值对。
考生答案:正确
考生得分:2
是否评分:已评分
评价描述:
35.时间复杂度为O(n)的程序,比时间复杂度为O(n2)的程序执行效率要高。( )
正确 错误
试题编号:20250424-tr-032
试题类型:判断题
标准答案:正确
试题难度:一般
试题解析:随着输入规模n的增大,O (n) 增长速度比 O (n2) 慢,即执行相同规模的任务,O (n) 时间复杂度的算法所需执行次数更少,效率更高 。
考生答案:正确
考生得分:2
是否评分:已评分
评价描述:
三、编程题(共3题,共30分)
36.回文单词
某同学收集了很多单词,不同的单词之间用'-'拼接在一起,如'refer-level-face-',他发现有些单词如level,从左往右读和从右往左读该单词是一样的,称之为回文单词。他想统计他收集的单词中有多少个回文单词。步骤如下:(1)首先将单词按'-'分割出所有单词,(2)统计这些单词中回文单词的数量。编写的Python代码如下,完善划线处的代码。
def revstr(str):
iflen(str) == 1:
return①
else:
return②
word = 'refer-level-face-'
wordlst = []
s = ''
for t in word:
ift !='-':
③
else:
wordlst.append(s)
s= ''
c = 0
for w in wordlst:
rev= revstr(w)
if④:
c+= 1
print('对称的字符串个数有',c)
试题编号:202512-P4-36
试题类型:编程题
标准答案:
参考程序:
def revstr(str):
iflen(str) == 1:
returnstr
else:
returnrevstr(str[1:]) + str[0]
word = 'refer-level-face-'
wordlst = []
s = ''
for t in word:
ift !='-':
s+= t
else:
wordlst.append(s)
s= ''
c = 0
for w in wordlst:
rev= revstr(w)
ifw == rev:
c+= 1
print('对称的字符串个数有',c)
试题难度:一般
试题解析:
评分标准:
(1)str(或等效答案); (2分)
(2)revstr(str[1:]) + str[0](或等效答案);(3分)
(3)s += t 或 s = s + t(或等效答案); (2分)
(4)w == rev(或等效答案)。(3分)
37.孪生素数
素数是指大于1的自然数,且只能被1和它本身整除的数。孪生素数是指差值为2的两个素数,例如 (3, 5)、(11, 13) 等。问题:给定一个整数 n,请编写程序输出所有小于等于 n 的孪生素数对,按升序排列。 补全下列程序代码。
defis_prime(num):
if① :
returnFalse
fori in range(2, num):
if②:
returnFalse
return③
deffind(n):
fori in range(2,n-1):
ifis_prime(i) and④:
print(i,i + 2)
n = int(input())
find(n)
试题编号:202512-P4-37
试题类型:编程题
标准答案:
参考程序:
def is_prime(num):
ifnum < 2:# ① 小于2的数非素数
returnFalse
fori in range(2, num):
ifnum % i == 0:# ② 存在因数则非素数
returnFalse
returnTrue # ③ 通过所有检查则为素数
def find(n):
fori in range(2, n - 1):
ifis_prime(i) and is_prime(i + 2):# ④ 检查孪生素数对
print(i,i + 2)
n = int(input())
find(n)
试题难度:容易
试题解析:
评分标准:
(1)num < 2 (或等效答案);(3分)
(2)num % i == 0 (或等效答案);(3分)
(3)True (或等效答案);(3分)
(4)is_prime(i+2) (或等效答案)。(3分)
38.细胞分裂
在生物课实验中,有一个细胞,每分钟会分裂一次。前 2 分钟,它每次分裂会变成 2 个新细胞;从第 3 分钟开始,每次分裂会变成 3 个新细胞。下面的递归函数用于计算12分钟后细胞的总数,请完善划线处的代码。
def cell_division(n):
ifn == 0:
return①
elifn <= 2:
return②
else:
return③
print( ④)
试题编号:202512-P4-38
试题类型:编程题
标准答案:
参考程序:
def cell_division(n):
ifn == 0:
return1
elifn <= 2:
return2 * cell_division(n-1)
else:
return3 * cell_division(n-1)
print(cell_division(12))
试题难度:一般
试题解析:
评分标准:
(1)1(或等效答案);(2分)
(2)2 * cell_division(n-1)(或等效答案) ;(2分)
(3)3 * cell_division(n-1)(或等效答案);(2分)
(4)cell_division(12)(或等效答案) 。 (2分)
备考资料: