資源簡介 專題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的轉變。 展開更多...... 收起↑ 資源預覽 縮略圖、資源來源于二一教育資源庫