内容正文:
第03讲 函数与算法
目录
01 课标达标练
题型01 考查自定义函数、参数传递、模块导入
题型02 考查解析算法思想与代码理解
题型03 考查枚举算法思想与程序框架
题型04 考查迭代、递归调用结果推演
02 核心突破练
03 真题溯源练
01 考查自定义函数、参数传递、模块导入【★选考高频】
考纲对标:理解自定义函数 def、return;区分形参与实参;理解可变、不可变对象的参数传递效果;掌握常用模块导入语法。选择题高频,非选择题函数填空偶有考查。
1.【结合校园成绩统计考查函数与参数传递】编写 Python 自定义函数处理班级学生分数,下面关于 Python 函数与参数传递说法正确的是()
A. 函数内部定义的局部变量,可以直接在函数外部读取使用
B. 传入列表作为实参,函数内对列表整体重新赋值`lst=[1,2,3]`,会修改外部原始列表
C. 不可变对象(int、字符串)作为实参,函数内对形参重新赋值,不会改变外部实参
D.`from math import *`是最推荐的模块导入写法,不会造成命名冲突
2. 有如下 Python 程序段:
def func(x, lst):
x = x + 5
lst.append(x)
a = 10
b = [1,2,3]
func(a, b)
print(a, b)
程序运行输出结果为()
A.10 [1, 2, 3, 15] B.15 [1, 2, 3, 15]
C.10 [1, 2, 3] D.15 [1, 2, 3]
02 考查解析算法思想与代码理解
考纲对标:理解解析算法思想,能将数学关系式转化为程序代码;多嵌套在大题中,极少单独出选择题。
3. 【运动物理计算,解析算法】已知自由落体下落距离公式:h=g,g取9.8。下面解析算法函数实现正确的是()
03 考查枚举算法思想与程序框架【★选考高频】
考纲对标:理解枚举算法基本思想,掌握枚举三要素(枚举对象、枚举范围、判断条件)。选考非选择题高频考点,常考 range 边界易错点。
4. 下面关于枚举算法的描述,错误的是()
A. 枚举算法需要确定枚举对象、枚举范围、判断条件三要素
B. 枚举算法需要遍历所有候选解,不重不漏,再通过条件筛选正确解
C. 枚举算法适合问题存在直接数学求解公式,可以直接计算得到结果的场景
D. 枚举算法常使用 for 循环实现枚举范围,if 语句作为筛选条件
5.【枚举算法代码阅读】下面程序功能是找出 150 之间所有 7 的倍数,空白处依次填写()
res = []
for i in range(1, ____):
if __________:
res.append(i)
print(res)
A.50 i//7 ==0 B.51 i%7 ==0
C.50 i%7 ==0 D.51 i//7 ==0
04 考查迭代、递归调用结果推演【★选考高频 ★难点】
考纲对标:区分迭代与递归;理解递归终止条件;能够手工推演简单递归程序运行结果。浙江选考选择题必考难点,重点考察调用栈 “后进先出” 执行流程。
6. 阅读如下递归程序段:
def f(n):
if n <= 2:
return n
return f(n-1)+f(n-2)
print(f(4))
程序运行输出结果为()
A.4 B.5 C.6 D.7
7. 阅读递归程序:
def dfs(n):
print(n,end=" ")
if n>=4:
return
dfs(n+1)
print(n,end=" ")
dfs(2)
程序输出结果是()
A.2 3 4 3 2 B.2 3 4 2 3 C.2 3 3 4 2 D.2 3 4
1. 【新情境:图书馆图书编号校验・参数 + 函数综合】★(2024 浙江宁波高三模拟改编)有如下 Python 程序段:
def check(x, arr):
x = x * 2
arr[0] = arr[0] + x
num = 10
book = [5, 16, 23]
check(num, book)
print(num, book[0])
运行后输出结果为()
A.10 25 B.20 25 C.10 15 D.20 15
2. 【解析 + 枚举混合填空改编】 找出区间 [10,100] 内,满足 y=-3x+2的结果大于 500 的整数 x,补全下面枚举框架。
ans=[]
for x in range(10, ____):
y = ________________
if y>500:
ans.append(x)
print(ans)
(1) 第一空:________ (2) 第二空:________
3. 【递归调用栈追踪】★
def calc(n):
if n == 0:
return 0
print(n,end=",")
t = calc(n1)
return t + n
s=calc(3)
print("
s=",s)
该程序打印输出为()
A.3,2,1, s=6 B.1,2,3, s=6 C.3,2,1, s=3 D.3,2,1,0, s=6
1.(改编 2024 浙江 6 月选考)关于 Python 函数参数传递,下列说法正确的是()
A. Python 严格分为值传递和引用传递两种模式
B. 列表传入函数,只要在函数内部执行 append,外部原列表发生改变
C. 字符串作为实参传入函数,函数内形参执行s=s+"a"会修改外部字符串
D. 函数中 return 可以返回多个值,但必须使用列表包裹
2.(2025 浙江 1 月选考・递归)★阅读程序:
def fun(n):
if n>5:
return 0
return n + fun(n+2)
print(fun(1))
程序输出结果是()
A.9 B.12 C.15 D.7
3.(选考真题・2023 年浙江 1 月信息技术选考 第 10 题)
定义如下函数:
def f(n):
if n < 3:
return n
return f(n‑1)+f(n‑3)
执行语句 `v = f(5)`,函数`f`被调用的次数是()
A.1 B.5 C.7 D.15
4. (选考真题・2024 年浙江 6 月信息技术选考 第 11 题)
有如下 Python 程序段:
for i in range(0, len(a)-1, 2):
if i > 0 and a[i] < a[i‑1]:
a[i], a[i‑1] = a[i‑1], a[i]
if a[i] < a[i+1]:
a[i], a[i+1] = a[i+1], a[i]
列表 a 共有 6 个元素,运行该程序段后,a 可能的值是()
A.[2,9,8,6,9,3]
B.[9,9,8,6,3,2]
C.[9,3,6,2,8,9]
D.[6,3,9,2,9,8]
学科网(北京)股份有限公司1 / 17
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$
第03讲 函数与算法
目录
01 课标达标练
题型01 考查自定义函数、参数传递、模块导入
题型02 考查解析算法思想与代码理解
题型03 考查枚举算法思想与程序框架
题型04 考查迭代、递归调用结果推演
02 核心突破练
03 真题溯源练
01 考查自定义函数、参数传递、模块导入【★选考高频】
考纲对标:理解自定义函数 def、return;区分形参与实参;理解可变、不可变对象的参数传递效果;掌握常用模块导入语法。选择题高频,非选择题函数填空偶有考查。
1.【结合校园成绩统计考查函数与参数传递】编写 Python 自定义函数处理班级学生分数,下面关于 Python 函数与参数传递说法正确的是()
A. 函数内部定义的局部变量,可以直接在函数外部读取使用
B. 传入列表作为实参,函数内对列表整体重新赋值`lst=[1,2,3]`,会修改外部原始列表
C. 不可变对象(int、字符串)作为实参,函数内对形参重新赋值,不会改变外部实参
D.`from math import *`是最推荐的模块导入写法,不会造成命名冲突
【答案】C
【解析】
A 错误:函数内部局部变量,外部无法直接访问;
B 错误:对列表形参整体重新赋值,只是形参指向新对象,不会改变外部原列表;只有修改列表内部元素才会同步变化;
C 正确:int、str 等不可变对象,函数内形参赋值仅改变局部,外部实参不受影响;
D 错误:`from xxx import *`容易引发命名冲突,不推荐日常编写使用。
2. 有如下 Python 程序段:
def func(x, lst):
x = x + 5
lst.append(x)
a = 10
b = [1,2,3]
func(a, b)
print(a, b)
程序运行输出结果为()
A.10 [1, 2, 3, 15] B.15 [1, 2, 3, 15]
C.10 [1, 2, 3] D.15 [1, 2, 3]
【答案】A
【解析】 变量 a 是 int 不可变对象,函数内修改形参 x,外部 a 不变仍然为 10;
b 是列表可变对象,append()修改内部元素,列表增加 15,输出10 [1, 2, 3, 15]。
02 考查解析算法思想与代码理解
考纲对标:理解解析算法思想,能将数学关系式转化为程序代码;多嵌套在大题中,极少单独出选择题。
3. 【运动物理计算,解析算法】已知自由落体下落距离公式:h=g,g取9.8。下面解析算法函数实现正确的是()
【答案】B
【解析】解析算法核心是将数学公式直接翻译为代码。
A. 变量 g 未定义;
B. 正确,设置默认参数 g=9.8,公式书写正确,return 返回计算结果;
C. 没有传入 t,g、t 均未定义;
D. 语法错误,print 与 return 不能写在一起。
03 考查枚举算法思想与程序框架【★选考高频】
考纲对标:理解枚举算法基本思想,掌握枚举三要素(枚举对象、枚举范围、判断条件)。选考非选择题高频考点,常考 range 边界易错点。
4. 下面关于枚举算法的描述,错误的是()
A. 枚举算法需要确定枚举对象、枚举范围、判断条件三要素
B. 枚举算法需要遍历所有候选解,不重不漏,再通过条件筛选正确解
C. 枚举算法适合问题存在直接数学求解公式,可以直接计算得到结果的场景
D. 枚举算法常使用 for 循环实现枚举范围,if 语句作为筛选条件
【答案】C
【解析】C 描述的是解析算法;枚举算法没有直接计算公式,依靠逐个尝试候选解筛选答案。
5.【枚举算法代码阅读】下面程序功能是找出 150 之间所有 7 的倍数,空白处依次填写()
res = []
for i in range(1, ____):
if __________:
res.append(i)
print(res)
A.50 i//7 ==0 B.51 i%7 ==0
C.50 i%7 ==0 D.51 i//7 ==0
【答案】B
【解析】range 左闭右开,要包含 50,终止写 51;判断 7 的倍数使用取模运算i%7==0。
04 考查迭代、递归调用结果推演【★选考高频 ★难点】
考纲对标:区分迭代与递归;理解递归终止条件;能够手工推演简单递归程序运行结果。浙江选考选择题必考难点,重点考察调用栈 “后进先出” 执行流程。
6. 阅读如下递归程序段:
def f(n):
if n <= 2:
return n
return f(n-1)+f(n-2)
print(f(4))
程序运行输出结果为()
A.4 B.5 C.6 D.7
【答案】B
【解析】 f (4)=f (3)+f (2) f (3)=f (2)+f (1) 基线条件:f (2)=2,f (1)=1 回代:f (3)=2+1=3; f (4)=3+2 =5。
7. 阅读递归程序:
def dfs(n):
print(n,end=" ")
if n>=4:
return
dfs(n+1)
print(n,end=" ")
dfs(2)
程序输出结果是()
A.2 3 4 3 2 B.2 3 4 2 3 C.2 3 3 4 2 D.2 3 4
【答案】A
【解析】调用顺序 dfs (2) → dfs (3) → dfs (4) dfs (4) 打印 4,满足 n>=4 return;回到 dfs (3) 打印 3;回到 dfs (2) 打印 2。输出:2 3 4 3 2。
1. 【新情境:图书馆图书编号校验・参数 + 函数综合】★(2024 浙江宁波高三模拟改编)有如下 Python 程序段:
def check(x, arr):
x = x * 2
arr[0] = arr[0] + x
num = 10
book = [5, 16, 23]
check(num, book)
print(num, book[0])
运行后输出结果为()
A.10 25 B.20 25 C.10 15 D.20 15
【答案】A
【解析】num 是 int 不可变对象,函数内修改形参 x,外部 num 不变依旧等于 10;book 为列表可变对象,修改内部 arr [0],`arr[0]=5+20=25`,输出`10 25`。
2. 【解析 + 枚举混合填空改编】 找出区间 [10,100] 内,满足 y=-3x+2的结果大于 500 的整数 x,补全下面枚举框架。
ans=[]
for x in range(10, ____):
y = ________________
if y>500:
ans.append(x)
print(ans)
(1) 第一空:________ (2) 第二空:________
【参考答案】(1)101;(2)x**2 - 3*x + 2
【解析】range 右端点不包含,要取到 100,写 101;解析算法把数学公式转为 Python 表达式。
3. 【递归调用栈追踪】★
def calc(n):
if n == 0:
return 0
print(n,end=",")
t = calc(n1)
return t + n
s=calc(3)
print("
s=",s)
该程序打印输出为()
A.3,2,1, s=6 B.1,2,3, s=6 C.3,2,1, s=3 D.3,2,1,0, s=6
【答案】A
【解析】 调用顺序 calc (3) 打印 3 → calc (2) 打印 2 → calc (1) 打印 1 → calc (0) return0 回代:calc (1)=0+1=1;calc (2)=1+2=3;calc (3)=3+3=6。屏幕输出3,2,1,换行后s=6。
1.(改编 2024 浙江 6 月选考)关于 Python 函数参数传递,下列说法正确的是()
A. Python 严格分为值传递和引用传递两种模式
B. 列表传入函数,只要在函数内部执行 append,外部原列表发生改变
C. 字符串作为实参传入函数,函数内形参执行s=s+"a"会修改外部字符串
D. 函数中 return 可以返回多个值,但必须使用列表包裹
【答案】B
【解析】
A 错误,Python 是对象引用传递,没有严格区分值 / 引用传递;
B 正确,append 修改列表内部元素,外部原列表同步变化;
C 错误,字符串不可变,形参拼接不会改变外部实参;
D 错误,return 可以直接返回多值,逗号分隔,不需要列表包裹。
2.(2025 浙江 1 月选考・递归)★阅读程序:
def fun(n):
if n>5:
return 0
return n + fun(n+2)
print(fun(1))
程序输出结果是()
A.9 B.12 C.15 D.7
【答案】A
【解析要点】 基线条件 n>5 返回 0;调用链:fun (1)→fun (3)→fun (5)→fun (7)=0 回代计算:fun (5)=5+0=5;fun (3)=3+5=8;fun (1)=1+8=9。答案 A。
3.(选考真题・2023 年浙江 1 月信息技术选考 第 10 题)
定义如下函数:
def f(n):
if n < 3:
return n
return f(n‑1)+f(n‑3)
执行语句 `v = f(5)`,函数`f`被调用的次数是()
A.1 B.5 C.7 D.15
【参考答案】C
【解析】
本题考查递归函数调用次数统计。
f (5) 调用 →f (4)、f (2)
f (4) 调用 →f (3)、f (1)
f (3) 调用 →f (2)、f (0)
f (2) 直接返回;f (1) 直接返回;f (0) 直接返回。
统计调用:f (5)、f (4)、f (3)、f (2)、f (1)、f (2)、f (0),合计 7 次
4. (选考真题・2024 年浙江 6 月信息技术选考 第 11 题)
有如下 Python 程序段:
for i in range(0, len(a)-1, 2):
if i > 0 and a[i] < a[i‑1]:
a[i], a[i‑1] = a[i‑1], a[i]
if a[i] < a[i+1]:
a[i], a[i+1] = a[i+1], a[i]
列表 a 共有 6 个元素,运行该程序段后,a 可能的值是()
A.[2,9,8,6,9,3]
B.[9,9,8,6,3,2]
C.[9,3,6,2,8,9]
D.[6,3,9,2,9,8]
【答案】D
【解析】
循环 i 取 0、2、4。
i=0:只和右侧 i+1 交换,保证 a [0]>a [1];
i=2:先和 i‑1 比较交换,再和 i+1 比较交换,保证 a [2] 大于左右邻居;
i=4:先和 i‑1 比较交换,再和 i+1 比较交换,保证 a [4] 大于左右邻居。
最终满足 a [0]>a [1],a [2]>a [1]、a [2]>a [3],a [4]>a [3]、a [4]>a [5],只有 D 选项符合该特征。
学科网(北京)股份有限公司1 / 17
学科网(北京)股份有限公司
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$