资源简介 (共26张PPT)第七节 Python函数与模块信息技术 必修1 数据与计算算法的程序实现第三章必备知识练1. 下列关于函数的说法,不.正.确.的是( )A. 函数是用来实现单一功能的代码段,所以相对容易编写B. 函数能提高应用的模块性和代码的重复利用率C. 函数可以被独立测试,便于查找程序中的bugD. 当一个函数中没有return语句时,它不会返回任何对象【解析】 如果需要返回值,使用保留字return和返回值列表;若没有return语句,则返回一个None对象。D2. 某Python程序如下:def fun(x): x=6 return xx=3print(fun(x),x)程序运行后,输出的结果是( )A. 6 3 B. 3 3C. 6 6 D. 程序出错,抛出异常【解析】 当传递的参数是不可更改对象时,在函数内部修改形参的值,对实参没有影响。其中数字、字符串是不可更改对象,本题中x=3,属于不可更改对象,故在函数体内修改x的值,不影响实参x。需要注意的是,当局部变量与全局变量同名时,会屏蔽全局变量。A3. 随机生成一组由数字1~8组成的8位不重复的速记密码,Python程序如下:import randoma=[0]*8for i in range(8): a[i]=i+1k=8;s=""for i in range(8): m=random.randint(0,k-1) print(s)方框中的代码由以下三部分组成:①k-=1 ②a[m]=a[k-1] ③s+=str(a[m])代码顺序正确的是( )A. ①②③ B. ②③①C. ③①② D. ③②①【解析】 本题考查随机数及逻辑判断知识。首先在a中生成1~8的数,然后随机生成列表a的下标0~7,产生的数先要连接进s,然后将该数字删除,直到k为0为止。D4. 有如下Python程序段:import randomi=0;n=5res=[0]*nwhile i num=random.randint(1,10) #生成1~10范围内的随机整数 if num not in res: res[i]+=num i+=1print(res)执行该程序段后,res的值不.可.能.是( )A. [0, 4, 8, 1, 9] B. [6, 4, 5, 7, 3]C. [5, 7, 0, 10, 0] D. [10, 2, 0, 0, 0]【解析】 由代码可知,res中生成5个不重复的随机整数,范围是1~10,也可以包含0,但列表res的第一个元素不可能为0。A5. 下列表达式的结果为5的是( )A. abs(4.6) B. len( china )C. int(4.8) D. float(5)【解析】 本题主要考查Python函数。abs( )是求绝对值,len( )是求长度,int( )转换为整型数据,float( )转换为浮点型数据。abs(4.6)=4.6,len( china )=5,int(4.8)=4,float(5)=5.0。B6. “汉诺塔”游戏源于一个古老的印度传说,现在我们可以用计算机程序模拟盘子的移动过程,如果函数hanoi(n,s, m, t)表示把n个盘子从s杆移动到t杆,中间借助于m杆,那么把(n-1)个盘子从s杆移动到m杆,借助于t杆,可以表示为( )A. hanoi(n-1, t,s, m) B. hanoi(n-1,m, s, t)C. hanoi(n-1,s, t, m) D. hanoi(n-1,s,m, t)【解析】 本题主要考查函数的相关知识。由“函数hanoi (n,s,m,t)表示把n个盘子从s杆移动到t杆,中间借助于m杆”可知:第一个参数为盘子个数,第二个参数为原杆,第三个参数为借助的杆,第四个参数为目标杆。若要把(n-1)个盘子从s杆移动到m杆,借助于t杆,则可以表示为hanoi (n-1,s,t,m)。C7. 如下Python程序通过math模块下的floor函数对输入的实数进行取值:import mathn=float(input("请输入一个实数:"))n2= print(n2)程序运行后,若输入的实数为3.58,则横线上应填入的代码和最后输出的结果分别为( )A. math.floor[n] 4 B. math.floor(3. 58) 4C. floor(n) 3 D. math.floor(n) 3【解析】 math模块与floor函数的使用方式为 math.floor(x),其中x表示需要取整的值。本题对应输入的数据为n,且floor(x) 表示对x向下取整,因此输出的结果为3。D8. 某Python程序如下:import mathx=float(input("输入x:"))if x>1: y=math.pow(x, 2)else: y=math.pow(2, x)print(y)程序运行后,输入x的值为3,输出的结果为( )A. 8 B. 8.0 C. 9 D. 9.0【解析】 输入x的值为3,满足条件x>1,然后执行语句y=math.pow(x,2)=3**2=9.0,注意运算得到的结果为浮点数。D9. 如下Python程序可实现打开图像“b.jpg”, 输出该图像文件类型和尺寸大小,将其旋转90°,并另存为“b1.jpg”, 请在横线上填入合适的代码:①_______________,②_____________,③_____________________。 from PIL ① pic= ② ("b. jpg") print(pic. format)print(pic. size) ③ pic. save("b1. jpg")【解析】 ①处代码表示导入PIL库中的Image模块,应填入的代码为import Image;②处代码表示Image模块中打开图像文件的方法,应填入的代码为Image.open;③处代码表示将图像旋转90°,应填入的代码为pic.rotate(90).show()。import ImageImage.openpic.rotate(90).show()关键能力练10. 长方形的周长公式为C=2*(a+b) ,其中a和b分别为长方形的长和宽。如下Python程序实现输入长方形的长和宽,输出该长方形的周长:def zc(length, width) : return ca=float(input("输入长方形的长:"))b=float(input("输入长方形的宽:"))s=zc(a, b)print("该长方形的周长是"+str(s))下列关于该程序的说法,错.误.的是( )A. 程序运行后,输入3和4,输出的结果为“该长方形的周长是14.0”B. 程序中的语句“s=zc(a, b)”可以写成“s=zc(length, width)” C. 所定义的函数命名规则和变量名一样,不能以数字开头D. 程序中横线上应填入的代码为“c=2*(length+width)”【解析】 程序中的语句“s=zc(a,b) ”不能写成“s=zc(length,width) ”,因为函数调用的参数为实参a和b,不能用形参length和width。B11. 在Python程序中,下列导入第三方库的方式错.误.的是( )A. import turtleB. import turtle as ttC. from turtle import*D. from turtle【解析】 本题主要考查Python库的导入。在Python程序中,导入第三方库的保留字是import。D12. 某服装店内有A,B两种类型的优惠套餐。A套餐:满200元减50元,满500元减100元,满1000元减200元,满1500元减400元,满2000元减800元。B套餐:免费办理会员卡,会员卡可按定价的80%付费(按四舍五入法取整) 。每位顾客不能同时享受两种套餐优惠。现编写Python程序,输入所购买的商品总价,输出两种套餐分别应支付的金额,请在横线上填入合适的代码:①_______________,②________________________________________,③__________________。 def PAY(taocan, price) : if taocan=="A":if price<200: pay=priceelif price<500: pay=price-50elif price<1000: pay=price-100elif ① : pay=price-200elif price<2000: pay=price-400else: pay=price-800return pay elif taocan=="B": pay= ② return payp=int(input("商品总价:"))x1=PAY("A", p)x2= ③ print("选择A套餐,顾客应付:"+str(x1) +"元")print("选择B套餐,顾客应付:"+str(x2) +"元")price<1500round(price*0.8)或 int(0.5+price*0.8)PAY("B",p)【解析】 ①根据题目“满1000元减200元,满1500元减400元”可知,该处为总价大于或等于1000元、小于1500元的情况,上一个elif语句为小于1000元的情况,所以此处应填入的代码为price<1500;②根据题目“按定价的80%付费(按四舍五入法取整)”,应填入的代码为round(price*0.8) 或int(0.5+price*0.8);③此处为函数调用,计算B套餐应支付的金额,即PAY("B",p)。13. 每位具有中华人民共和国国籍的公民都有一个唯一的、不变的18位居民身份证号码。居民身份证号码的最后一位是根据前面17位数字计算出来的校验码。计算方法如下:将前面的居民身份证号码的17位数字分别乘以不同的系数。从第1位到第17位的系数分别为7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2。将这17位数字和系数相乘的结果相加;用相加的和除以11,看余数是多少,余数只可能是0,1,2,3,4,5,6,7,8,9,10这11个数字,分别对应居民身份证号码的最后一位为1,0,X,9,8,7,6,5,4,3,2。例如,如果余数是3,那么居民身份证号码的第18位数字就是9;如果余数是2,那么居民身份证号码的最后一位数字就是罗马数字X。设计一个自定义函数,根据输入的18位居民身份证号码,判断该居民身份证号码是否为有效居民身份证号码。实现上述功能的Python程序如下,请回答下列问题:函数功能:根据输入的18位居民身份证号码,判断该居民身份证号码是否为有效居民身份证号码函数名:check_id_num(id_num)参数表:id_num——存储了18位居民身份证号码的字符串返回值:若是有效居民身份证号码,则返回True, 否则返回 False示例1:对于id_num="330281200605302813", 返回True示例2:对于id_num="330281201010310641", 返回Falsedef check_id_num(id_num): factor=[7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] #校验码系数 remainder="10X98765432" s=0#存储17位数字和系数相乘后相加的结果 for i in range(len(factor)) :s= ① ② return remainder[r]==id_num[17](1)请在横线上填入合适的代码:①_____________________________,②__________。 (2)当id_num="330281201010310640"时,函数的返回值是__________。 s+factor[i]*int(id_num[i])r=s%11True【解析】 根据题意,可知,变量s用来存储17位数字和系数相乘后相加的结果,故①处答案为s+factor[i]*int(id_num[i])。需要注意的是要先将居民身份证号码字符串中的数字字符转化成整数再参与数学运算;变量r用来存储s除以11的余数,故②处答案为r=s%11。(2)如果是有效居民身份证号码,则返回True,否则返回False,根据计算方法可知题中的id_ num对应函数的返回值为True。14. 小美参加环保知识竞答比赛,回答结果存储在字符串中,其中回答正确用“T”表示,回答错误用“F”表示,回答错误不得分,连续答对k题,则第k题加k分。下面的自定义函数能根据答案字符串计算小美的总分。它的形式参数ans是一个只包含“F”和“T”两种字符的字符串,函数根据得分规则和答案字符串计算出总分。例如:当ans="FTTTFTTFFT"时,函数返回10;当ans="TTTTFFTFTF"时,函数返回12。现编写能实现上述功能的Python程序如下,请回答相应问题:def get_score(ans) : k, s=0, 0 for c in ans:if c=="T": k=k+1 s= ① else: k= ② return sans="FFFTTTTTFF"print(get_score( ③ )) (1)请在横线上填入合适的代码:①__________,②__________,③__________。 (2)当ans="FFFTTTTTFF"时,函数的返回值是__________。 s+k0ans15【解析】 根据题意可知,变量k和s分别用来存储当前答题得分和总分,它们的初始值均为0。因为连续答对k题,第k题加k分,最终返回总分,故第①空答案为s+k,第②空答案为0。调用函数时,只需在函数名后面的圆括号里填写实参ans即可。(2)ans="FFFTTTTTFF"时,s=1+2+3+4+5=15,即函数的返回值为15。15. 编写Python程序,实现如下功能:输入有序列的点,用逗号分隔和结束,从原点出发,依次用线段连接这些点,构成一条折线,计算折线的长度,并输出结果。例如,当输入的有序列的点为(3, 5),(6, 7),(12, 16) 时,程序输出的结果如图所示。请输入坐标点:3, 5, 6, 7, 12, 16,20. 253156996701257实现上述功能的Python程序如下,请在横线上填入合适的代码:①______________,②__________________________________________。 t%2==1d=math.sqrt((x2-x1)**2+(y2-y1)**2)import maths=input("请输入坐标点:")x1=y1=x2=y2=0m=n=0t=1totald=0for i in range(0, len(s)) : if s[i]==",":m=int(s[n:i])n=i+1if ① : x2=melse: y2=m ② totald=totald+d x1, y1=x2, y2 t=t+1print(totald)【解析】 t的初始值为1,当t的值为奇数时,表示当前提取的坐标点为x坐标点,当t为偶数时,表示当前提取的坐标点为y坐标点;①处应填入的代码为t%2==1;②处表示计算两点之间的距离公式,应填入的代码为d=math.sqrt((x2-x1) **2+(y2-y1) **2)。第七节 Python函数与模块1. 下列关于函数的说法,不正确的是( D )A. 函数是用来实现单一功能的代码段,所以相对容易编写B. 函数能提高应用的模块性和代码的重复利用率C. 函数可以被独立测试,便于查找程序中的bugD. 当一个函数中没有return语句时,它不会返回任何对象【解析】 如果需要返回值,使用保留字return和返回值列表;若没有return语句,则返回一个None对象。2. 某Python程序如下:def fun(x): x=6 return xx=3print(fun(x),x)程序运行后,输出的结果是( A )A. 6 3 B. 3 3C. 6 6 D. 程序出错,抛出异常【解析】 当传递的参数是不可更改对象时,在函数内部修改形参的值,对实参没有影响。其中数字、字符串是不可更改对象,本题中x=3,属于不可更改对象,故在函数体内修改x的值,不影响实参x。需要注意的是,当局部变量与全局变量同名时,会屏蔽全局变量。3. 随机生成一组由数字1~8组成的8位不重复的速记密码,Python程序如下:import randoma=[0]*8for i in range(8): a[i]=i+1k=8;s=""for i in range(8): m=random.randint(0,k-1) print(s)方框中的代码由以下三部分组成:①k-=1 ②a[m]=a[k-1] ③s+=str(a[m])代码顺序正确的是( D )A. ①②③ B. ②③①C. ③①② D. ③②①【解析】 本题考查随机数及逻辑判断知识。首先在a中生成1~8的数,然后随机生成列表a的下标0~7,产生的数先要连接进s,然后将该数字删除,直到k为0为止。4. 有如下Python程序段:import randomi=0;n=5res=[0]*nwhile i num=random.randint(1,10) #生成1~10范围内的随机整数 if num not in res: res[i]+=num i+=1print(res)执行该程序段后,res的值不可能是( A )A. [0, 4, 8, 1, 9] B. [6, 4, 5, 7, 3]C. [5, 7, 0, 10, 0] D. [10, 2, 0, 0, 0]【解析】 由代码可知,res中生成5个不重复的随机整数,范围是1~10,也可以包含0,但列表res的第一个元素不可能为0。5. 下列表达式的结果为5的是( B )A. abs(4.6) B. len( china )C. int(4.8) D. float(5)【解析】 本题主要考查Python函数。abs( )是求绝对值,len( )是求长度,int( )转换为整型数据,float( )转换为浮点型数据。abs(4.6)=4.6,len( china )=5,int(4.8)=4,float(5)=5.0。6. “汉诺塔”游戏源于一个古老的印度传说,现在我们可以用计算机程序模拟盘子的移动过程,如果函数hanoi(n,s,m,t)表示把n个盘子从s杆移动到t杆,中间借助于m杆,那么把(n-1)个盘子从s杆移动到m杆,借助于t杆,可以表示为( C )A. hanoi(n-1,t,s,m) B. hanoi(n-1,m,s,t)C. hanoi(n-1,s,t,m) D. hanoi(n-1,s,m,t)【解析】 本题主要考查函数的相关知识。由“函数hanoi (n,s,m,t)表示把n个盘子从s杆移动到t杆,中间借助于m杆”可知:第一个参数为盘子个数,第二个参数为原杆,第三个参数为借助的杆,第四个参数为目标杆。若要把(n-1)个盘子从s杆移动到m杆,借助于t杆,则可以表示为hanoi (n-1,s,t,m)。7. 如下Python程序通过math模块下的floor函数对输入的实数进行取值:import mathn=float(input("请输入一个实数:"))n2= print(n2)程序运行后,若输入的实数为3.58,则横线上应填入的代码和最后输出的结果分别为( D )A. math.floor[n] 4 B. math.floor(3.58) 4C. floor(n) 3 D. math.floor(n) 3【解析】 math模块与floor函数的使用方式为 math.floor(x),其中x表示需要取整的值。本题对应输入的数据为n,且floor(x) 表示对x向下取整,因此输出的结果为3。8. 某Python程序如下:import mathx=float(input("输入x:"))if x>1: y=math.pow(x, 2)else: y=math.pow(2, x)print(y)程序运行后,输入x的值为3,输出的结果为( D )A. 8 B. 8.0C. 9 D. 9.0【解析】 输入x的值为3,满足条件x>1,然后执行语句y=math.pow(x,2)=3**2=9.0,注意运算得到的结果为浮点数。9. 如下Python程序可实现打开图像“b.jpg”, 输出该图像文件类型和尺寸大小,将其旋转90°,并另存为“b1.jpg”,请在横线上填入合适的代码:① import Image ,② Image.open ,③ pic.rotate(90).show() 。from PIL ① pic= ② ("b. jpg")print(pic. format)print(pic. size) ③ pic. save("b1. jpg")【解析】 ①处代码表示导入PIL库中的Image模块,应填入的代码为import Image;②处代码表示Image模块中打开图像文件的方法,应填入的代码为Image.open;③处代码表示将图像旋转90°,应填入的代码为pic.rotate(90).show()。10. 长方形的周长公式为C=2*(a+b) ,其中a和b分别为长方形的长和宽。如下Python程序实现输入长方形的长和宽,输出该长方形的周长:def zc(length, width): return ca=float(input("输入长方形的长:"))b=float(input("输入长方形的宽:"))s=zc(a, b)print("该长方形的周长是"+str(s))下列关于该程序的说法,错误的是( B )A. 程序运行后,输入3和4,输出的结果为“该长方形的周长是14.0”B. 程序中的语句“s=zc(a, b)”可以写成“s=zc(length, width)”C. 所定义的函数命名规则和变量名一样,不能以数字开头D. 程序中横线上应填入的代码为“c=2*(length+width)”【解析】 程序中的语句“s=zc(a,b) ”不能写成“s=zc(length,width) ”,因为函数调用的参数为实参a和b,不能用形参length和width。11. 在Python程序中,下列导入第三方库的方式错误的是( D )A. import turtleB. import turtle as ttC. from turtle import*D. from turtle【解析】 本题主要考查Python库的导入。在Python程序中,导入第三方库的保留字是import。12. 某服装店内有A,B两种类型的优惠套餐。A套餐:满200元减50元,满500元减100元,满1000元减200元,满1500元减400元,满2000元减800元。B套餐:免费办理会员卡,会员卡可按定价的80%付费(按四舍五入法取整) 。每位顾客不能同时享受两种套餐优惠。现编写Python程序,输入所购买的商品总价,输出两种套餐分别应支付的金额,请在横线上填入合适的代码:① price<1500 ,② round(price*0.8)或int(0.5+price*0.8) ,③ PAY("B",p) 。def PAY(taocan, price) : if taocan=="A":if price<200: pay=priceelif price<500: pay=price-50elif price<1000: pay=price-100elif ① : pay=price-200elif price<2000: pay=price-400else: pay=price-800return pay elif taocan=="B": pay= ② return payp=int(input("商品总价:"))x1=PAY("A", p)x2= ③ print("选择A套餐,顾客应付:"+str(x1)+"元")print("选择B套餐,顾客应付:"+str(x2)+"元")【解析】 ①根据题目“满1000元减200元,满1500元减400元”可知,该处为总价大于或等于1000元、小于1500元的情况,上一个elif语句为小于1000元的情况,所以此处应填入的代码为price<1500;②根据题目“按定价的80%付费(按四舍五入法取整)”,应填入的代码为round(price*0.8)或int(0.5+price*0.8);③此处为函数调用,计算B套餐应支付的金额,即PAY("B",p)。13. 每位具有中华人民共和国国籍的公民都有一个唯一的、不变的18位居民身份证号码。居民身份证号码的最后一位是根据前面17位数字计算出来的校验码。计算方法如下:将前面的居民身份证号码的17位数字分别乘以不同的系数。从第1位到第17位的系数分别为7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2。将这17位数字和系数相乘的结果相加;用相加的和除以11,看余数是多少,余数只可能是0,1,2,3,4,5,6,7,8,9,10这11个数字,分别对应居民身份证号码的最后一位为1,0,X,9,8,7,6,5,4,3,2。例如,如果余数是3,那么居民身份证号码的第18位数字就是9;如果余数是2,那么居民身份证号码的最后一位数字就是罗马数字X。设计一个自定义函数,根据输入的18位居民身份证号码,判断该居民身份证号码是否为有效居民身份证号码。实现上述功能的Python程序如下,请回答下列问题:函数功能:根据输入的18位居民身份证号码,判断该居民身份证号码是否为有效居民身份证号码函数名:check_id_num(id_num)参数表:id_num——存储了18位居民身份证号码的字符串返回值:若是有效居民身份证号码,则返回True,否则返回False示例1:对于id_num="330281200605302813",返回True示例2:对于id_num="330281201010310641",返回Falsedef check_id_num(id_num): factor=[7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] #校验码系数 remainder="10X98765432" s=0#存储17位数字和系数相乘后相加的结果 for i in range(len(factor)):s= ① ② return remainder[r]==id_num[17](1)请在横线上填入合适的代码:① s+factor[i]*int(id_num[i]) ,② r=s%11 。(2)当id_num="330281201010310640"时,函数的返回值是 True 。【解析】 根据题意,可知,变量s用来存储17位数字和系数相乘后相加的结果,故①处答案为s+factor[i]*int(id_num[i])。需要注意的是要先将居民身份证号码字符串中的数字字符转化成整数再参与数学运算;变量r用来存储s除以11的余数,故②处答案为r=s%11。(2)如果是有效居民身份证号码,则返回True,否则返回False,根据计算方法可知题中的id_num对应函数的返回值为True。14. 小美参加环保知识竞答比赛,回答结果存储在字符串中,其中回答正确用“T”表示,回答错误用“F”表示,回答错误不得分,连续答对k题,则第k题加k分。下面的自定义函数能根据答案字符串计算小美的总分。它的形式参数ans是一个只包含“F”和“T”两种字符的字符串,函数根据得分规则和答案字符串计算出总分。例如:当ans="FTTTFTTFFT"时,函数返回10;当ans="TTTTFFTFTF"时,函数返回12。现编写能实现上述功能的Python程序如下,请回答相应问题:def get_score(ans) : k, s=0, 0 for c in ans:if c=="T": k=k+1 s= ① else: k= ② return sans="FFFTTTTTFF"print(get_score( ③ ))(1)请在横线上填入合适的代码:① s+k ,② 0 ,③ ans 。(2)当ans="FFFTTTTTFF"时,函数的返回值是 15 。【解析】 根据题意可知,变量k和s分别用来存储当前答题得分和总分,它们的初始值均为0。因为连续答对k题,第k题加k分,最终返回总分,故第①空答案为s+k,第②空答案为0。调用函数时,只需在函数名后面的圆括号里填写实参ans即可。(2)ans="FFFTTTTTFF"时,s=1+2+3+4+5=15,即函数的返回值为15。15. 编写Python程序,实现如下功能:输入有序列的点,用逗号分隔和结束,从原点出发,依次用线段连接这些点,构成一条折线,计算折线的长度,并输出结果。例如,当输入的有序列的点为(3, 5),(6, 7),(12, 16)时,程序输出的结果如图所示。第15题图实现上述功能的Python程序如下,请在横线上填入合适的代码:① t%2==1 ,② d=math.sqrt((x2-x1)**2+(y2-y1)**2) 。import maths=input("请输入坐标点:")x1=y1=x2=y2=0m=n=0t=1totald=0for i in range(0, len(s)) : if s[i]==",":m=int(s[n:i])n=i+1if ① : x2=melse: y2=m ② totald=totald+d x1, y1=x2, y2 t=t+1print(totald)【解析】 t的初始值为1,当t的值为奇数时,表示当前提取的坐标点为x坐标点,当t为偶数时,表示当前提取的坐标点为y坐标点;①处应填入的代码为t%2==1;②处表示计算两点之间的距离公式,应填入的代码为d=math.sqrt((x2-x1) **2+(y2-y1) **2)。 展开更多...... 收起↑ 资源列表 第七节 Python函数与模块.docx 第七节 Python函数与模块.pptx