资源简介 专题5 函数和模块知识点一 自定义函数1.使用Python程序编程探究平面上圆与圆的位置(圆心距离等于两个圆半径之和)相切的关系,程序代码如下:def judge(a,b):dis=(cir[a][0]-cir[b][0])**2+(cir[a][1]-cir[b][1])**2if dis==(cir[a][2]+cir[b][2])**2: return 1return 0cir={'A':[1,1,1],'B':[4,5,4],'C':[0,2,1]}#cir用于存储编号为'A'、'B'、'C'的三个圆圆心的x,y坐标及半径信息cnt=judge('A','B')+judge('A','C')+judge('B','C')运行程序后,变量cnt的值是( )A.0 B.1C.2 D.32.有如下Python程序:def count(a,i):for j in range(i+1,len(a)):if a[j] return j-ireturn 0a=[4,2,2,4,1,6]b=[1]*len(a)for i in range(len(a)-1):b[i]=count(a,i)print(b)运行该程序,则b[1]的值为( )A.0 B.1C.2 D.33.有如下Python加密程序段,以下说法正确的是( )def encrypt(code,key):code_new=''for s in code:s1=ord('a')+((ord(s)-ord('a'))+key)%26code_new+=chr(s1)return code_newcode=input(″code=″)print(encrypt(code,2))A.该加密程序段所用的加密算法是换位密码法B.若输入字符串code为“App”,则输出的结果为crrC.若要对数字字符逐个右移进行加密,则只需将加框处语句修改为“(int(s)+key)%10”D.将加框处语句修改为“ord('a')+((ord(s)-ord('a'))-key)%26”可将加密的密文还原为明文4.有如下程序段:def ds(s,i):if ″a″<=s[i]<=″z″:s=s[:i]+s[i+1:]elif ″0″<=s[i]<=″9″:s=s[:i]+str((int(s[i])+6)%10)+s[i+1:]return ss=″Yy23mm4″i=0while is=ds(s,i)i+=1print(s)执行上述程序段后,s的值为( )A.″Y89m0″ B.″Y29m0″C.″y23m4″ D.″89mm0″5.所谓亲密数是指如果整数x的全部因子(包括1,不包括x自身)之和等于y,且整数y的全部因子之和等于x,则x和y称为一对亲密数(x与y不相等)。小王想通过Python程序统计1~1000间的亲密数对的个数。def yzh(m):yz_sum=0for i in range(2,m//2+1):if ①________: yz_sum+=ireturn yz_sumn=0for x in range(1,1001):y=yzh(x)if ②________:n=n+1print(″共有亲密数对:″,n)则代码中①②处的语句可为( )A.①m%i!=0 ②x==yzh(y) and x!=yB.①m%i==0 ②x==yzh(y) and x!=yC.①m%i!=0 ②x==yzh(y) or x!=yD.①m%i==0 ②x==yzh(y) or x!=y6.有如下Python程序段:def f(m):a=m%10b=m//10%10c=m//100if c**3+b**3+a**3==m:return ″YES″else:return ″NO″m=int(input(″输入一个三位数:″))print(f(m))执行该程序段后,若输出结果为“YES”,则输入变量m值可能为( )A.121 B.134C.153 D.1427.有如下Python程序段:def sel(a,b,c):if aa+=b;b=a-b;a=a-bif at=a;a=c;c=tprint(a,b,c)sel(1,2,3)执行该程序段后,输出的结果是( )A.1,2,3 B.3,2,1C.3,1,2 D.1,3,28.回文素数:(1)素数:指整数在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。例如11,它只能被1和11整数,所以11是素数。(2)回文数:正读和反读都是一样的数字,例如12321,它的正反都是一样,是回文数字。编写Python程序,实现如下功能,找出100~n中的所有的回文素数(n为>=100的正整数)。程序代码如下,请回答下面问题:(1)如果n=1000在最后添加print(151 in L),该语句的输出的结果是________。(2)请在横线处填入合适的代码。import mathdef prime(n): #判断n是否是素数i=2k=int(math.sqrt(n))while i<=k:if ①________: breaki=i+1return i>kdef rev(n): #倒转数字t=0while ②________:t=t*10+n%10n=n//10return tn=int(input('请输入整数 n:'))L=[]for i in range(100,n+1):if ③________:if prime(i)==True: L=L+[i]print('100到n中的回文素数:',L)9.数学中,有一些数比较神奇,如数″101″,既是一个质数又是一个回文数(从左到右和从右到左是看一样的),我们称这样的数为“神奇数”。小慈设计算法并编写程序来找出范围[a,b]间的所有“神奇数”,运行效果如图所示(范围为[100,200])。请回答下列问题。(1)区间范围[300,400]中的“神奇数”有________。(写出任意一个满足符合区间题描述的“神奇数”)(2)Python程序实现代码如下所示,请将划线处代码补充完整。def isprime(k): #判断k是否为质数for i in range(2,①________):if k % i==0: return Falsereturn Truedef ishw(k):flag=Truefor i in range(len(k)//2+1):if k[i]!=k[②________]: flag=False break③________a,b=map(int,input().split()) #在同一行中输入a、b两个整数for i in range(a,b+1):if isprime(i) and ④________:print(i)10.小明同学设计了一种加密算法,将自己的一些私密字符串数据(例如他在各个网站和APP注册的用户名和密码等数据信息,这里统称为明文数据)进行了加密,他设计的加密算法有如下规则:①将明文数据中的所有大写字母均转换为小写字母,例如A→a,B→b…Z→z②将明文数据中的所有数字减去2变成另一数字,例如0→8,1→9,2→0…9→7③明文数据中的其他字符均不转换④将加密后的数据倒序输出,例如“abc→cba”例如明文数据“aBC+789”加密后的数据为“765+cba”,他根据以上加密规则编写了下列Python 程序:def jiami(x):if ″A″<=x<=″Z″:y=①________elif ″0″<=x<=″9″:y=str((int(x)-2)%10)else:y=②________return ymingwen=input(″请输入明文数据:″)miwen=″″for i in mingwen:miwen=③________print(″加密后的密文为:″,miwen)(1)根据小明的加密算法,明文字符串“My123”加密后的结果为________。(2)根据题意,请在划线①②③处填上合适的语句或表达式。11.某高速公路全长521公里,含起点与终点共设有15个出入口,编码为0~14,各站点离起点距离如表所示。该高速公路对于不同类型的车辆,采取不同的收费标准,各类型车辆的收费标准如下,总费用=入口费+总里程*里程费,为方便找零,实际收取的费用做四舍五入处理。各站点离起点距离表(单位:公里)0 1 2 3 4 5 6 7 8 9 10 11 12 13 140 21 56 78 121 163 185 221 257 271 294 314 399 478 521五类车辆收费标准表车辆类别 客车 货车 入口费(元) 里程费(元/公里)一类 20座(含)以下 2吨(含)以下 5 0.40二类 20座以上40座 (含)以下 2吨以上5吨(含)以下 10 0.80三类 40座以上 5吨以上10吨(含)以下 15 1.20四类 / 10吨以上15吨 (含)以下 20 1.60五类 / 15吨以上 25 2.00该高速公路某天各站点车辆的进出情况存储在“Highway.txt”中,第一项数据为车辆的进出站状态(0表示进站,1表示出站),第二项数据为车辆类别,第三项数据为站点编号(0~14),第四项数据为车牌号。小张编写了Python程序,计算高速公路一天的总收入。(1)某4座小客车从7号站点进入高速,1号站点出高速,应缴费________元。(2)程序代码①②③如下所示,请将划线处代码补充完整。def fee(i,o,t):mileage=①________price1=t*5price2=t*0.4*mileagereturn price1+price2f=open(″Highway.txt″,″r″,encoding=″utf-8″)line=f.readline()total=0dic={}s=[0,21,56,78,121,163,185,221,257,271,294,314,399,478,521]b={″一类″:1,″二类″:2,″三类″:3,″四类″:4,″五类″:5}while line!=″″:line=line.strip() #去除末尾换行符a=line.split(″,″)if ②________:dic[a[3]]=int(a[2])else:money=fee(dic[a[3]],int(a[2]),b[a[1]])total=③________line=f.readline()f.close()print(″该高速公路总收入为:″,total)知识点二 模块的导入和应用1.编写Python程序,模拟“石头剪刀布”的游戏,实现电脑随机输出“石头”、“剪刀”、“布”。函数功能表如下:名称 含义random.random() 随机生成一个[0,1)范围内的实数random.randint(a,b) 随机生成一个[a,b]范围内的整数random.sample(seq,k) 从序列中随机挑选k个元素random.shuffle(seq) 将序列的所有元素随机排序下列代码段中能够实现该功能的是( )①import random a={0:″石头″,1:″剪刀″,2:″布″} b=int(random.random()*2) print(a[b])②import random a={0:″石头″,1:″剪刀″,2:″布″} b=random.randint(0,2) print(a[b])③import random a=[″石头″,″剪刀″,″布″] b=random.sample(a,1) print(b[1])④import random a=[″石头″,″剪刀″,″布″] random.shuffle(a) print(a[1])A.①③ B.①④C.②③ D.②④2.有如下Python程序段。import turtle as ttt=tt.Pen() #导入海龟,定义画笔timport randomtt.bgcolor(″white″)colors=[″red″,″green″,″blue″,″yellow″]for x in range(100):t.pencolor(colors[x%random.randint(1,4)]) #设置画笔的颜色t.cirle(x) #画半径是x像素的圆t.left(91) #画笔方向逆时针旋转91度关于该程序段,下列说法正确的是( )A.程序运行后,绘制了100个同心圆B.程序运行后,绘制的所有圆的颜色不可能都为红色C.程序运行后,最后绘制的一个圆的颜色可能为黄色D.程序运行后,绘制的各圆没有交点3.有Python程序如下:import randomn=7a=[0]*na[0]=random.randint(60,100)for i in range(1,n):a[i]=a[i-1]-random.randint(0,i)for i in range(1,n,2):a[i]=a[i]-a[i-1]%2print(a)执行上述程序后,输出的数据可能为( )A.[67,65,64,64,61,61,54]B.[72,71,72,69,67,62,57]C.[83,81,81,77,75,73,69]D.[94,94,94,89,89,88,82]4.有如下程序段:from random import randints=″python″k=randint(1,4)for i in range(k):j=i+1while js[i]:j+=1if js=s[:j]+s[j+1:]else:s=s[:len(s)-1]print(s)执行该程序段后,s的值不可能是( )A.″py″ B.″pyo″C.″pytn″ D.″pyton″5.生成一组由数字1~8组成的8位不重复的随机密码,Python程序段如下:from random import*a=[0]*8for i in range(8):a[i]=i+1k=8;s=''for i in range(8):m=randint(0,k-1)print(s)方框中的代码由以下三部分组成:①k-=1 ②a[m]=a[k-1] ③s+=str(a[m]) 代码顺序正确的选项是( )A.①②③ B.②③①C.②①③ D.③②①6.有下列Python程序段:import randoms=input(″请输入字符串:″)x=random.randint(3,6)n=len(s)if len(s[0:x])r=s[x:n]+s[0:x]else:r=s[0:x]+s[x:n]print(r)执行该程序段,若输入“helloworld”(不包含双引号),则输出的结果不可能的是( )A.loworldhel B.oworldhellC.helloworld D.worldhello7.小明用下列Python程序将图a处理成图b所示效果#导入Image、numpy、pyplot库,代码略img=np.array(Image.open('dj.jpg').convert('L'))row,cols=img.shapefor i in range(row):for j in range(cols):if img[i,j]>188: #第7行 img[i,j]=1 #第8行,1表示白色else: #第9行 img[i,j]=0 #第10行,0表示黑色#输出图像,代码略发现处理后的图像不理想,他要想将图像处理成图c所示效果,则可做的修改是( )A.将第7行中的数字'188'改成'138'B.将第7行中的数字'188'改成'250'C.将第7行中的'>'改成'<'D.将第8行的代码与第10行的代码互换8.现有一幅文件名为“车牌.jpg”的彩色图像,车牌底色为蓝色,如图a所示,通过Python程序对该图像进行二值化,即将车牌蓝色部分变为白色,其他全部变为黑色,如图b所示,以凸显出车牌的轮廓。程序代码如下,请在划线处填入合适的代码。from PIL import Imageimport numpy as npimport matplotlib.pyplot as plt #获取车牌蓝色的RGB分量的边界,红色rl,r2,绿色gl,g2,蓝色 b1,b2。代码略img=np.array(Image.open(″①________″))#打开图片并将其像素矩阵存入imgrows,cols=img.shape[0],img.shape[1]imgnew=np.zeros(shape=(rows,cols))# imgnew用于存储结果图像,大小和 img相同for i in range(rows):for j in range(cols):r,g,b=img[i,j] #获取img当前位置的r,g,b分量if r1<=r<=r2 and g1<=g<=g2 and b1<=b<=b2: imgnew[i,j]=255 #将新矩阵该位置设为白色else: ②________plt.figure('车牌')plt.imshow(imgnew,cmap='gray')plt.axis('off')plt.show()9.如图所示的车牌,经过如下Python程序处理后,from PIL import Imagef=open(″cp.txt″,″w″) #以写入模式打卡“cp.txt”文件im=Image.open(″cp.jpg″)im=im.convert(″L″)im=im.resize((90,21)) #将图片尺寸大小修改为 90*21pix=im.load() #读取所有像素点的颜色值for j in range(im.size[1]):ans=″″for i in range(im.size[0]):if pix[i,j]>=128: r=″*″else: r=″ ″ ans+=rans=ans+″\r\n″ #″\r\n″表示回车换行f.write(ans)f.close()“cp.txt”文件得到的效果是( )10.答题卡的准考证填涂区域如图a所示,将该图以行的方式进行编码,未填涂的地方用0表示,填涂的地方用1表示,则第1行编码是:000110000,第2行编码是:000000001,……,最后1行(第10行)编码是:100000000。由于每一行的编码都是9位二进制,所以,将每一行编码前后连接起来,可以得到一个长度为90的二进制字符串。在文件codes.txt中,保存了某班所有同学的姓名和准考证的90位长度二进制编码,请设计算法,解析出每一位同学的准考证号,并将解析结果保存在文件zkzh.txt文件中(注:由于填涂错误,可能导致某些同学的编码无法解析出对应的准考证号)。codes.txt和zkzh.txt文件内容示例如图b和图c所示:实现上述功能的Python代码如下,请回答下列问题:def jiexi(code): #将二进制编码字符串解析为准考证号字符串n=len(code)if n!=90:return 'Error!'else:s,t='',0for i in range(n-1,①________,-1): c=0 for j in range(i,-1,-9): if code[j]=='1': c+=1 ②________ if : return 'Error!' else: s+=str(t)return s#主程序fin=open('codes.txt','r')fout=open('zkzh.txt','w')for info in fin:info=info.strip() #strip()清除字符串末尾的换行标记info_list=info.split(',') #split()将字符串分割为字符串列表fout.write(info_list[0]+',')fout.write(③________+'\n') #'\n'表示换行fin.close()fout.close()(1)请在划线处填入合适代码。(2)加框处代码有误,请修改为正确代码。11.设计一个答题卡填涂识别程序(答题卡样式如图a所示,每张答题卡共计5个选择题)。具体算法思想如下:①读取答题卡图像,根据图像像素点灰度值(根据RGB值计算得到,若小于设定阈值则表示已填涂),确定单个像素点是否被填涂;然后根据单个选项填涂区域内像素点的填涂比例,确定当前选项是否被填涂。如果填涂比例超过70%,表示选项已涂。②建立答题卡坐标模型(如图b),计算每个选项坐标位置;根据坐标位置遍历每个选项,读取并存储选项值。实现上述功能的Python程序如下,请回答下列问题:(1)程序运行,读取图a答题卡1,输出结果为“CBDCA”,则识别答题卡2,输出结果为________。(2)请根据题目要求,完善程序代码:from PIL import Imagex0=39;y0=18 #初始化(x0,y0)像素点坐标fw=23;fh=13 #初始化选项填涂区宽度和高度ch=″ABCD″;s=″″def judge(x,y): #判断一个选项是否填涂count=0for i in range(x,x+fw+1):for j in range(y,y+fh+1): R,G,B=pixels[i,j] #提取填涂区i行j列位置像素点RGB值 if 0.299*R+0.587*G+0.114*B<132:#设定灰度阈值为 132 count+=1return #选项区域内>=70%像素点填涂表示该选项已填涂tw=35;th=22image=Image.open(″答题卡1.bmp″) #用Image模块打开答题卡1图片pixels=image.load()①________#设定答题卡题数for row in range(num):flag=Falsefor col in range(4):a=x0+tw*col②________if judge(a,b)==True: ③________ flag=Trueif flag==False:s+=″#″print(s)(3)程序加框处语句有误,应改为:________。12.用以下算法记录图像的像素点分布,现有图像如图a所示,先将像素的颜色值进行调整,使之成为一幅黑白图像如图b所示,再将黑白图像中像素点(0表示黑色,1表示白色)分布以列表形式存储,如[2310,321,1230……]表示先有231个连续的黑色像素,再接着是32个连续的白色像素,再接着是123个连续的黑色像素……,列表中部分数据如图c所示。实现上述功能的Python代码如下:#导入库代码略img=np.array(Image.open(″hz.png″).convert(″L″)) #将图像转换为二维矩阵rows,cols=img.shape #图像尺寸分别赋值,rows表示行数,cols表示列数for i in range(rows):for j in range(cols):if img[i,j]>180: #0~255表示256级灰度值,0表示黑色,255表示白色 img[i,j]=1else: img[i,j]=0plt.imshow(img,cmap=″gray″) #显示灰度图像plt.show() #弹出包含了图片的窗口c=img[0,0];cnt=0;ys=[]for i in range(rows):for j in range(cols):if img[i,j]==c: ________________else: ys.append(cnt*10+c) cnt=1 ys.append(cnt*10+c)print(ys)(1)由程序代码可知,对图像的记录方式采用的方式是________(填字母:A.逐行记录/B.逐列记录/C.随机)。(2)若得到图d颜色加深的图像,则划波浪线处代码应修改为________(单选)。A.img[i,j]>210B.img[i,j]>140C.img[i,j]<140D.img[i,j]<210(3)在横线上填上合适的代码。(4)程序加框处代码有错,请改正。专题5 函数和模块知识点一1.C [本题考查自定义函数。字典cir初始存储了三个圆的圆心和半径信息。judge('A','B')是判断圆A和圆B是否相切,如果相切,返回值为1,否则为0。当前A、B两圆,B、C两圆相切,所以变量cnt的值为2。]2.D [自定义函数功能是在索引位置i后面找到第1个比该a[i]小的数,返回他们的之间的距离,若后面没有比较他小的数,返回0。数组b的值依次为[1,3,2,1,0,1]。]3.D [A选项是移位加密。B选项输出结果为wrr。]4.B [如果是小写字母,则进行删除操作。若是一个数字,循环向后移3位。i=1时,删除字符y,s=″Y23mm4″,接着i值为2,3变9,删除第1个m,接着4变0。]5.B [本题考查自定义函数及其调用。从程序可得自定义函数的功能为求自然数除本身外的因子和,①后将i累加进入,因此i为质因数,满足m%i==0,②处for循环的作用为遍历1-1000所有的书,寻找总共有多少数是满足条件的,并且输出,以满足x所有的质因数之和为y,同时还需要满足x==yzh(y) and x!=y才能说是亲密数,因此答案为B。]6.C [本题考查自定义函数的应用。a、b、c分别是数m的3个位上的数字,符合立方和等于他本身,因此属于水仙花数。]7.C [语句组a+=b;b=a-b;a=a-b和t=a;a=c;c=t的功能均为交换两个变量的值。]8.(1)True (2)①n%i==0 ②n>0或n!=0或n>=1 ③rev(i)==i解析 本题考查自定义函数及枚举算法(循环结构)。程序实现的效果:找出100~n中的所有的回文素数(n为>=100的正整数)。(1)根据程序可得最终符合条件的所有的数字都在列表L中,151满足回文素数的条件,因此151 in L的值为True,特别要注意的是首字母必须大写。(2)①自定义函数prime(n)的功能为判断n是否是素数,因此当找到2-k范围内能被n整除的数字时,就可以判断n为合数,因此①填n%i==0。②自定义函数rev(n)功能为倒转数字,while循环的作用为对数字n进行倒转,即取数字n各个位置上的数字进行相应的处理,通过循环体中n=n//10一句可得处理的过程为取后面的数字存储在t中,再取最后第二位数字,更新t的值……直到n中所有位置上的数字全都取完并且存入t中,因此当n>0时需要一直进去循环,答案为:n>0或n!=0或n>=1。③主程序为寻找100-n之间的所有的回文素数并且存储在列表L中,for循环完成遍历所有数据并且判断数据是否符合条件,将符合条件的数据存储在列表L中的功能,内置if语句调用函数prime,判断这个数是否为素数,还需要满足一个条件即回文,因此③判断当前数字与其回文数字是否相当:rev(i)==i。9.(1)313、353、373、383写出其中任意一个均得分 (2)①k-1或其他等价答案 ②len(k)-1-i或其他等价答案 ③return flag或其他等价答案④ishw(str(i))或其他等价答案解析 (1)区间范围[300,400]的回文数有303,313,323,333,343,353,363,373,383,393,找出其中的素数。(2)自定义函数isprime判断k是否为质数,质数的条件是不能被除了1和他本身外的数整除,因此i的范围是2-(k-1)。自定义函数ishw判断字符串k是否是回文,0和len(k)-1,1和len(k)-2是对称位置,因此索引位置i和其对称位置之和为len(k)-1,则索引位置i的对称位置为可以表达为len(k)-1-i,如果不相等,则flag的值为False,③处将返回函数的值。④处将判断数i是否为回文,但要注意数据类型。10.(1)109ym (2)①chr(ord(x)+32) ②x ③jiami(i)+miwen解析 (1)数字循环左移2位,123变为901,y不变,m小写,再逆序。(2)①处将大写转换成小写。②x为其他字符,保持不变。③加密后的字符逆序输出。11.(1)85 (2)①abs(s[o]-s[i])或abs(s[i]-s[o]) ②a[0]==″0″ ③total+int(money+0.5)解析 本题考查自定义函数和字典的应用。a[0]值为″0″,表示入口,将车牌号和入口的站点编号保存在字典dic中,车牌号码作为键,站点编号作为值;若读取的是出口,在字典dic中读出该车牌的入站编码,该车牌号码对应入站、出站编号和车子类型传递给自定义函数fee,进行统计该车辆金额。在自定义函数中,参数t对应的值为b[a[1]],即车辆的类型。Mileage应为路程,即出口和出口差的绝对值。知识点二1.D [本题考查随机数、字典和列表的应用。A选项int(random.random()*2)产生的范围是0或1。C选项在列表a中随机挑一个,因此b的值应为″石头″、″剪刀″或″布″,而b[1]是这些字符中第1个字符。]2.C [本题考查随机数和海龟模块应用。一共画了100个圆,每画完一个圆,画笔回到原点,且方向逆时针旋转91度,因此所有的圆起点是一样的,因此有交点,但不是同心圆。若x%random.randint(1,4)的值均为0,则可能全部是红色的。]3.C [本题考查随机数。第一个循环的功能是产生一个非增数列,且从a[1]开始,与前面数的差距不得超过1,2,3,4,5,6。第二个循环的功能是对偶数位的数减去a[i-1]%2,即减去0或1。A选项最后一个数54与前一个数的差距为7,超出范围。B选项71前是偶数,可能是71-0,但后面不可能是72。D选项88前一个数是89,由此该数为89-1=88,而89-82=7,超出范围。]4.C [本题主要考查顺序查找。随机产生1-4范围内的整数,查找字符串s中索引大于i的字符中,第一个在字母表中位于s[i]之前的字符对应的索引位置j。如果查找到j,则剔除字符串s中索引位置为s=s[:j]+s[j+1:]j的字符。否则如果未找到或j超出字符串s的长度,剔除s=s[:len(s)-1]字符串s中最后一个字符。]5.D [把随机产生的字符连入s中,将最后一个位置的字符移动到m的位置,同时把长度减小1。]6.D [本题综合考查了Random模块函数的应用及分支结构及字符串的切片。x为采用Random模块产生的[3,6]之间的随机整数,按照题意输入helloworld后n的值为10,带入if的条件表达式可得,执行第一个分支(将索引值x前面的字符后置)的条件为x<5,推得执行第二个分支(不改变字符顺序)的条件为x>=5,通过对选项的处理可知A中hel后置,x的值为3,可行;B选项hell后置,x的值为4,符合条件,可行;C选项不改变顺序,x>=5,可行;D选项hello后置,可得x=5,而x=5时应执行第二个分支的语句。]7.A [在灰度图像中,从黑到白的值依次为0~255,图c相对图b来说,白色的区域更多,因此在二值化时,将阈值改小,将更多的区域设置为白色。]8.①车牌.jpg ②imgnew[i,j]=0解析 ①打开图片车牌.jpg文件。②二值化,大于某个阈值为255,否则为0,黑色的值为0。9.B [黑色的转换为″*″,白色写入空白。]10.(1)①n-10或80 ②t=j//9 ③jiexi(info_list[1])[::-1] (2)c!=1或者c>1 or c<1解析 (1)jiexi函数的功能是将二进制编码code字符串解析为准考证号字符串。答题卡的准考证有9个数字,每一列表示一个数字,但code字符串是行存储的。①n表示code的长度,在循环for j in range(i,-1,-9)中,可见准考证号码的每两个数字之间索引位相差9。外循环i每循环一次,取出准考证号码的一个数字,因此外循环应循环9次,初值为n-1,可见先取出准考证最后一个数字,索引号n-9为准考证的第1个数字,range是一个左闭右开的区间,结束位置应为n-10。②code字符串索引号0-9为第一行数字,转换为0;索引号10-17为第2行数字,转换为1;索引号18-26转化为2,可以推导出索引整除9即为转换后的数字。③调用jiexi函数将90个0或1的数字转换成9位准考证号,变量i的初值为n-1,因此转换为逆向的准考证号。(2)每10个二进制数中,只有一个被填涂过,因此只有一个1,变量c表示1的个数,当c为0或大于1时,表示不合法的准考证数字。11.(1)AB#DC (2)①num=5 ②b=y0+th*row ③s+=ch[col] (3)count>=fw*fh*0.7解析 本题考查Python程序综合阅读程序能力。(1)依据题目和程序可知答题卡2中第3题没有填涂,用“#”代替,因此答题卡2识别结果是AB#DC。(2)①设定答题卡数量,故该处代码是num=5;第1个for循环row枚举每个选择题,col枚举每个选择题的列(4个选项),变量a存储第row行第col列左上角坐标的横坐标,纵坐标存变量b中,从图b中可知b的表达式为y0+row*th,故②处代码是y0+row*th,有了选项ABCD的左上角坐标,可以调用自定义函数judge()判断该选项是否填涂,③处代码表示该col列被填涂了,输出相应的选项“ABCD”,因变量ch存储常量“ABCD”,同时每题的填涂都要记录,故该处的代码是s+=ch[col];(3)加框处代码是判断区域是否填涂,依据题目要求是:填涂比例超过70%,故该处代码应该是count>=fw*fh*0.7。12.(1)A (2)A (3)cnt+=1 (4)c=1-c或c=abs(c-1)或(c+1)%2或c=img[i,j]解析 (1)rows表示行数,cols表示列数,在每一行中遍历每一列,因此是逐行记录。(2)0表示黑色,255表示白色,当img[i,j]>180时为白色,现黑色部分要增多,因此白色区域范围更小。(3)cnt表示连续相同的个数,因此应为计数。(4)c的初值为img[0,0],其值为0或1,统计一个连续相同的点,应对c进行0变1或1变0的转变。 展开更多...... 收起↑ 资源预览