资源简介 专题5 函数和模块学业要求 知 识 点 学业水平等级1.掌握自定义函数的构造和调用方法 22.掌握模块的导入方法和常用函数的应用 2知识点一 自定义函数【知识梳理】1.在算法的程序实现过程中,也经常根据具体问题的特点将其分解成若干个________或者借助所用程序设计语言的特性来完成问题的解决。2.Python主要运用________、________等方式实现模块化程序设计,为算法的程序实现带来极大的便利。3.定义函数的语法如下:def函数名(参数集合):<函数体>[return________]4.函数名的命名规则和变量名一样。完成函数的构造后,在程序中就可以根据需要________该函数。【经典案例】自定义函数相当于一个小的程序块,函数的参数相当于输入的信息,函数的形参和实参必须一一对应,函数的返回值相当于输出信息。一个函数体内可以有多条return语句,当执行某条返回语句后,结束自定义函数运行,返回主程序。自定义函数调用的过程分为把实参赋值给形参、运算获得结果、返回运算结果三个步骤。【例1】 编写一个自定义函数实现判断字符串s是否是回文字符串。算法思想:采用双指针分别指向首尾字符,若两者相同,依次向中间靠拢。def hw(s):i=0j=len(s)-1while ①________:if ②________: return Falsei+=1j-=1return Trues1=input('请输入字符串s:')t=hw(s1)if ③________:print(″字符串″+s1+″是回文字符串!″)else:print(″字符串″+s1+″不是回文字符串!″)思维点拨明考向 本题自定义函数的应用精点拨 ①指针i和j分别指向字符串s的首和尾,在两端各取一个字符进行比较,若i==j意味着该字符串长度为奇数,中间位置可以不用比较,若字符串长度为偶数,最后一次比较完后,i将超出j的值。②若两端各取一个字符,取出的字符不相等,返回假。③调用自定义函数,将函数的值赋给t,那么t可能是True或False听课笔记:________________________________________________________________________________________________________________________________________________________________________________________________________【变式1】 将k(2<=k<=16)进制数s转换为十进制数n。算法思想:十进制数345可以表示为3*10^2+4*10^1+5*10^0,每个位上数x表示有x个位权,把所有位上数字与位权的进行累加,得到该数的十进制数大小。实现该自定义函数如下,请将空白处填写完整。def ktod(s,k):sn={″A″:10,″B″:11,″C″:12,″D″:13,″E″:14,″F″:15}ans=0for i in ①________:if ″0″<=s[i]<=″9″: t=int(s[i])else: ②________③________return ansshu=input(″输入需转换的数:″)k=int(input(″输入转换数据的进制:″))n=ktod(shu,k)print(str(k)+″进制数″+shu+″转换成十进制数后为:″+str(n))【例2】 多选题评分,评分标准:全部选对得2分,选对但不全的得1分,不选或有选错的得0分。编制的自定义函数如下,其中x表示要判断的答案,y表示标准答案。选对但不全的答案判定方法为:遍历判断的答案每一个选项,若该选项在标准答案中存在则进行计数count,否则直接退出遍历。根据count的值与判断答案的长度是否相等来决定是选对但不全。def df(x,y):if x==y:①________else:count=0for i in x: if i in y: count+=1 else: ②________if ③________: ans=0else: ans=1return ansda=input(″请你输入你的答案:″)bzda=″ACD″n=df(da,bzda)print(″该题得分为:″+str(n))思维点拨明考向 本题考查自定义函数的应用精点拨 ①要判断的答案x和标准答案y相同,得2分。②遍历判断的答案每一个选项,判断该选项在标准答案中是否存在。若不存在,说明有错选的选项。③若全部选项在标准答案中均能找到,则count的值就是len(x),若有找不到的,就是存在错选的,得0分,若没填涂,也得0分听课笔记:_________________________________________________________________________________________________________________________________________________________________________________________________________【变式2】 工作人员手中有人民币100、50、20、10和1元6个币种,输入一个金额n,按最大票面优先兑换的原则,输出相应的人民币及张数。def dh(je):rmb=[100,50,20,10,1];ans={}i=0while ①________:if je>=rmb[i]: ②________ je=je%rmb[i]else: ③________return ansje=int(input(″请输入兑换的人民币:″))t=dh(je)for i in t:print(″面值为″+str(i)+″数量为:″+str(t[i]))知识点二 模块的导入和应用【知识梳理】1.Python内置模块:数学运算________、生成随机数________、图像________。2.Python其他模块:用于实现部分操作系统功能(可用于文件、目录等操作)的________,与时间处理有关的________,可实现科学计算、数据可视化的________________,用于多媒体开发和游戏软件开发的________,支持图形处理的________等。3.在Python中,把一组函数放到一个.py文件里,这个文件就称为________。4.使用________语句或________语句导入Python内置的模块和来自第三方的模块,将能使用其中的函数,如________和________函数。【经典案例】模块是在函数和类的基础上,将一系列相关代码组织到一起的集合体。在Python中,一个模块就是一个扩展名为.py的源程序文件。导入模块一般采用import语句,import语句的语法:import模块名,若只希望导入模块中指定的一部分,可以使用from...import语句,其语法如下:From模块名import函数名。要求掌握模块的导入方法及常见模块的应用,如Random模块,Math模块,Image模块等等。【例1】 函数random的方法如下表所示:名称 含义random.choice(seq) 从序列seq的元素中随机挑选一个元素random.sample(a,b) 从序列a中随机截取b个长度的子序列编写程序实现如下功能:随机产生3门不重复的选课科目,输出其对应的选课人数。import randomsubject=['政治','历史','地理','物理','化学','生物','技术']①________print(sub)number={'政治':307,'历史':219,'地理':396,'物理':170,'化学':116,'生物':265,'技术':225}num=[]for x in sub:②________print(num)上述程序段中划线处可选的语句为( )A.①sub=random.sample(subject,3) ②num.append(number[x])C.①sub=random.choice(subject,3) ②num.append(number[x])B.①sub=random.sample(subject) ②num.append(x)D.①sub=random.choice(subject) ②num.append(x)思维点拨明考向 本题考查随机函数及字典的综合应用精点拨 sample方法从序列a中随机截取b个长度的子序列,而choice方法只能随机挑选一个序列。输出其对应的选课人数,该人数保存在字典number,根据键x取出相应的值听课笔记:_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________【变式1】 有如下Python程序段:import randomn=5data=[i+1 for i in range(n)]random.shuffle(data) #将序列的所有元素随机排序flag=True;i=0while ix=data[i]for j in range(i+1,n):if data[j] if data[j] x=data[j] else: flag=False breaki+=1若执行该程序段后flag值是True,则输出的data值不可能的是( )A.[2,3,4,1,5] B.[4,5,2,3,1]C.[1,3,2,5,4] D.[1,2,4,3,5]【例2】 小明用Python语言中对大小为100*100像素的图像“上.jpg”(如图所示)进行简单处理,部分代码如下:img=Image.open(″上.jpg″)im=np.array(img.convert(″L″)) #转换成数字矩阵rows,cols=im.shapefor i in range(rows):for j in range(cols):if j%10==0: im[i,j]=0程序执行后的图像效果是( )思维点拨明考向 本题考查图像模块的应用。语句rows,cols=im.shape的功能是读取图像的宽度和高度。外循环是宽度,即按行遍历图像,每读取完一行中所有列,再读取下一行。当是列为10的倍数时,将像素值修改为0,即改为黑色精点拨 A 当行的值是10的倍数时,将像素置为黑色B 实现上下(垂直)翻转的效果C 实现左右(水平)翻转的效果D 当列的值是10的倍数时,将像素置为黑色听课笔记:_________________________________________________________________________________________________________________________________________________________________________________________________________【变式2】 将图形转化为文本。应用Python中的Image模块后,将字母图片文件″OK.jpg″处理成由0,1表达的文本文件“OK.txt”。字母图片如图a所示,运行后文本文件结果如图b所示。实现该功能的Python程序如下,请完成划线处的程序代码。from PIL import Imagedef judge(R,G,B):gray=0.299*R+0.587*G+0.114*B#转成灰度值color=gray/132return colorimg=Image.open(″OK.jpg″)pix=img.load()file=open(①________,″w″) #读写方式打开文本文件width=img.size[0]②________for i in range(height):line=″″for j in range(width):R,G,B=pix[j,i] #根据像素坐标获得该点的RGB值③________if color==0: line+=″1″ else: line+=″0″file.write(line) #写入OK.txt文件file.write(″\\n″)file.close()1.有Python的程序代码如下:def change_c(s):if ″a″<=s<=″z″:s=chr(ord(s)-32)return sss=input(″请输入一串英文字母:″)n=len(ss)ans=″″for i in range(n):c=change_c(ss[i])ans=c+ans #①print(ans)现执行该程序,输入″abcDEF″,下列说法正确的是( )A.函数change_c()被调用了3次B.函数change_c的功能是将小写字母变成大写字母C.输出的内容为″ABCDEF″D.将①所在语句改为″ans+=c″程序功能不变2.有如下Python程序段:def fibres(n):a,b=1,1for i in range(n-1):a,b=b,a+breturn aprint(fibres(9))执行该程序段,输出显示的结果为( )A.21 B.34C.55 D.893.以下Python程序:def f(list):m=list[0]for i in range(1,len(list)):if ①________: m=list[i]return ms=[4,5,2,6,5,8]print(f(s))执行后,结果为2,横线处的代码为( )A.m>list[i] B.mC.m==list[i] D.m!=list[i]4.某加密算法程序段如下所示:def jiami(x):if ″A″<=x<=″Z″:y=chr(ord(x)+32)elif ″0″<=x<=″9″:y=str((int(x)+1)%10)else:y=xreturn ymingwen=input(″请输入明文″)miwen=″″for x in mingwen:miwen=miwen+jiami(x)print(″密文为:″,miwen)输入“Abc@789”并运行程序,输出结果是( )A.abc8910 B.abc@890C.ABC678 D.aBC@7895.有如下Python程序段:def delstr(s,m):return s[0:m]+s[m+1:]s=″Welcome″i=0while i<=len(s):s=delstr(s,i)i+=2print(s)执行该程序段后,输出的结果为( )A.ecm B.elomeC.elco D.elom6.体重指数(BMI)计算公式为体重/身高^2(单位:千克/米^2)。高一年级学生各个等级的单项评分表如下表所示:等级 低体重 正常 超重 肥胖男生 ≤16.4 16.5~23.2 23.3~26.3 ≥26.4女生 ≤16.4 16.5~22.7 22.8~25.2 ≥25.3小王编写了计算BMI指数(四舍五入保留两位小数)和测试评价等级的自定义函数。实现上述功能的Python程序如下,请在划线处填入合适的代码。def bmi(x,y): #根据体重x,身高y,计算BMI指数,四舍五入保留两位小数return ①________def dj(bmi,xb): #根据bmi指数值,分别计算男生和女生的等级。if bmi<=16.4:return 1elif xb==″男″ and bmi<=23.2 or xb==″女″ and bmi<=22.7:return 2elif xb==″男″ and bmi<=26.3 or xb==″女″ and bmi<=25.2:return 3else:②________sg=float(input(″请输入你的身高:″))tg=float(input(″请输入你的体重:″))bz={3:″超重″,4:″肥胖″,1:″偏瘦″,2:″标准″}③________print(″小王是男生,他的BMI指数为″,zs)print(″他的体型等级为:″,④________)7.编写一个自定义函数实现用户的登录,用户最多有3次可以尝试输入用户名和密码的机会。def login(a,b,u): #在字典u中判断用户名a是否存在,密码b是否正确if ①________:if ②________: print(″密码不正确″) return Falseelse: print(″登录成功″) ③________else:print(″帐号不正确″)return Falseu={″cgm″:″sd@1″,″cgl″:″&dd5″,″cjm″:″##22sd″,″1bh″:″12sa″,″1js″:″sd22!″} #系统中存在的用户名trytime=3while trytime>0: #有3次机会可以输入用户名和密码user=input(″请输入你的用户名:″)psd=input(″请输入你的密码:″)if ④________:breakelse:print(″你还剩下″,trytime-1,″次机会可以输入密码!″)⑤________8.函数random的方法如下表所示:名称 含义random.choice(seq) 从序列seq的元素中随机挑选一个元素random.sample(a,b) 从序列a中随机截取b个长度的子序列编写程序实现如下功能:随机产生3门不重复的选课科目,输出其对应的选课人数。import randomsubject=['政治','历史','地理','物理','化学','生物','技术']①________print(sub)number={'政治':307,'历史':219,'地理':396,'物理':170,'化学':116,'生物':265,'技术':225}num=[]for x in sub:②________print(num)上述程序段中划线处可选的语句为( )A.①sub=random.sample(subject,3) ②num.append(number[x])B.①sub=random.sample(subject) ②num.append(x)C.①sub=random.choice(subject,3) ②num.append(number[x])D.①sub=random.choice(subject) ②num.append(x)9.有如下Python程序段:from random import randints=″Infomation″for i in range(2):k=randint(0,2)*2+1 #randint(0,2)随机产生[0,2]之间的整数s=s[:k]+s[k+1:]执行该程序段后,变量s的值不可能是( )A.″Iomation″ B.″Inmation″C.″Infation″ D.″Ifoation″10.英语单词″illustriousness″意思是优秀,有如下Python程序段:import randoms=″illustriousness″for i in range(4):k=random.randint(0,4)*random.randint(0,3)print(s[k],end=″″)执行该程序后,输出的结果不可能是( )A.uiso B.iiiiC.tree D.siur11.某Python程序段如下:import randomfibo=[1]*11for i in range(2,11):fibo[i]=fibo[i-1]+fibo[i-2]n=random.randint(1,10)print(fibo[n])运行该程序段,输出结果不可能是( )A.1 B.21C.35 D.89专题5 函数和模块知识点一知识梳理1.子问题 2.函数 模块 3.函数值 4.调用经典案例例1 ①i变式1 ①range(len(s)) ②t=sn[s[i]] ③ans+=t*k**(len(s)-i-1)解析 本题考查自定义函数的应用。①从表达式s[i]来看,需遍历字符串s的各个位置。②不是数字就是A-F的字母,需在字典sn中取出相应的值。采用按权展开相加的方法,将各个位的数字与位权的乘积进行累加。例2 ①ans=2 ②break ③count变式2 ①je>0 ②ans[rmb[i]]=je//rmb[i] ③i+=1解析 本题考查自定义函数的应用。①je表示要兑换的人民币,每兑换相应的币种,要减去相应的金额,当金额为0时结束兑换。②从输出语句来看,字典中存储的人民币的币种和兑换的数量,因此当条件je >=rmb[i]满足时,兑换相应的币种并写入字典中。③若不能兑换,则换一下币种进行兑换。知识点二知识梳理1.Math模块 Random模块 Image模块 2.OS模块 Time模块 Numpy和Matplotlib Pygame模块 tkinter 3.一个模块 4.import from-import Sqrt Random经典案例例1 A变式1 B [本题考查随机数的应用。列表data初始值是1~5间的随机整数。遍历data数据,若data[i]比后面的数data[j]大,更新x的值;若data[j]大于等于x,则将flag的值置为False,结束程序。B选项当i=0,j=2时,此时x被更新为2,接下去当j=3时,满足条件data[j]x,因此flag被赋值为False,且直接退出循环。]例2 D变式2 ①″OK.txt″ ②height=img.size[1] ③color=judge(R,G,B)解析 本题考查Image模块的应用。①中读取文件名″OK.txt″。②中语句width=img.size[0]获取图像宽度,循环中for i in range(height)要求图像的高度。③中未对color赋值,调用自定义函数,返回0或1。当堂过关检测1.B [本题考查自定义函数的应用。从代码中可得自定义函数change_c的作用为返回形参s对应的大写字母。而后在执行程序中遍历字符串ss,多次调用自定义函数,并且将每次遍历到的字符经过转换后连接到原有的字符之前(倒序),最后输出。A选项该程序输入的内容为″abcDEF″长度为6,因此自定义函数被调用了6次;B选项正确;C选项最终输出的内容为FEDCBA;D选项将①改为“ans+=c”后结果是顺序输出,与原意不同。]2.B [语句a,b=b,a+b的作用是a=b,b=a+b。该自定义函数的功能是计算斐波那契数列。从第3项开始的值依次为2,3,5,8,13,21,34。]3.A [从函数运行结果来看,查找最小值。遍历列表list,若其值比m小,则更新m的值。]4.B [函数的功能是对字符串每个字符进行加密,如果是大写,转换成对应的小写字母,如果是数字,循环后移一位。其他不变,依次连接在后面。]5.D [自定义函数的功能:在字符串s中删除索引位置为m的字符。i值依次为0,2,4,6,字符串s的值依次为elcome、elome、elom。]6.①round(x/y**2,2) ②return 4 ③zs=bmi(tg,sg) ④bz[dj(zs,″男″)]解析 本题考查自定义函数编写和调用。①处根据体重x,身高y,计算BMI指数,四舍五入保留两位小数。②处指肥胖的情况。③处调用bmi函数,把tg和sg分别传给x和y。④dj函数返回1~4之间的数值,在字典bz中可以查找每个数值代表的文本信息。7.①a in u ②b!=u[a] ③return True ④login(user,psd) ⑤trytime-=1解析 本题考查自定义函数编写和调用。①在字典u中判断用户名a是否存在,密码b是否正确,首先判断a是否在字典b中,若存在用户u,则该用户的用户名是键,密码是值u[a],因此②处答案为b!=u[a]。当两者均正确时,需返回True。④处调用login函数,把用户名user和密码psd分别传至自定义函数中。⑤处将改变trytime的值,尝试的次数将减少一次。8.A [本题考查随机函数及字典的综合应用。sample方法从序列a中随机截取b个长度的子序列,而choice方法只能随机挑选一个序列。输出其对应的选课人数,该人数保存在字典number,根据键x取出相应的值。]9.B [语句s=s[:k]+s[k+1:]的功能是去除该字符串索引k位置上字符。循环2次,每次产生一个0至5之间的奇数k,接着去除k位字符。A选项″Infomation″→″Ifomation″→″Iomation″,k值均为1。B选项″Infomation″→″Infmation″→″Inmation″,k值依次为3和2,2不可能产生。C选项″Infomation″→″Infmation″→″Infation″,k值均为3。]10.C [k的值为0至4之间的数乘以0至3之间的数,[0,4]*0值均为0,[0,4]*1值依次为0、1、2、3、4,[0,4]*2值依次为0、2、4、6、8,[0,4]*3值依次为0、3、6、9、12,因此不可能产生5,7,10,11,即字符中不可能包含t。]11.C [本题考查列表及斐波拉契数列的相关知识。斐波拉契数列:1,1,2,3,5,8,13,21,34,55,89,144…n为该数列第2至第11项中随机一项,不可能为35,选C。] 展开更多...... 收起↑ 资源预览