课时 08 函数与模块的应用 课件(共18张PPT)2027届浙江选考信息技术总复习

资源下载
  1. 二一教育资源

课时 08 函数与模块的应用 课件(共18张PPT)2027届浙江选考信息技术总复习

资源简介

(共18张PPT)
课时08 函数与模块的应用
一、函数的构造及应用
1.在Python中,定义函数的语法如下:
def 函数名(参数集合):
<函数体>
[return 函数值]
2. 函数名的命名规则和    一样。定义后的函数不能直接运行,需要经过
    才能得到运行。
3. 调用函数的基本方法为:函数名(    参数集合)。
4. 函数如果无返回数据,则return的函数值为None或者直接省略return。
变量名
实际
调用
1. 在Python中,把一组函数放到一个.py文件里,这个文件就称为一个模块。
2.Python模块补充了许多功能强大的函数,在使用    语句或from-import语句将函数所在的模块导入后,就能使用其中的函数。
3.Python中常用的内置模块。
(1)    模块:是Python提供的内置数学类函数库,不支持复数类型。
(2)random模块:用来生成    。
(3)Image模块:是PIL库中的重要模块,可以完成对图像的一些常用操作。
import
math
二、模块的导入及应用
随机数
典例 1 [2025湖州联考]有如下Python程序段:
def fun(x,y,z):
s=1
for i in range(y):
s=s*(x-i)
if not z:
s=s//(i+1)
return s
执行语句r=fun(7,3,False)后,变量r的值是(  )
A.21 B.35 C.42 D.210
B
√
题型导向一 函数的构造及应用
胜券点拨1
明考向 本题主要考查函数的构造与调用
审关键 自定义函数fun(x,y,z)的功能
考场思 维快闪 函数fun(x,y,z)的作用是计算组合数。当i=0时,s=s*(7-0)//(0+1)=7;当i=1时,s=s*(7-1)//(1+1)=21;当i=2时,s=s*(7-2)//(2+1)=35
典例 2 定义如下函数,其功能是查找字符串s中每个单词索引为c的字母,字符串s1存储查找到的字母。
def search(s):
s1,c="",0
for i in range(len(s)):
if "0"<=s[i]<="9":
c=c*10+int(s[i])
else:
if c>0:
s1=s[i:][c]+s1
c=0
return s1
该函数中存在问题,下列选项中,最适合作为测试数据的是 (  )
A."3test1no2yes" B."2test1nolyes"
C."1test0no2yes" D."1test1no2yes"
C
√
胜券点拨2
明考向 本题主要考查函数的构造与调用
审关键 自定义函数search(s)的功能
考场思 维快闪 函数使用一个变量c来存储数字(索引),当遇到数字时,将其添加到c中(c=c*10+int(s[i]))。当遇到非数字时,如果c大于0,则说明已经读取到一个数字,此时从当前位置i开始取第c+1个字母(即s[i:][c])逆序添加到s1中。所以当索引c为0时,该程序不能正确地将对应的字母查找到
典例 3 [2026浙南名校联盟]有如下Python程序段:
import random
lst=["a","b","c","d"]
res=""
i=0
while in=random.randint(0,5)
if n<4:
res=lst[i]+res
i+=1
print(res)
运行该程序段后,输出的结果不可能是 (  )
A.a
B.cb
C.dcba
D.dcbca
D
√
题型导向二 模块的导入及应用
胜券点拨3
明考向 本题主要考查random模块、循环结构
审关键 每次循环i都累加1
考场思 维快闪 该程序使用while循环遍历列表lst的每个元素,每次循环生成一个[0,5]范围内的整数n,若n<4,则将当前元素lst[i]添加到res的开头。无论是否添加元素,i都会增加1,因此每个元素最多被添加一次,故res只能是列表lst元素的子序列(顺序为逆序),长度在0到4之间。选项D中有5个字符,而且重复添加了字符"c",不符合要求
典例 4 编程求s=e+e2/2!+e3/3!+…+en/n!,其中e是自然常数,要求使用math模块。实现上述功能的Python程序如下,请在画线处填入合适的代码。
import math
def f(n):
m=0;c=1
for i in range(   ①   ):
c=c*   ②   1
m=c+m
return m
n=int(input("输入n的值:"))
s=   ③   1
print(s)
1,n+1
math.e/i
f(n)
胜券点拨4
明考向 本题主要考查自定义函数与math模块
审关键 math模块的常用函数、自定义函数的调用等
考场思维快闪 ① 变量i的范围为[1,n],步长为1,注意range()函数的用法
② 变量c保存每项的值,c前后项的值变化规律是乘以e/i,自然常数e可在math模块中调用
③ 函数f在调用时需要传递对应参数
典例 5 有如下Python程序段:
from PIL import Image
im=Image.open("kk.jpg")
i=0
while i<5:
i=i+1
im=im.rotate(i*90)
im.show()
图“kk.jpg”如上图所示,执行该程序段后,显示的图像是 (  )
D
√
胜券点拨5
明考向 本题主要考查Image模块的操作
审关键 rotate()
考场思 维快闪 根据代码可知,while循环共执行5次,图像总共旋转90°+180°+270°+360°+450°
=360°×3+270°,故显示的图像即原图旋转270°后的效果,im.rotate()函数默认逆时针旋转
1. 自定义函数相当于一个小的程序块,函数的参数相当于输入的信息,圆括号内是使用逗号分隔开的形式参数(形参)列表,在调用函数时向其传递实际参数(实参),函数的形参和实参必须一一对应。
2. 函数的返回值相当于输出信息,一个函数体内可以有多条return语句,当执行某条返回语句后,结束自定义函数运行,返回主程序。
通法一 自定义函数的调用
1.方式一:import <模块1>,<模块2>,<模块3> [as 别名]。
(1)导入某个模块,就可以引用它的所有公共函数,该方式调用模块中函数的形式为:<模块名>.<函数名>。
(2)“[as 别名]”为可选内容,若为模块设置了别名,则调用时在函数前写别名作为前缀。
2. 方式二:from <模块名> import <函数名>。导入某个模块中的特定函数,建立一个指向该函数的引用,故该方式调用函数形式为:<函数名>。
import math x=4 ans=math.sqrt(x) print(ans) import math as mh
x=4
ans=mh.sqrt(x)
print(ans)
from math import sqrt
x=4
ans=sqrt(x)
print(ans)
通法二 模块的导入
代码 输出结果(随机值)
import random #随机生成一个[0.0,1.0)范围内的随机浮点数 print(random.random())

0.123456789
#随机生成一个[1.5,3.5]范围内的随机浮点数 print(random.uniform(1.5,3.5))
2.345678
#随机生成一个[1,10]范围内的随机整数 print(random.randint(1,10))
5
#从列表lst中随机选择一个元素 lst=["apple","banana","cherry"] print(random.choice(lst))

banana
#从列表lst中随机选择k个不重复的元素。 lst=["apple","banana","cherry"] print(random.sample(lst,2))

["apple","cherry"]
#随机生成一个[0,21]范围内的奇数 num=random.randint(0,10)*2+1 print(num)

11
#随机生成一个[0,20]范围内的偶数 num=random.randint(0,10)*2 print(num)

16
通法三 random函数的简单应用
1.有如下Python程序段:
def out(s):
s2=""
for i in range(len(s)):
s2+=s[-i-1]
return s2
s=input("请输入s:")
print(out(s))
执行该程序段后,输入12345,输出的结果是 (  )
A.5 B.15 C.12345 D.54321
该程序段的功能是将输入的字符串逆序输出,当输入12345时,输出的结果是54321。
D 
√
一、函数的构造及应用
2.某校高一有6个班,现需随机抽取一个班代表学校参加年级合唱比赛,实现该功能的Python程序如下:
import random
cla=["1班","2班","3班","4班","5班","6班"]
v_cla=       .
print("随机抽取的班级为"+v_cla)
则画线处应填入的代码为 (  )
A.random.shuffle(cla)
B.cla[random.randint(1,6)]
C.random.choice(range(6))
D.cla[int(random.random()*6)]
random.shuffle(cla)是将序列的所有元素随机排序,未进行抽取。random.randint(1,6)产生的是[1,6]范围内的整数,超出列表实际范围。random.choice(range(6))会报错,由于产生的数值为整型,无法与最后一行输出语句中的字符串型数据进行加法运算。
D 
√
二、模块的导入及应用
3.有一张字母“b”的图片如图a所示,将其转变为如图b所示的字母“q”。实现该功能的Python程序如下,则画线处应填入的正确代码为 (  )
from PIL import Image
im=Image.open("zimu.png")
print(   ①   ) #输出:PNG
print(im.size) #输出:(131,131)
print(im.mode) #输出:RGB
   ②   .
A.①im ②im.rotate(90).show()
B.①im.format ②im.rotate(90).show()
C.①im.format ②im.rotate(180).show()
D.①zimu.format ②zimu.rotate(180).show()
①根据注释以及Image模块中函数的功能可知,获取图像文件格式的代码为im.format。②观察图a与图b的变化,发现图片进行了旋转且角度为180度,故填入代码为im.rotate(180)。
C 
√
4.若正整数x在n进位下的平方可以分割为两个正整数,且这两个数相加后等于x,则x就是n进位下的卡布列克数。例如92=81,9=8+1,所以9是十进位下的卡布列克数,9也是十进位下最小的有意义的卡布列克数。定义如下函数,判定x是否为十进位下的卡布列克数。
def Kaprekar_number(x):
w=10
m=x*x
while m>w and m%w!=0: #①
if m//w+m%w==x: #②
return True
w*=10 #③
else:
return False
下列关于该程序段的说法,正确的是 (  )
A.执行语句print(Kaprekar_number(45))后,输出的结果是False
B.若将语句①while中的“m>w”修改为“m>=w”,其他部分保持不变,则不影响函数功能
C.语句块②可用语句return m//w+m%w==x代替
D.交换语句块②和语句③的顺序,不影响函数功能
452=2045,20+25=45,故输出的结果是True。语句块②是检查当前的w是否能够将m拆分成两部分,使得这两部分的和等于x,若直接使用return m//w+m%w==x,则一旦找到满足条件的w,函数就会立即返回True,不会继续检查其他可能的w值。若交换语句块②和语句③的顺序,则在每次循环中,会先增加w的值,然后再检查当前的w是否满足条件,这会导致错过一些可能的w值。
B 
√
5.[2023.7浙江]小张收集了章回体小说《三国演义》的第1回至第120回的120个文件,其文件名依次为sg1.txt、sg2.txt、…、sg120.txt。他编写Python程序,对书中人物同时出现的情况进行简单分析,人物及其别名(如“孟德”是“曹操”的别名)作同一人处理。运行程序,用户输入“曹操|孟德 刘备|玄德”,输出结果如图所示,图中[11,28]表示曹操、刘备在第11回至第28回同时出现。
请回答下列问题:
(1)观察题图,可知曹操与刘备在第36回中       (单选,填字母:A.同时 / B.没有同时)出现。
主程序如下:
'''
输入姓名、别名,姓名存入列表names,如names=["曹操","刘备"]
统计各个回中,列表names中每个人物(含别名)出现的次数,结果存入字典total,如total={"曹操":
[2,5,7,…],"刘备":[50,47,0,…]},表示曹操在第1,2,3,…回分别出现了2,5,7,…次
代码略
'''
num,result=calculate(total)
mlen=getMaxLen(result)
print("人物同时出现的回数为:",num,",回依次为:")
print(result)
print("人物同时出现的最大连续回数是:",mlen)
(1)由图可知,人物同时出现的回包含[31,45],表示曹操、刘备在第31回至第45回中同时出现,故曹操与刘备在第36回中将同时出现。
A 
(2)定义函数calculate(total),功能是统计列表names中人物同时出现的回数,以及同时出现的回,结果示例如图所示,请在画线处填入合适的代码。
def calculate(total):
'''num保存120个回中人物同时出现的回数'''
num,length=0,0
'''result[i][0]、result[i][1]分别存储第i+1段回的起、止回号'''
result=[];k=-1
for i in range(0,120):
if allIn(total,i):
       .
if length==0:
begin=i+1
'''在列表result末尾添加一个元素'''
result.append([begin,begin])
k+=1
length+=1
result[k][1]=i+1
else:
length=0
return num,result
(2)函数calculate(total)的功能之一是统计列表names中人物同时出现的回数,并将结果存储在变量num中,故当列表names中的人物都出现在某回中(allIn(total,i)为True)时,变量num值增加1,故填入代码为num+=1或num=num+1。 
num+=1 或 num=num+1 
(3)定义函数getMaxLen(result),功能是统计最大连续回数,请在画线处填入合适的代码。
def getMaxLen(result):
mlen=0
for item in result:
t=item[1]-item[0]+1
if t>       :
mlen=t
return mlen
(4)定义函数allIn(total,cno),功能是判断列表names中的人物是否同时出现在cno回中,若同时出现,返回True,请在画线处填入合适的代码。
def allIn(total,cno):
for item in names:
if        :
return False
return True
(3)函数getMaxLen(result)的功能是统计人物同时出现的最大连续回数,列表result存储人物同时出现的起、止回号,for循环依次计算每段连续的回数t=item[1]-item[0]+1,然后比较t与mlen的大小并将较大值存储在变量mlen中,则变量mlen即最大连续回数,故填入代码为mlen。 
(4)函数allIn(total,cno)的功能是判断列表names中人物是否同时出现在cno回中,若同时出现,则返回True。for循环枚举人物姓名item,通过查询字典total,得到姓名item出现的回列表信息(total[item]),列表中按回次序依次存放姓名item在不同回中出现的次数,若姓名item在某个回中没有出现,则对应回次数值为0,函数返回False,故填入代码为total[item][cno]==0。
mlen 
total[item][cno]==0 

展开更多......

收起↑

资源预览