資源簡介 課時7 函數與模塊課時目標1.掌握自定義函數的構造和調用方法。2.掌握模塊的導入方法和常用函數的應用。一、模塊1.Python內置模塊:數學運算math模塊、生成隨機數random模塊、圖像Image模塊。2.Python其他模塊:用于實現部分操作系統功能(可用于文件、目錄等操作)的os模塊,與時間處理有關的time模塊,可實現科學計算、數據可視化的numpy和matplotlib,用于多媒體開發和游戲軟件開發的pygame模塊,支持圖形處理的tkinter等。3.在Python中,把一組函數放到一個.py文件里,這個文件就稱為一個模塊。4.使用import語句或from-import語句導入Python內置的模塊和來自第三方的模塊,將能使用其中的函數,如sqrt和random函數。二、函數的構造和應用def函數名(參數集合): <函數體> [return函數值]函數名的命名規則和變量名一樣。完成函數的構造后,在程序中就可以根據需要,像內建函數一樣調用該函數。三、模塊的導入及應用在Python Shell中導入math模塊,并調用該模塊中的sqrt函數,可采用以下兩種方法:方法一 方法二>>>import math>>>math.sqrt(9)3.0 >>>from math import sqrt>>>sqrt(9)3.01.math模塊中的常用常數與函數名稱 含義math.e 自然常數emath.pi 圓周率πmath.ceil(x) 對x向上取整,比如x=1.2,返回2math.floor(x) 對x向下取整,比如x=1.2,返回1math.pow(x,y) 指數運算,得到x的y次方math.log(x) 對數,默認基底為emath.sin(x) 正弦函數math.cos(x) 余弦函數math.tan(x) 正切函數math.degrees(x) 角度轉換成弧度math.radians(x) 弧度轉換成角度2.random模塊中的常用函數名稱 含義random.random() 隨機生成一個[0,1)范圍內的實數random.uniform(a,b) 隨機生成一個[a,b]范圍內的實數random.randint(a,b) 隨機生成一個[a,b]范圍內的整數random.choice(seq) 從序列的元素中隨機挑選一個元素,比如:random.choice(range(10)),從0到9中隨機挑選一個整數random.sample(seq,k) 從序列中隨機挑選k個元素random.shuffle(seq) 將序列的所有元素隨機排序 例1 編寫一個自定義函數實現判斷字符串s是否是回文字符串,請在劃線處填入合適的代碼。算法思想:采用雙指針分別指向首尾字符,若兩者相同,依次向中間靠攏def hw(s): i=0 j=len(s)-1 while ① : if ② : return False i+=1 j-=1 return Trues1=input('請輸入字符串s:')t=hw(s1)if ③ : print("字符串"+s1+"是回文字符串!")else: print("字符串"+s1+"不是回文字符串!")答案 ①i解析 本題考查自定義函數的應用。①指針i和j分別指向字符串s的首和尾,在兩端各取一個字符進行比較,若i==j意味著該字符串長度為奇數,中間位置可以不用比較,若字符串長度為偶數,最后一次比較完后,i將超出j的值。②若兩端各取一個字符,取出的字符不相等,返回假。③調用自定義函數,將函數的值賦給t,那么t可能是True或False。變式訓練1 下列Python函數實現了將大寫字母循環后移t個位置功能,如A向后移3個位置后變為D,X后移3位后,變成A。已知'A'的ASCII碼值為65。def jm(s,t): n=ord(s)-65+t if n>=25: return chr(n+65)(1)請在程序劃線處填入合適的代碼。(2)若執行語句print(jm('Y',4)),則輸出的內容是 。 答案 (1)n=n-25 (2)C解析 根據題目的功能,n是加密字母在字母中位置,值的范圍是[0,25],如果向后移動后超出25,則表示循環向前移動,需要減去25,最后返回ASCII碼值對應的字母。將Y后移4位的值為C。例2 生成一個隨機密碼,要求大寫字母、小寫字母和數字必須至少包含一個,且密碼的長度不能少于6位。編寫的Python代碼如下:import randomdef pas(): a="abcdefghijklmnopqrstuvwxyz" b="ABCDEFGHIJKLMNOPQRSTUVWXYZ" c="0123456789" st=a+b+c d=[] d.append(① ) #從字符串a中隨機取一個字符 d.append(② ) #從字符串b中隨機取一個字符 i=2 f=True while i<=5③ f: d.append(random.choice(st)) if d[i]>="0" and d[i]<="9": f=False i+=1 random.shuffle(d) #將序列d中所有元素隨機排序 print("".join(d))pas()(1)請在程序劃線處填入合適的代碼。(2)執行上述算法, (填:可能/不可能)產生密碼“Eaf8dLdeS”。 答案 (1)①a[random.randint(0,25)]或random.choice(a) ②b[random.randint(0,25)]或random.choice(b) ③or (2)可能解析 產生一個[0,25]之間的整數,在字符串中進行切片,或者在字符串中選擇一個字母。當新增加的字母中包含數字或者密碼位數大于或等于5個,密碼中只可能包含一個數字,由于該密碼后期是隨機排序的,數字8有可能是最后一次產生的。變式訓練2 哥德巴赫猜想:任意一個大于等于4的偶數,都可以用兩個素數之和表示。如:4=2+2,6=3+3,8=3+5,10=5+5,12=5+7,98=17+79。編寫一個驗證哥德巴赫猜想的Python程序:程序運行時,輸入一個大于等于4的偶數,如果哥德巴赫猜想驗證成功,則第一行輸出信息“Yes”,第二行輸出用兩個素數表示該偶數的等式,否則輸出“No”。程序運行效果如圖所示:實現上述功能的程序如下,請在程序劃線處填入合適的代碼。import mathdef pp(x): pp=True j=2 while j<=int(math.sqrt(x)) and pp==True: if x % j==0: pp=False else: ① return ppn=int(input('please input n:'))p=1pd=Falseif n % 2==0: while not pd and p p=p+1 ② if pp(p) and pp(q): print('Yes') ③ print(str(n),"=",str(p),'+',str(q)) if pd==False: print('No') else: print('sorry,你輸入的數不是偶數!')答案 ①j=j+1 ②q=n-p ③pd=True解析 函數pp(x)的功能是判斷整數x是否為素數,若是素數,則返回True,否則返回False。判斷素數的方法為:讓x去除以j(2至根號x取整),若能被某個數j整除,則函數值為False,否則j+1后再試,因此①處語句修改為j=j+1;主程序的功能是尋找組成整數n的二個素數,方法是枚舉p,因此q=n-p,然后再判斷p和q是否均為素數,若是則完成定理證明,為了結束while循環,要更改pd的值為True,因此③處代碼為pd=True,否則將繼續枚舉p的值。例3 有如下Python程序段import randoms='abcdefghijklmnopq'for i in range(4): k=random.randint(0,4)+random.randint(0,1)*10 print(s[k],end='')執行該程序后,輸出的結果不可能是 ( )A.ddaa B.eaeo C.dfam D.nemc答案 C解析 本題考查隨機數模塊以及for循環。其中random.randint(0,4)產生一個0-4(包含)之間的隨機整數,random.randint(0,1)產生隨機數0或者1,random.randint(0,1)*10產生隨機數0或者10,因此k的值為[0,1,2,3,4,10,11,12,13,14]中的任意一個,for循環循環四次,每次用k作為位置去訪問字符串s, 'abcdefghijklmnopq'劃線字母為可能訪問到并且輸出的字符,因此C選項中的f錯誤,訪問不到這個字符。例4 小明用Python語言中對大小為100*100像素的圖像“上.jpg”(如圖所示)進行簡單處理,得到下列四幅圖像,請在劃線處填入合適的代碼。n1 n2 n3 n4部分代碼如下:from PIL import Imageimport numpy as npimport matplotlib.pyplot as pltimg=np.array(Image.open('上.jpg').convert('L')) #將圖像轉換為灰色圖像后轉換為二維矩陣width,height = img.shape[0],img.shape[1]n1 = np.zeros(shape=(width,height)) # 用于存儲結果圖像,大小和img相同n2 = np.zeros(shape=(width,height))n3 = np.zeros(shape=(width,height))n4 = np.zeros(shape=(width,height))for x in range(0,width): for y in range(0,height): ① ② n3[x,y]=img[x,y] n4[x,y]=img[x,y] if y%10==0: ③ if x%10==0: ④ #顯示圖像,代碼略答案 ①n2[x,height-y-1]=img[x,y]②n1[width-x-1,y]=img[x,y]③n3[x,y]=0④n4[x,y]=0解析 本題考查Image模塊。n1圖像顯然是對原圖的上下翻轉,行x的對稱行為height-y-1,而行保持不變。n1圖像顯然是對原圖的左右翻轉,列保持不變,列y的對稱列為width-x-1,而。③n3圖像是每隔一定數量的列數時,出現一個黑條,因此當條件y%10==0成立時,顯示黑色。③n4圖像是每隔一定數量的行數時,出現一個黑條,因此當條件x%10==0成立時,顯示黑色。變式訓練3 現有一幅文件名為“車牌.jpg”的彩色圖像,車牌底色為藍色,如圖a所示,通過Python程序對該圖像進行二值化,即將車牌藍色部分變為白色,其他全部變為黑色,如圖b所示,以凸顯出車牌的輪廓。程序代碼如下,請在劃線處填入合適的代碼。 圖a 圖bfrom PIL import Imageimport numpy as npimport matplotlib.pyplot as plt #獲取車牌藍色的RGB分量的邊界,紅色rl,r2,綠色gl,g2,藍色b1,b2。代碼略img =np.array(Image.open("① ")) #打開圖片并將其像素矩陣存入img rows, 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]=1 #將新矩陣該位置設為白色 else: ② plt.figure('車牌')plt.imshow(imgnew, cmap='gray')plt.axis('off')plt.show()答案 ①車牌.jpg ②imgnew[i,j]= 0解析 本題考查Image模塊。①打開車牌.jpg圖片并將其像素矩陣存入img。②將該點的值設置為黑色。 1.有如下Python程序段:def f(m): a=m%10 b=m∥10%10 c=m∥100 if c**3+b**3+a**3==m: return "YES" else: return "NO"m=int(input("輸入一個三位數:"))print(f(m))執行該程序段后,若輸出結果為“YES”,則輸入變量m值可能為 ( )A.121 B.134 C.153 D.142答案 C解析 本題考查自定義函數的應用。a、b、c分別數m的3個位上的數字,符合立方和等于他本身,因此屬于水仙花數。2.有如下Pyhton程序段:def gcd(a,b): c = a%b while c > 0: a,b = b,c c=a%b return ba=int(input("請輸入:"))b=int(input("請輸入:"))gcd = gcd(a,b)scm = a * b ∥ gcdprint( gcd,scm)運行該程序,輸入a,b的值分別為16,12,則輸出gcd,scm的值分別為 ( )A.4 48 B.48 4 C.2 12 D.12 2答案 A3.有如下Pyhon程序段:def sel(a,b,c): if a a+=b;b=a-b;a=a-b if a t=a;a=c;c=t print(a,b,c)sel(1,2,3)執行該程序段后,輸出的結果是 ( )A.1,2,3 B.3,2,1 C.3,1,2 D.1,3,2答案 C4.有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”程序功能不變答案 B5.有如下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.circle(x) #畫半徑是x像素的圓 t.left(91) #畫筆方向逆時針旋轉91度關于該程序段,下列說法正確的是 ( )A.程序運行后,繪制了100個同心圓B.程序運行后,繪制的所有圓的顏色不可能都為紅色C.程序運行后,最后繪制的一個圓的顏色可能為黃色D.程序運行后,繪制的各圓沒有交點答案 C解析 本題考查隨機數和海龜模塊應用。一共畫了100個圓,每畫完一個圓,畫筆回到原點,且方向逆時針旋轉91度,因此所有的圓起點是一樣的,因此有交點,但不是同心圓。若x%random.randint(1,4)的值均為0,則可能全部是紅色的。6.某Python程序段如下:def isprime(x): for i in range(2,x): if x % i ==0: return False return Trueprime =[]for i in range(2,21): if isprime(i): prime.append(i) #將 i 添加到列表print(len(prime))運行該程序段,輸出結果是 。 答案 8解析 本題考查自定義函數的相關知識,功能是判斷是否是質數。[2,20]之間的素數有8個。7.技術學科一共包含2門學科——信息技術和通用技術,這就需要我們關注學科的平衡,而衡量某位學生學科平衡的重要指標就是學科吻合度,采用信息技術與通用技術的得分差來判斷[分差每3分為一級:分差0到3分(不含3分),表示“0級偏差”;分差3到6分(不含6分),表示“1級偏差”,分差6到9分(不含9分),表示“2級偏差”……分差最高為50分,最后一級分差48到50(含50分),表示“16級偏差”],計算每位學生的吻合度偏差值。根據題意,請回答下列問題:(1)(多選)為了后續程序處理,需要把數據讀入到程序,每個學生一條記錄,用Python存儲學生測試得分數據,下列可行的是(以前兩條記錄為例) (填字母)。 A.students=[[0901,50,32],[0902,50,45],……]B.students={'0901':['50','32'],'0902':['50','45'],……}C.students={0901:['50','32'],0902:['50','45'],……}D.students=[['0901','50','32'],['0902','50','45'],……](2)編寫函數f(xx,ty)實現傳入信息得分和通用得分,返回吻合度級別 (返回示例:'1級偏差')。 (3)完成程序填空:students={'0901':[50,82],'0902':[50,95],……}#(以前兩條記錄為例)for i in students.keys(): xx=① ty=② print(i,':',f(xx,ty))答案 (1)BD(2)def f(xx,ty): return str(abs(xx-ty)∥3)+'級偏差'及其他等價答案(3)①students[i][0] ②students[i][1]-students[i][0]或students[i][1]-xx解析 本題考查數據類型、自定義函數等。(1)0901只能作為文本字符串,若作為數值類型,其值會自動變為901。(2)分差每3分為一級,表達式abs(xx-ty)作為分差,返回值注意數據類型。(3)students是一個字典類型的數據,students.keys表示字典的鍵,其對應字典的值是一個列表,每個列表有兩個元素,一個信息得分,一個技術得分,因此students[i]表示鍵i對應的得分列表,students[i][0]和students[i][1]分別表示信息得分和技術得分。一、基礎鞏固1.有如下Python程序段:def days(y,m,d): md=[31,28,31,30,31,30,31,31,30,31,30,31] ans=y*365+y∥4-y∥100+y∥400 for i in range(m-1): ans+=md[i] if(y%4==0 and y%100!=0 or y%400==0)and m>=3: ans+=1 ans+=d return ansprint(days(2023,2,9)-days(2022,11,29))運行該程序段后,輸出結果是 ( )A.71 B.72 C.73 D.74答案 B2.如果A的所有正因子和等于B,B的所有正因子和等于A,因子包括1但不包括本身,且A不等于B,則稱A,B為親密數對。下列程序段可以求出3000以內的親密數。def div(n): lis=[] for i in range(1,n∥2+1): if n%i==0: (1) return lisfor i in range(3000): sum1=sum(div(i)) sum2= (2) if sum2==i and (3) : print(i,sum1)上述程序段中,劃線處可選代碼為:①lis.append(i) ②sum(div(sum1-i)) ③sum(div(sum1)) ④iA.①③④ B.①③⑤ C. ①②④ D.①②⑤答案 B3.用Python程序隨機生成100個[0,20]之間的隨機數,統計0~9及9以上每個數字出現的次數并輸出結果:import randomlist=[0]*100count=[0]*11for i in range(0,100): num=random.randint(0,20) #產生[0,20]之間的隨機整數 list[i]=num if : num=10 count[num]+=1print("0~9及9以上依次出現的次數為:",count)程序某次運行的結果如下:0~9及9以上依次出現的次數為:[3,5,4,6,5,5,2,5,9,4,52]則劃線處的代碼為 ( )A.num>i B.list[i]>numC.num>9 D.count[i]>9答案 C解析 本題考查隨機數和桶的應用。語句list[i]=num將索引為i的列表元素修改為num。語句count[num]+=1的功能是統計num的數量。從輸出語句來看,count[10]表示超過9以上的數字,因此當num>9時,全部統計在count[10]中。4.使用 Python 程序編程探究平面上圓與圓的相切的位置關系(圓心之間距離等于半徑之和),程序代碼如下:def judge(a,b): dis=(cir[a][0]-cir[b][0])**2+(cir[a][1]-cir[b][1])**2 if dis==(cir[a][2]+cir[b][2])**2: return 1 return 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. 1 C. 2 D. 3答案 C5.生成一組由數字 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.③②①答案 D6.有如下Python程序段:import randoma=[0]*6i=0while i<6: r=random.randint(2, 11 ) if r not in a : a[i]=r i+=1print(a)運行程序后,輸出的結果可能是 ( )A.[3,0,0,0,0,0] B.[2,3,4,5,6,7]C.[0,10,0,3,0,5] D.[9,11,4,6,0,0]答案 B7.有如下Python程序段:from random import *d=[8,6,9,3,1,2]a=randint(0,2) #隨機產生 0-2 的整數b=a+3for i in range(a,b): if d[i]>d[i+1]: d[i],d[i+1]=d[i+1],d[i]執行該程序段后,列表d中的元素值不可能是 ( )A.6,8,3,9,1,2 B.6,8,3,1,9,2C.8,6,3,1,9,2 D.8,6,3,1,2,9答案 B8.編寫Python程序,模擬“石頭剪刀布”的游戲,實現電腦隨機輸出“石頭”“剪刀”“布”。函數功能表如下:名稱 含義random.random() 隨機生成一個[0,1)范圍內的實數random.randint(a,b) 隨機生成一個[a,b]范圍內的整數random.sample(seq,k) 從序列中隨機挑選k個元素random.shuffle(seq) 將序列的所有元素隨機排序下列代碼段中能夠實現該功能的是 ( )① ②import randoma={0:"石頭",1:"剪刀",2:"布"}b=int(random.random()*2)print(a[b]) import randoma={0:"石頭",1:"剪刀",2:"布"}b=random.randint(0,2) print(a[b])③ ④import randoma=["石頭","剪刀","布"]b=random.sample(a,1)print(b[1]) import randoma=["石頭","剪刀","布"]random.shuffle(a)print(a[1])A.①③ B.①④ C.②③ D.②④答案 D解析 本題考查隨機數、字典和列表的應用。代碼段①int(random.random()*2)產生的范圍是0或1。代碼段③在列表a中隨機挑一個,因此b的值應為"石頭"、"剪刀"或"布",而b[1]是這些字符中第1個字符。9.某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.21 C.35 D.89答案 C解析 本題考查列表及斐波拉契數列的相關知識。斐波拉契數列:1,1,2,3,5,8,13,21,34,55,89,144…n為該數列第2至第11項中隨機一項,不可能為35,選C。10.某Python程序如下:from random import randoma=[0]*7flag=[False]*10i=1while i<=6: a[i]=int(random()*5)*2+1 if flag[a[i]]==False or a[i]>a[i-1]: flag[a[i]]=True i=i+1該程序段運行后,列表a的值可能為 ( )A.[0,7,5,9,7,1,7] B.[0,1,3,5,7,9,1]C.[0,9,2,3,5,7,9] D.[0,9,5,9,7,9,1]答案 D11.有Python代碼段如下:import randomk=random.randint(1,3)s="abcba"n=len(s)t=""for i in range( int(n/2)): t=t+s[i]+s[n-i-k]print(t)運行該程序段,輸出結果不可能是 ( )A.aabb B.abbc C.acbb D.abba答案 D12.有如下Python程序段:import randoms="123456789";g=""for i in range(3): n=len(s) x=random.randint(0,n-1) g+=s[x] s=s[0:x]+s[x+1:n]print (g)在該程序段執行時,若變量x的值依次為2,2,5,則最終變量g的值為 ( )A."348" B."237" C."336" D.15答案 A二、能力提升13.所謂親密數是指如果整數x的全部因子(包括1,不包括x自身)之和等于y,且整數y的全部因子之和等于x,則x和y稱為一對親密數(x與y不相等)。小王想通過Python程序統計1~1000間的親密數對的個數。def yzh(m): yz_sum=0 for i in range(1,m∥2+1): if ① : yz_sum+=i return 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!=y答案 B解析 本題考查自定義函數及其調用。從程序可得自定義函數的功能為求自然數除本身外的因子和,①后將i累加進入,因此i為質因數,滿足m%i==0,②處for循環的作用為遍歷1-1000所有的數,尋找總共有多少數是滿足條件的,并且輸出,以滿足x所有的質因數之和為y,同時還需要滿足x==yzh(y) and x!=y才能說是親密數,因此答案為B。14.check函數的功能是檢查字符串s是否符合相應要求。如果符合返回True,否則返回False。要求s包括大寫字母、小寫字母、數字以及其他字符。def check(s): c=0 flag=[0]*4 for i in s: if "0" <=i<="9": #① flag[0] =1 elif 65<=ord(i)<=90: flag[1]=1 elif 97<=ord(i)<=122: flag[2]=1 else: flag[3]=1 for j in range(4): c=c+flag #② if c=4: #③ return True return False #④有錯誤的代碼是 ( )A.①② B.②③ C.③④ D.①④答案 B解析 本題考查自定義函數的應用。flag是一個隊列,循環for j in range(4)是把隊列中元素進行累加,因此②處應修改為 c=c+flag[j]。在語句if c=4:中應該判斷c和4是否相等,符號應為==。15.有如下Python程序:import turtleimport randomcolors=["green","blue","red","purple","orange"]x=-300;y=-300def draw(m): turtle.begin_fill() #準備繪圖 k=random.randint(0,len(colors)-1) #① turtle.pencolor(colors[k]) #用colors[k]顏色做畫筆 for i in range(5): #② turtle.forward(m) #向畫筆當前方向移動 m 像素長度 turtle.right(180-36) #畫筆向右旋轉 144° turtle.color(colors[k]) #用第 k 種顏色填充 turtle.end_fill() #填充結束for i in range(10): x=x+50; y=y+50 #③ turtle.goto(x,y) #畫筆前往坐標位置(x,y) draw(30) #繪制大小為30像素的五角星turtle.done() #繪圖結束下列說法錯誤的是 ( )A.分析①處代碼,繪圖中無法設置“orange”顏色B.分析②處代碼,for循環結束時畫筆指向初始時方向C.分析③處代碼,10個五角星將逐個繪制在右上角方向D.運行程序,相鄰兩個五角星大小相同、填充色也可能相同答案 A解析 本題考查自定義函數和隨機數模塊。A選項產生0至len(colors)-1之間的正整數,而orange的索引號是len(colors)-1。B選項循環5次,每次旋轉144度,共旋轉了720度,因此正好指向初始時方向。C選項畫筆的初始位置不斷地向右上移動。16.下列Python程序段功能為:隨機生成省會城市的測試題目及相應答案。運行結果如圖所示。河北省的省會城市是 A.南京B.上海C.石家莊D.鄭州本題參考答案為:Cimport randomdict={"北京市":"北京","上海市":"上海","河北省":"石家莊",...}#dict 中存儲中國34個省級行政區及其省會城市sf=list ( (1) ) sh=list ( (2) ) sj=random.randint(0,33) #生成[0,33]之間的整數zd=sh[sj]del sh[sj] #刪除列表sh中的第sj項xx=random.sample(sh,3)+[zd] #隨機產生列表sh中的3項與zd連接成新列表xxrandom.shuffle(xx) #對列表xx中的內容進行隨機排序。print("%s的省會城市是 "%( (3) )) for i in range(4): print("%s.%s"%("ABCD"[i],xx[i]))print("本題參考答案為:%s"%("ABCD"[ (4) ])) 上述程序段中(1)(2)(3)(4)處可選語句為:①dict.values(),②dict.keys(),③sh[sj],④sf[sj],⑤xx.index(zd),⑥xx[zd]則(1)(2)(3)(4)處語句依次可為 ( )A.①②④⑤ B.①②③⑥C.②①④⑥ D.②①④⑤答案 D17.現有n個學生的7門學科成績已存入一維數組cj中。某Python程序代碼段如下:def f(x): p=x*7;k=0 for j in range(7): if cj[p+j]>cj[p+k]: k=j return(k)cj=[96,83,91,85,86,77,88,98,93,94,82,96,87,99]km="物化生政史地技"n=2;s=""for i in range(n): s+=km[f(i)]print(s)運行后,輸出的結果為 ( )A.物技 B.地政 C.物生 D.技物答案 A18.有如下Python程序段:import randomflag=True;i=0a=[0]*6while i<6: x=random.randint(1,100) if flag or x>50: a[i]=x flag=not flag i+=1執行該程序段后,在下列選項中,a數組元素中各元素值不可能的是 ( )A.52,95,46,74,77,83B.50,55,46,70,21,97C.62,78,57,61,69,50D.31,54,48,72,50,82答案 C19.某校高一有6個班,現需隨機抽取一個班代表學校參加年級合唱比賽,實現該功能的Python程序如下:import randomcla=["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)]答案 D20.有如下Python程序段import randomlist1=[]flag=Falsen=0while n<6: num=random.randint( 10,100) if num%2==1 or flag: flag=not flag list1.append(num) n+=1print(list1)執行該程序段后,列表listl的值不可能是 ( )A.[89.65,73,79,35,100]B.[53,96,77,54.51,85]C.[11,22,54,58,43,68]D.[25,90,33,99,21,54]答案 C21.小明將圖a經過如下Python程序段處理后,效果為圖b所示,他發現處理后圖像黑白顏色分布很不均衡,要想將圖像處理成圖c,需對程序進行修改。0 from PIL import Image1 import numpy as np2 import matplotlib.pyplot as plt3 img=np.array(Image.open('dog.jpg').convert('L'))4 row,cols=img.shape5 for i in range(row):6 for j in range(cols):7 if img[i,j]>188:8 img[i,j]=1 #1 表示白色9 else:10 img[i,j]=0 #0 表示黑色11 plt.figure('dog')12 plt.imshow(img,cmap='gray')13 plt.axis('off')14 plt.show()下列做法正確的是 ( )A.將第7行中的數字’188’改成’100’B.將第7行中的數字’188’改成’250’C.將第7行中的’>’改成’<’D.將第8行的數字’1’改成’0’,將第10行的數字’0’改成’1’答案 A22.小明在學習了函數的運用之后,決定編寫一段十進制轉為二進制的程序,根據輸入的十進制正整數,返回其對應的二進制字符串,如圖所示輸入要轉換的十進制數:1231111011>>>def D2B(x): s="" while x>0: ① x=x∥2 ② n=int(input("輸入要轉換的十進制數: "))print(③ ) (1)若從鍵盤輸入數字17,則程序輸出結果為 。 (2)完成程序填空。(3)如果將加框語名修改為x>=1,對程序結果 (填字母:A.有,B.沒有)影響。 答案 (1)10001 (2)①s=str(x%2)+s ②return s ③D2B(n) (3)B23.小明要將一定數量的糖果裝進若干個盒子里,第一個盒子裝1顆,后面的盒子裝糖果的數量在前一個盒子的基礎上翻倍,剩余的糖果則放在最后一個盒子中。例如:當糖果數量為10時,第一個盒子裝1顆,第二個盒子裝2顆,第三個盒子裝4顆,此時剩下3顆糖果,則裝在第四個盒子里。根據對問題的分析,小明設計裝糖果算法如下:輸入數據:糖果數量suger;處理數據:先利用糖果數量suger得出所需盒子的數量total,再根據盒子數量及存放糖果的規律依次得出每個盒子糖果的數量并存儲在列表a中;輸出數據:所需的盒子數量、各個盒子的糖果數量。小明根據算法編寫了如下Python程序,請結合算法和程序,回答下列問題。(1)現已知糖果數量為32顆,則裝完糖果后,最后一個盒子中的糖果數量為 顆。 (2)為實現上述功能,請在劃線處填入合適代碼。def hz(n): c=0 while n>0: c+=1 ① return ca=[]suger=int(input("請輸入糖果數量:"))total=hz(suger)print ("共需要的盒子數為:"+str(total)+"個")for i in range(② ): t=2**i a.append(t) #將 t 添加到列表 a 中 ③ a.append(suger)print ("每個盒子的糖果數量依次為:"+str(a))答案 (1)1 (2)①n∥=2或n=n∥2 ②total-1或0,total-1 ③suger-=t或suger=suger-t24.當從字符串中刪除一些字符后,剩余的字符仍保持原順序,則由剩余字符組成的新字符序列,我們稱之為原字符串的子序列。例如:原始字符串“abcde”可以通過刪除字符“b”“e”得到目標字符串“acd”,“acd”即為“abcde”的子序列;而原始字符串“abcde”通過刪除字符無法得到目標字符串“ebd”,“ebd”則不是“abcde”的子序列。根據對問題的分析,設計子序列判斷算法如下:輸入數據:原始字符串bg、目標字符串ed;處理數據:①從目標字符串ed中依次讀取字符;②所取字符與原始字符串中仍未參與比較的字符逐位比較;③若比較過程中存在相同字符,則轉到①繼續執行;若目標字符串已讀取完畢,則轉到⑤執行;④若原始字符串中所有字符皆參與比較后,仍未出現相同字符,則終止判斷,確定目標字符串不是原始字符串的子序列;⑤上述過程執行后,目標字符串中所有字符都有序存在于原始字符串中,則確定目標字符串是原始字符串的子序列;輸出數據:子序列判斷結果。現根據算法編寫了如下Python程序,運行界面如圖所示。請結合算法和程序,回答下列問題。請輸入原始字符串:abcde請輸入目標字符串:acdacd是abcde的子序列!def cgs(s,t): ① for x in t: while pos pos+=1 if pos==len(s): return 1 pos+=1 return 0jg=["是","不是"]bg=input("請輸入原始字符串:")ed=input("請輸入目標字符串:")print (ed,③ ,bg,"的子序列!") (1)為實現上述功能,請在劃線處填入合適代碼。(2)若輸入原始字符串和目標字符串均為“abcde”,程序中函數調用返回的值為 。 答案 (1)①pos=0 ②s[pos]!=x③jg[cgs(bg,ed)] (2)025.某閱卷系統設計如下:讀取學生答案文件后和標準答案進行對照并判分,題型分為單選、多選和填空。單選閱卷規則:和標準答案一致得全部分數,錯選或不選不給分多選閱卷規則:和標準答案一致得全部分數,漏選給 1 分,錯選或不選不給分填空閱卷規則: 標準答案表中允許有多種答案存在。學生的答案在標準答案中存在,得全部分數,不存在或未填不給分。例如"學生答案.txt" 內容如下:張**|A|D|AC|B|flag|李**|A|D|ACD|AB|flag==True|i>0標準答案:題號 1 2 3 4 5 6題型 單選 單選 多選 多選 填空 填空答案 A D ACD BC flag或flag==True i==0或i>=0分值 2 2 3 3 2 2程序執行結果:張** 成績:8分 李** 成績:9分(1)如果學生的答案數據為"王**|A|C|AD|BC|flag==True|i>=0",則輸出的結果是 。 (2)完善劃線處的代碼。def dx(s1,s2,n): #對多選題進行判分 flag =True for i in s1: if ① : flag =False break if ② : return n elif flag==False or s1=="": return 0 else: return 1f=open("學生答案.txt")line=f.readline() #按行讀取'學生答案.txt'文件bd=["單選","A",2, "單選", "D ",2, "多選", "ACD ",3, "多選", "BC ",3, "填空",[ "flag ", "flag==True"], 2, "填空",[ "i==0 ", "i>=0 "],2]while line: sd=line.split("|") #將字符串以'|'為間隔分割成成多個字符串組成的列表 zf=0 for i in range(len(sd)-1): p=3*i if bd[p]== "單選":#對單選題判分 if ③ : zf=zf+bd[p+2] elif bd[p]== "多選": #對多選題判分 zf=④ else: if sd[i+1]!= "" and sd[i+1] in bd[p+1]: zf=zf+bd[p+2] print(sd[0],"成績: ",zf, "分") line=f.readline() #讀取下一行f.close()答案 (1)王** 成績:10分 (2)①i not in s2 或not i in s2 ②s1==s2 ③sd[i+1]==bd[p+1] ④zf+dx(sd[i+1],bd[p+1],bd[p+2])26.輸入年月日判斷是當前年份的第幾天。例如:2020年3月1日是這一年的第61天。編寫Python程序,實現該功能。(提示:普通閏年:公歷年份是4的倍數,且不是100的倍數的,為閏年。世紀閏年:公歷年份是整百數的,必須是400的倍數才是閏年)def leap(m): #判斷是否是閏年 if m%400==0 or① and m%4==0: return True else: return Falseyear= int(input("請輸入 4 位數字的年份:"))month = int(input("請輸入月份:"))day = int(input("請輸入日:"))monthdays=[0,31,28,31,30,31,30,31,31,30,31,30]if② and leap(year): sum=1else: sum=0for i in range(month): sum=③ sum=sum+dayprint(year,"年",month,"月",day,"日是這一年的第",sum,"天")(1)若日期是2022年4月18日是這一年的第 天 (2)請在劃線處填入合適的代碼。答案 (1)108 (2)①m%100!=0 ②month>2或者month>=3 ③sum+monthdays[i]或者monthdays[i]+sum(共108張PPT)課時7 函數與模塊第三章 算法的程序實現1.掌握自定義函數的構造和調用方法。2.掌握模塊的導入方法和常用函數的應用。目 錄CONTENTS知識梳理01例題精析02隨堂檢測03鞏固與提升04知識梳理1一、模塊1.Python內置模塊:數學運算__________模塊、生成隨機數______________模塊、圖像____________模塊。2.Python其他模塊:用于實現部分操作系統功能(可用于文件、目錄等操作)的os模塊,與時間處理有關的time模塊,可實現科學計算、數據可視化的__________和______________,用于多媒體開發和游戲軟件開發的pygame模塊,支持圖形處理的tkinter等。mathrandomImagenumpymatplotlib3.在Python中,把一組函數放到一個.py文件里,這個文件就稱為一個______。4.使用______________語句或_____________語句導入Python內置的模塊和來自第三方的模塊,將能使用其中的函數,如__________和______________函數。模塊importfrom-importsqrtrandom二、函數的構造和應用def函數名(參數集合): <函數體> [return函數值]函數名的命名規則和變量名一樣。完成函數的構造后,在程序中就可以根據需要,像內建函數一樣調用該函數。三、模塊的導入及應用在Python Shell中導入math模塊,并調用該模塊中的sqrt函數,可采用以下兩種方法:方法一 方法二>>>import math >>>math.sqrt(9) 3.0 >>>from math import sqrt>>>sqrt(9)3.01.math模塊中的常用常數與函數名稱 含義math.e 自然常數emath.pi 圓周率πmath.ceil(x) 對x向上取整,比如x=1.2,返回2math.floor(x) 對x向下取整,比如x=1.2,返回1math.pow(x,y) 指數運算,得到x的y次方math.log(x) 對數,默認基底為emath.sin(x) 正弦函數math.cos(x) 余弦函數math.tan(x) 正切函數math.degrees(x) 角度轉換成弧度math.radians(x) 弧度轉換成角度2.random模塊中的常用函數名稱 含義random.random() 隨機生成一個[0,1)范圍內的實數random.uniform(a,b) 隨機生成一個[a,b]范圍內的實數random.randint(a,b) 隨機生成一個[a,b]范圍內的整數random.choice(seq) 從序列的元素中隨機挑選一個元素,比如:random.choice(range(10)),從0到9中隨機挑選一個整數random.sample(seq,k) 從序列中隨機挑選k個元素random.shuffle(seq) 將序列的所有元素隨機排序例題精析2例1 編寫一個自定義函數實現判斷字符串s是否是回文字符串,請在劃線處填入合適的代碼。算法思想:采用雙指針分別指向首尾字符,若兩者相同,依次向中間靠攏def hw(s): i=0 j=len(s)-1 while ① : if ② : return False i+=1 j-=1 return Trues1=input('請輸入字符串s:')t=hw(s1)if ③ : print("字符串"+s1+"是回文字符串!")else: print("字符串"+s1+"不是回文字符串!")答案 ①i解析 本題考查自定義函數的應用。①指針i和j分別指向字符串s的首和尾,在兩端各取一個字符進行比較,若i==j意味著該字符串長度為奇數,中間位置可以不用比較,若字符串長度為偶數,最后一次比較完后,i將超出j的值。②若兩端各取一個字符,取出的字符不相等,返回假。③調用自定義函數,將函數的值賦給t,那么t可能是True或False。變式訓練1 下列Python函數實現了將大寫字母循環后移t個位置功能,如A向后移3個位置后變為D,X后移3位后,變成A。已知'A'的ASCII碼值為65。def jm(s,t): n=ord(s)-65+t if n>=25: return chr(n+65)(1)請在程序劃線處填入合適的代碼。(2)若執行語句print(jm('Y',4)),則輸出的內容是 。 答案 (1)n=n-25 (2)C解析 根據題目的功能,n是加密字母在字母中位置,值的范圍是[0,25],如果向后移動后超出25,則表示循環向前移動,需要減去25,最后返回ASCII碼值對應的字母。將Y后移4位的值為C。例2 生成一個隨機密碼,要求大寫字母、小寫字母和數字必須至少包含一個,且密碼的長度不能少于6位。編寫的Python代碼如下:import randomdef pas(): a="abcdefghijklmnopqrstuvwxyz" b="ABCDEFGHIJKLMNOPQRSTUVWXYZ" c="0123456789" st=a+b+c d=[] d.append(① ) #從字符串a中隨機取一個字符 d.append(② ) #從字符串b中隨機取一個字符 i=2 f=True while i<=5③ f: d.append(random.choice(st)) if d[i]>="0" and d[i]<="9": f=False i+=1 random.shuffle(d) #將序列d中所有元素隨機排序 print("".join(d))pas()(1)請在程序劃線處填入合適的代碼。(2)執行上述算法, (填:可能/不可能)產生密碼“Eaf8dLdeS”。 答案 (1)①a[random.randint(0,25)]或random.choice(a) ②b[random.randint(0,25)]或random.choice(b) ③or (2)可能解析 產生一個[0,25]之間的整數,在字符串中進行切片,或者在字符串中選擇一個字母。當新增加的字母中包含數字或者密碼位數大于或等于5個,密碼中只可能包含一個數字,由于該密碼后期是隨機排序的,數字8有可能是最后一次產生的。變式訓練2 哥德巴赫猜想:任意一個大于等于4的偶數,都可以用兩個素數之和表示。如:4=2+2,6=3+3,8=3+5,10=5+5,12=5+7,98=17+79。編寫一個驗證哥德巴赫猜想的Python程序:程序運行時,輸入一個大于等于4的偶數,如果哥德巴赫猜想驗證成功,則第一行輸出信息“Yes”,第二行輸出用兩個素數表示該偶數的等式,否則輸出“No”。程序運行效果如圖所示:實現上述功能的程序如下,請在程序劃線處填入合適的代碼。import mathdef pp(x): pp=True j=2 while j<=int(math.sqrt(x)) and pp==True: if x % j==0: pp=False else: ① return ppn=int(input('please input n:'))p=1pd=Falseif n % 2==0: while not pd and p p=p+1 ② if pp(p) and pp(q): print('Yes') ③ print(str(n),"=",str(p),'+',str(q)) if pd==False: print('No') else: print('sorry,你輸入的數不是偶數!')答案 ①j=j+1 ②q=n-p ③pd=True解析 函數pp(x)的功能是判斷整數x是否為素數,若是素數,則返回True,否則返回False。判斷素數的方法為:讓x去除以j(2至根號x取整),若能被某個數j整除,則函數值為False,否則j+1后再試,因此①處語句修改為j=j+1;主程序的功能是尋找組成整數n的二個素數,方法是枚舉p,因此q=n-p,然后再判斷p和q是否均為素數,若是則完成定理證明,為了結束while循環,要更改pd的值為True,因此③處代碼為pd=True,否則將繼續枚舉p的值。C解析 本題考查隨機數模塊以及for循環。其中random.randint(0,4)產生一個0-4(包含)之間的隨機整數,random.randint(0,1)產生隨機數0或者1,random.randint(0,1)*10產生隨機數0或者10,因此k的值為[0,1,2,3,4,10,11,12,13,14]中的任意一個,for循環循環四次,每次用k作為位置去訪問字符串s, 'abcdefghijklmnopq'劃線字母為可能訪問到并且輸出的字符,因此C選項中的f錯誤,訪問不到這個字符。例4 小明用Python語言中對大小為100*100像素的圖像“上.jpg”(如圖所示)進行簡單處理,得到下列四幅圖像,請在劃線處填入合適的代碼。n1 n2 n3 n4部分代碼如下:from PIL import Imageimport numpy as npimport matplotlib.pyplot as pltimg=np.array(Image.open('上.jpg').convert('L')) #將圖像轉換為灰色圖像后轉換為二維矩陣width,height = img.shape[0],img.shape[1]n1 = np.zeros(shape=(width,height)) # 用于存儲結果圖像,大小和img相同n2 = np.zeros(shape=(width,height))n3 = np.zeros(shape=(width,height))n4 = np.zeros(shape=(width,height))for x in range(0,width): for y in range(0,height): ① ② n3[x,y]=img[x,y] n4[x,y]=img[x,y] if y%10==0: ③ if x%10==0: ④ #顯示圖像,代碼略答案 ①n2[x,height-y-1]=img[x,y]②n1[width-x-1,y]=img[x,y]③n3[x,y]=0④n4[x,y]=0解析 本題考查Image模塊。n1圖像顯然是對原圖的上下翻轉,行x的對稱行為height-y-1,而行保持不變。n1圖像顯然是對原圖的左右翻轉,列保持不變,列y的對稱列為width-x-1,而。③n3圖像是每隔一定數量的列數時,出現一個黑條,因此當條件y%10==0成立時,顯示黑色。③n4圖像是每隔一定數量的行數時,出現一個黑條,因此當條件x%10==0成立時,顯示黑色。變式訓練3 現有一幅文件名為“車牌.jpg”的彩色圖像,車牌底色為藍色,如圖a所示,通過Python程序對該圖像進行二值化,即將車牌藍色部分變為白色,其他全部變為黑色,如圖b所示,以凸顯出車牌的輪廓。程序代碼如下,請在劃線處填入合適的代碼。圖a 圖bfrom PIL import Imageimport numpy as npimport matplotlib.pyplot as plt #獲取車牌藍色的RGB分量的邊界,紅色rl,r2,綠色gl,g2,藍色b1,b2。代碼略img =np.array(Image.open("① ")) #打開圖片并將其像素矩陣存入img rows, 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]=1 #將新矩陣該位置設為白色 else: ② plt.figure('車牌')plt.imshow(imgnew, cmap='gray')plt.axis('off')plt.show()答案 ①車牌.jpg ②imgnew[i,j]= 0解析 本題考查Image模塊。①打開車牌.jpg圖片并將其像素矩陣存入img。②將該點的值設置為黑色。隨堂檢測31.有如下Python程序段:def f(m): a=m%10 b=m∥10%10 c=m∥100 if c**3+b**3+a**3==m: return "YES" else: return "NO"m=int(input("輸入一個三位數:"))print(f(m))執行該程序段后,若輸出結果為“YES”,則輸入變量m值可能為 ( )A.121 B.134 C.153 D.142解析 本題考查自定義函數的應用。a、b、c分別數m的3個位上的數字,符合立方和等于他本身,因此屬于水仙花數。C2.有如下Pyhton程序段:def gcd(a,b): c = a%b while c > 0: a,b = b,c c=a%b return ba=int(input("請輸入:"))b=int(input("請輸入:"))Agcd = gcd(a,b)scm = a * b ∥ gcdprint( gcd,scm)運行該程序,輸入a,b的值分別為16,12,則輸出gcd,scm的值分別為( )A.4 48 B.48 4 C.2 12 D.12 23.有如下Pyhon程序段:def sel(a,b,c): if a a+=b;b=a-b;a=a-b if a t=a;a=c;c=t print(a,b,c)sel(1,2,3)執行該程序段后,輸出的結果是( )A.1,2,3 B.3,2,1 C.3,1,2 D.1,3,2C4.有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])B ans = c + ans #①print(ans)現執行該程序,輸入"abcDEF",下列說法正確的是( )A.函數change_c()被調用了3次B.函數change_c()的功能是將小寫字母變成大寫字母C.輸出的內容為"ABCDEF"D.將①所在語句改為“ans+=c”程序功能不變5.有如下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.circle(x) #畫半徑是x像素的圓 t.left(91) #畫筆方向逆時針旋轉91度C關于該程序段,下列說法正確的是 ( )A.程序運行后,繪制了100個同心圓B.程序運行后,繪制的所有圓的顏色不可能都為紅色C.程序運行后,最后繪制的一個圓的顏色可能為黃色D.程序運行后,繪制的各圓沒有交點解析 本題考查隨機數和海龜模塊應用。一共畫了100個圓,每畫完一個圓,畫筆回到原點,且方向逆時針旋轉91度,因此所有的圓起點是一樣的,因此有交點,但不是同心圓。若x%random.randint(1,4)的值均為0,則可能全部是紅色的。6.某Python程序段如下:def isprime(x): for i in range(2,x): if x % i ==0: return False return Trueprime =[]for i in range(2,21): if isprime(i): prime.append(i) #將 i 添加到列表print(len(prime))運行該程序段,輸出結果是 。 答案 8解析 本題考查自定義函數的相關知識,功能是判斷是否是質數。[2,20]之間的素數有8個。7.技術學科一共包含2門學科——信息技術和通用技術,這就需要我們關注學科的平衡,而衡量某位學生學科平衡的重要指標就是學科吻合度,采用信息技術與通用技術的得分差來判斷[分差每3分為一級:分差0到3分(不含3分),表示“0級偏差”;分差3到6分(不含6分),表示“1級偏差”,分差6到9分(不含9分),表示“2級偏差”……分差最高為50分,最后一級分差48到50(含50分),表示“16級偏差”],計算每位學生的吻合度偏差值。根據題意,請回答下列問題:(1)(多選)為了后續程序處理,需要把數據讀入到程序,每個學生一條記錄,用Python存儲學生測試得分數據,下列可行的是(以前兩條記錄為例) (填字母)。 A.students=[[0901,50,32],[0902,50,45],……]B.students={'0901':['50','32'],'0902':['50','45'],……}C.students={0901:['50','32'],0902:['50','45'],……}D.students=[['0901','50','32'],['0902','50','45'],……](2)編寫函數f(xx,ty)實現傳入信息得分和通用得分,返回吻合度級別 (返回示例:'1級偏差')。 (3)完成程序填空:students={'0901':[50,82],'0902':[50,95],……}#(以前兩條記錄為例)for i in students.keys(): xx=① ty=② print(i,':',f(xx,ty))答案 (1)BD(2)def f(xx,ty): return str(abs(xx-ty)∥3)+'級偏差'及其他等價答案(3)①students[i][0] ②students[i][1]-students[i][0]或students[i][1]-xx解析 本題考查數據類型、自定義函數等。(1)0901只能作為文本字符串,若作為數值類型,其值會自動變為901。(2)分差每3分為一級,表達式abs(xx-ty)作為分差,返回值注意數據類型。(3)students是一個字典類型的數據,students.keys表示字典的鍵,其對應字典的值是一個列表,每個列表有兩個元素,一個信息得分,一個技術得分,因此students[i]表示鍵i對應的得分列表,students[i][0]和students[i][1]分別表示信息得分和技術得分。4鞏固與提升基礎鞏固能力提升1.有如下Python程序段:def days(y,m,d): md=[31,28,31,30,31,30,31,31,30,31,30,31] ans=y*365+y∥4-y∥100+y∥400 for i in range(m-1): ans+=md[i] if(y%4==0 and y%100!=0 or y%400==0)and m>=3: ans+=1 ans+=d return ansprint(days(2023,2,9)-days(2022,11,29))運行該程序段后,輸出結果是( )A.71 B.72 C.73 D.74B2.如果A的所有正因子和等于B,B的所有正因子和等于A,因子包括1但不包括本身,且A不等于B,則稱A,B為親密數對。下列程序段可以求出3000以內的親密數。def div(n): lis=[] for i in range(1,n∥2+1): if n%i==0: (1) return lisBfor i in range(3000): sum1=sum(div(i)) sum2= (2) if sum2==i and (3) : print(i,sum1)上述程序段中,劃線處可選代碼為:①lis.append(i) ②sum(div(sum1-i)) ③sum(div(sum1)) ④iA.①③④ B.①③⑤ C. ①②④ D.①②⑤3.用Python程序隨機生成100個[0,20]之間的隨機數,統計0~9及9以上每個數字出現的次數并輸出結果:import randomlist=[0]*100count=[0]*11for i in range(0,100): num=random.randint(0,20) #產生[0,20]之間的隨機整數 list[i]=num if : num=10 count[num]+=1print("0~9及9以上依次出現的次數為:",count)程序某次運行的結果如下:0~9及9以上依次出現的次數為:[3,5,4,6,5,5,2,5,9,4,52]則劃線處的代碼為 ( )A.num>i B.list[i]>num C.num>9 D.count[i]>9解析 本題考查隨機數和桶的應用。語句list[i]=num將索引為i的列表元素修改為num。語句count[num]+=1的功能是統計num的數量。從輸出語句來看,count[10]表示超過9以上的數字,因此當num>9時,全部統計在count[10]中。C4.使用 Python 程序編程探究平面上圓與圓的相切的位置關系(圓心之間距離等于半徑之和),程序代碼如下:def judge(a,b): dis=(cir[a][0]-cir[b][0])**2+(cir[a][1]-cir[b][1])**2 if dis==(cir[a][2]+cir[b][2])**2: return 1 return 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. 1 C. 2 D. 3Cprint(s)方框中的代碼由以下三部分組成:①k-=1 ②a[m]=a[k-1] ③s+=str(a[m]) 代碼順序正確的選項是( )A.①②③ B.②③① C.②①③ D.③②①D6.有如下Python程序段:import randoma=[0]*6i=0while i<6: r=random.randint(2, 11 ) if r not in a : a[i]=r i+=1print(a)運行程序后,輸出的結果可能是( )A.[3,0,0,0,0,0] B.[2,3,4,5,6,7]C.[0,10,0,3,0,5] D.[9,11,4,6,0,0]B7.有如下Python程序段:from random import *d=[8,6,9,3,1,2]a=randint(0,2) #隨機產生 0-2 的整數b=a+3for i in range(a,b): if d[i]>d[i+1]: d[i],d[i+1]=d[i+1],d[i]BA.6,8,3,9,1,2 B.6,8,3,1,9,2 C.8,6,3,1,9,2 D.8,6,3,1,2,98.編寫Python程序,模擬“石頭剪刀布”的游戲,實現電腦隨機輸出“石頭”“剪刀”“布”。函數功能表如下:名稱 含義random.random() 隨機生成一個[0,1)范圍內的實數random.randint(a,b) 隨機生成一個[a,b]范圍內的整數random.sample(seq,k) 從序列中隨機挑選k個元素random.shuffle(seq) 將序列的所有元素隨機排序下列代碼段中能夠實現該功能的是 ( )D① ②import random a={0:"石頭",1:"剪刀",2:"布"} b=int(random.random()*2) print(a[b]) import randoma={0:"石頭",1:"剪刀",2:"布"}b=random.randint(0,2) print(a[b])③ ④import random a=["石頭","剪刀","布"] b=random.sample(a,1) print(b[1]) import randoma=["石頭","剪刀","布"]random.shuffle(a)print(a[1])A.①③ B.①④ C.②③ D.②④解析 本題考查隨機數、字典和列表的應用。代碼段①int(random.random()*2)產生的范圍是0或1。代碼段③在列表a中隨機挑一個,因此b的值應為"石頭"、"剪刀"或"布",而b[1]是這些字符中第1個字符。C解析 本題考查列表及斐波拉契數列的相關知識。斐波拉契數列:1,1,2,3,5,8,13,21,34,55,89,144…n為該數列第2至第11項中隨機一項,不可能為35,選C。10.某Python程序如下:from random import randoma=[0]*7flag=[False]*10i=1while i<=6: a[i]=int(random()*5)*2+1 if flag[a[i]]==False or a[i]>a[i-1]: flag[a[i]]=True i=i+1該程序段運行后,列表a的值可能為( )A.[0,7,5,9,7,1,7] B.[0,1,3,5,7,9,1]C.[0,9,2,3,5,7,9] D.[0,9,5,9,7,9,1]D11.有Python代碼段如下:import randomk=random.randint(1,3)s="abcba"n=len(s)t=""for i in range( int(n/2)): t=t+s[i]+s[n-i-k]print(t)D12.有如下Python程序段:import randoms="123456789";g=""for i in range(3): n=len(s) x=random.randint(0,n-1) g+=s[x] s=s[0:x]+s[x+1:n]print (g)在該程序段執行時,若變量x的值依次為2,2,5,則最終變量g的值為( )A."348" B."237" C."336" D.15A13.所謂親密數是指如果整數x的全部因子(包括1,不包括x自身)之和等于y,且整數y的全部因子之和等于x,則x和y稱為一對親密數(x與y不相等)。小王想通過Python程序統計1~1000間的親密數對的個數。def yzh(m): yz_sum=0 for i in range(1,m∥2+1): if ① : yz_sum+=i return 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!=yB解析 本題考查自定義函數及其調用。從程序可得自定義函數的功能為求自然數除本身外的因子和,①后將i累加進入,因此i為質因數,滿足m%i==0,②處for循環的作用為遍歷1-1000所有的數,尋找總共有多少數是滿足條件的,并且輸出,以滿足x所有的質因數之和為y,同時還需要滿足x==yzh(y) and x!=y才能說是親密數,因此答案為B。14.check函數的功能是檢查字符串s是否符合相應要求。如果符合返回True,否則返回False。要求s包括大寫字母、小寫字母、數字以及其他字符。def check(s): c=0 flag=[0]*4 for i in s: if "0" <=i<="9": #① flag[0] =1 elif 65<=ord(i)<=90: flag[1]=1 elif 97<=ord(i)<=122: flag[2]=1 else: flag[3]=1 for j in range(4): c=c+flag #② if c=4: #③ return True return False #④有 的代碼是( )A.①② B.②③ C.③④ D.①④B解析 本題考查自定義函數的應用。flag是一個隊列,循環for j in range(4)是把隊列中元素進行累加,因此②處應修改為 c=c+flag[j]。在語句if c=4:中應該判斷c和4是否相等,符號應為= = 。15.有如下Python程序:import turtleimport randomcolors=["green","blue","red","purple","orange"]x=-300;y=-300def draw(m): turtle.begin_fill() #準備繪圖 k=random.randint(0,len(colors)-1) #① turtle.pencolor(colors[k]) #用colors[k]顏色做畫筆 for i in range(5): #② turtle.forward(m) #向畫筆當前方向移動 m 像素長度 turtle.right(180-36) #畫筆向右旋轉 144° turtle.color(colors[k]) #用第 k 種顏色填充 turtle.end_fill() #填充結束for i in range(10): x=x+50; y=y+50 #③ turtle.goto(x,y) #畫筆前往坐標位置(x,y) draw(30) #繪制大小為30像素的五角星turtle.done() #繪圖結束解析 本題考查自定義函數和隨機數模塊。A選項產生0至len(colors)-1之間的正整數,而orange的索引號是len(colors)-1。B選項循環5次,每次旋轉144度,共旋轉了720度,因此正好指向初始時方向。C選項畫筆的初始位置不斷地向右上移動。A16.下列Python程序段功能為:隨機生成省會城市的測試題目及相應答案。運行結果如圖所示。import randomdict={"北京市":"北京","上海市":"上海","河北省":"石家莊",...}#dict 中存儲中國34個省級行政區及其省會城市河北省的省會城市是 A.南京B.上海C.石家莊D.鄭州本題參考答案為:Csf=list ( (1) ) sh=list ( (2) ) sj=random.randint(0,33) #生成[0,33]之間的整數zd=sh[sj]del sh[sj] #刪除列表sh中的第sj項xx=random.sample(sh,3)+[zd] #隨機產生列表sh中的3項與zd連接成新列表xxrandom.shuffle(xx) #對列表xx中的內容進行隨機排序。print("%s的省會城市是 "%( (3) )) for i in range(4): print("%s.%s"%("ABCD"[i],xx[i]))print("本題參考答案為:%s"%("ABCD"[ (4) ])) 上述程序段中(1)(2)(3)(4)處可選語句為:①dict.values(),②dict.keys(),③sh[sj],④sf[sj],⑤xx.index(zd),⑥xx[zd]則(1)(2)(3)(4)處語句依次可為( )A.①②④⑤ B.①②③⑥C.②①④⑥ D.②①④⑤D17.現有n個學生的7門學科成績已存入一維數組cj中。某Python程序代碼段如下:def f(x): p=x*7;k=0 for j in range(7): if cj[p+j]>cj[p+k]: k=j return(k)cj=[96,83,91,85,86,77,88,98,93,94,82,96,87,99]km="物化生政史地技"n=2;s=""for i in range(n): s+=km[f(i)]print(s)運行后,輸出的結果為( )A.物技 B.地政 C.物生 D.技物A18.有如下Python程序段:import randomflag=True;i=0a=[0]*6while i<6: x=random.randint(1,100) if flag or x>50: a[i]=x flag=not flag i+=1執行該程序段后,在下列選項中,a數組元素中各元素值 的是 ( )A.52,95,46,74,77,83B.50,55,46,70,21,97C.62,78,57,61,69,50D.31,54,48,72,50,82CD19.某校高一有6個班,現需隨機抽取一個班代表學校參加年級合唱比賽,實現該功能的Python程序如下:import randomcla=["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)]20.有如下Python程序段import randomlist1=[]flag=Falsen=0while n<6: num=random.randint( 10,100) if num%2==1 or flag: flag=not flag list1.append(num) n+=1print(list1)C21.小明將圖a經過如下Python程序段處理后,效果為圖b所示,他發現處理后圖像黑白顏色分布很不均衡,要想將圖像處理成圖c,需對程序進行修改。0 from PIL import Image1 import numpy as np2 import matplotlib.pyplot as plt3 img=np.array(Image.open('dog.jpg').convert('L'))4 row,cols=img.shape5 for i in range(row):6 for j in range(cols):7 if img[i,j]>188:8 img[i,j]=1 #1 表示白色9 else:10 img[i,j]=0 #0 表示黑色11 plt.figure('dog')12 plt.imshow(img,cmap='gray')13 plt.axis('off')14 plt.show()下列做法正確的是 ( )A.將第7行中的數字’188’改成’100’B.將第7行中的數字’188’改成’250’C.將第7行中的’>’改成’<’D.將第8行的數字’1’改成’0’,將第10行的數字’0’改成’1’A22.小明在學習了函數的運用之后,決定編寫一段十進制轉為二進制的程序,根據輸入的十進制正整數,返回其對應的二進制字符串,如圖所示輸入要轉換的十進制數:1231111011>>> ① x=x∥2 ② n=int(input("輸入要轉換的十進制數: "))print(③ ) (1)若從鍵盤輸入數字17,則程序輸出結果為 。 (2)完成程序填空。(3)如果將加框語名修改為x>=1,對程序結果 (填字母:A.有,B.沒有)影響。 答案 (1)10001 (2)①s=str(x%2)+s ②return s ③D2B(n) (3)B23.小明要將一定數量的糖果裝進若干個盒子里,第一個盒子裝1顆,后面的盒子裝糖果的數量在前一個盒子的基礎上翻倍,剩余的糖果則放在最后一個盒子中。例如:當糖果數量為10時,第一個盒子裝1顆,第二個盒子裝2顆,第三個盒子裝4顆,此時剩下3顆糖果,則裝在第四個盒子里。根據對問題的分析,小明設計裝糖果算法如下:輸入數據:糖果數量suger;處理數據:先利用糖果數量suger得出所需盒子的數量total,再根據盒子數量及存放糖果的規律依次得出每個盒子糖果的數量并存儲在列表a中;輸出數據:所需的盒子數量、各個盒子的糖果數量。小明根據算法編寫了如下Python程序,請結合算法和程序,回答下列問題。(1)現已知糖果數量為32顆,則裝完糖果后,最后一個盒子中的糖果數量為 顆。 (2)為實現上述功能,請在劃線處填入合適代碼。def hz(n): c=0 while n>0: c+=1 ① return ca=[]suger=int(input("請輸入糖果數量:"))total=hz(suger)print ("共需要的盒子數為:"+str(total)+"個")for i in range(② ): t=2**i a.append(t) #將 t 添加到列表 a 中 ③ a.append(suger)print ("每個盒子的糖果數量依次為:"+str(a))答案 (1)1 (2)①n∥=2或n=n∥2 ②total-1或0,total-1 ③suger-=t或suger=suger-t24.當從字符串中刪除一些字符后,剩余的字符仍保持原順序,則由剩余字符組成的新字符序列,我們稱之為原字符串的子序列。例如:原始字符串“abcde”可以通過刪除字符“b”“e”得到目標字符串“acd”,“acd”即為“abcde”的子序列;而原始字符串“abcde”通過刪除字符無法得到目標字符串“ebd”,“ebd”則不是“abcde”的子序列。根據對問題的分析,設計子序列判斷算法如下:輸入數據:原始字符串bg、目標字符串ed;處理數據:①從目標字符串ed中依次讀取字符;②所取字符與原始字符串中仍未參與比較的字符逐位比較;③若比較過程中存在相同字符,則轉到①繼續執行;若目標字符串已讀取完畢,則轉到⑤執行;④若原始字符串中所有字符皆參與比較后,仍未出現相同字符,則終止判斷,確定目標字符串不是原始字符串的子序列;⑤上述過程執行后,目標字符串中所有字符都有序存在于原始字符串中,則確定目標字符串是原始字符串的子序列;輸出數據:子序列判斷結果。現根據算法編寫了如下Python程序,運行界面如圖所示。請結合算法和程序,回答下列問題。請輸入原始字符串:abcde請輸入目標字符串:acdacd是abcde的子序列!def cgs(s,t): ① for x in t: while pos pos+=1 if pos==len(s): return 1 pos+=1 return 0jg=["是","不是"]bg=input("請輸入原始字符串:")ed=input("請輸入目標字符串:")print (ed,③ ,bg,"的子序列!") (1)為實現上述功能,請在劃線處填入合適代碼。(2)若輸入原始字符串和目標字符串均為“abcde”,程序中函數調用返回的值為 。 答案 (1)①pos=0 ②s[pos]!=x③jg[cgs(bg,ed)] (2)025.某閱卷系統設計如下:讀取學生答案文件后和標準答案進行對照并判分,題型分為單選、多選和填空。單選閱卷規則:和標準答案一致得全部分數,錯選或不選不給分多選閱卷規則:和標準答案一致得全部分數,漏選給 1 分,錯選或不選不給分填空閱卷規則: 標準答案表中允許有多種答案存在。學生的答案在標準答案中存在,得全部分數,不存在或未填不給分。例如"學生答案.txt" 內容如下:張**|A|D|AC|B|flag|李**|A|D|ACD|AB|flag==True|i>0標準答案:題號 1 2 3 4 5 6題型 單選 單選 多選 多選 填空 填空答案 A D ACD BC flag或flag==True i==0或i>=0分值 2 2 3 3 2 2程序執行結果:張** 成績:8分 李** 成績:9分(1)如果學生的答案數據為"王**|A|C|AD|BC|flag==True|i>=0",則輸出的結果是 。 (2)完善劃線處的代碼。def dx(s1,s2,n): #對多選題進行判分 flag =True for i in s1: if ① : flag =False break if ② : return n elif flag==False or s1=="": return 0 else: return 1f=open("學生答案.txt")line=f.readline() #按行讀取'學生答案.txt'文件bd=["單選","A",2, "單選", "D ",2, "多選", "ACD ",3, "多選", "BC ",3, "填空",[ "flag ", "flag==True"], 2, "填空",[ "i==0 ", "i>=0 "],2]while line: sd=line.split("|") #將字符串以'|'為間隔分割成成多個字符串組成的列表 zf=0 for i in range(len(sd)-1): p=3*i if bd[p]== "單選":#對單選題判分 if ③ : zf=zf+bd[p+2] elif bd[p]== "多選": #對多選題判分 zf=④ else: if sd[i+1]!= "" and sd[i+1] in bd[p+1]: zf=zf+bd[p+2] print(sd[0],"成績: ",zf, "分") line=f.readline() #讀取下一行f.close()答案 (1)王** 成績:10分 (2)①i not in s2 或not i in s2 ②s1==s2 ③sd[i+1]==bd[p+1] ④zf+dx(sd[i+1],bd[p+1],bd[p+2])26.輸入年月日判斷是當前年份的第幾天。例如:2020年3月1日是這一年的第61天。編寫Python程序,實現該功能。(提示:普通閏年:公歷年份是4的倍數,且不是100的倍數的,為閏年。世紀閏年:公歷年份是整百數的,必須是400的倍數才是閏年)def leap(m): #判斷是否是閏年 if m%400==0 or① and m%4==0: return True else: return Falseyear= int(input("請輸入 4 位數字的年份:"))month = int(input("請輸入月份:"))day = int(input("請輸入日:"))monthdays=[0,31,28,31,30,31,30,31,31,30,31,30]if② and leap(year): sum=1else: sum=0for i in range(month): sum=③ sum=sum+dayprint(year,"年",month,"月",day,"日是這一年的第",sum,"天")(1)若日期是2022年4月18日是這一年的第 天 。(2)請在劃線處填入合適的代碼。答案 (1)108 (2)①m%100!=0 ②month>2或者month>=3 ③sum+monthdays[i]或者monthdays[i]+sum課時7 函數與模塊課時目標1.掌握自定義函數的構造和調用方法。2.掌握模塊的導入方法和常用函數的應用。一、模塊1.Python內置模塊:數學運算________模塊、生成隨機數________模塊、圖像________模塊。2.Python其他模塊:用于實現部分操作系統功能(可用于文件、目錄等操作)的os模塊,與時間處理有關的time模塊,可實現科學計算、數據可視化的________和________,用于多媒體開發和游戲軟件開發的pygame模塊,支持圖形處理的tkinter等。3.在Python中,把一組函數放到一個.py文件里,這個文件就稱為一個________。4.使用________語句或________________語句導入Python內置的模塊和來自第三方的模塊,將能使用其中的函數,如________和____________函數。二、函數的構造和應用def函數名(參數集合): <函數體> [return函數值]函數名的命名規則和變量名一樣。完成函數的構造后,在程序中就可以根據需要,像內建函數一樣調用該函數。三、模塊的導入及應用在Python Shell中導入math模塊,并調用該模塊中的sqrt函數,可采用以下兩種方法:方法一 方法二>>>import math>>>math.sqrt(9)3.0 >>>from math import sqrt>>>sqrt(9)3.01.math模塊中的常用常數與函數名稱 含義math.e 自然常數emath.pi 圓周率πmath.ceil(x) 對x向上取整,比如x=1.2,返回2math.floor(x) 對x向下取整,比如x=1.2,返回1math.pow(x,y) 指數運算,得到x的y次方math.log(x) 對數,默認基底為emath.sin(x) 正弦函數math.cos(x) 余弦函數math.tan(x) 正切函數math.degrees(x) 角度轉換成弧度math.radians(x) 弧度轉換成角度2.random模塊中的常用函數名稱 含義random.random() 隨機生成一個[0,1)范圍內的實數random.uniform(a,b) 隨機生成一個[a,b]范圍內的實數random.randint(a,b) 隨機生成一個[a,b]范圍內的整數random.choice(seq) 從序列的元素中隨機挑選一個元素,比如:random.choice(range(10)),從0到9中隨機挑選一個整數random.sample(seq,k) 從序列中隨機挑選k個元素random.shuffle(seq) 將序列的所有元素隨機排序例1 編寫一個自定義函數實現判斷字符串s是否是回文字符串,請在劃線處填入合適的代碼。算法思想:采用雙指針分別指向首尾字符,若兩者相同,依次向中間靠攏def hw(s): i=0 j=len(s)-1 while ① : if ② : return False i+=1 j-=1 return Trues1=input('請輸入字符串s:')t=hw(s1)if ③ : print("字符串"+s1+"是回文字符串!")else: print("字符串"+s1+"不是回文字符串!")聽課筆記: 變式訓練1 下列Python函數實現了將大寫字母循環后移t個位置功能,如A向后移3個位置后變為D,X后移3位后,變成A。已知'A'的ASCII碼值為65。def jm(s,t): n=ord(s)-65+t if n>=25:____________ return chr(n+65)(1)請在程序劃線處填入合適的代碼。(2)若執行語句print(jm('Y',4)),則輸出的內容是____________。例2 生成一個隨機密碼,要求大寫字母、小寫字母和數字必須至少包含一個,且密碼的長度不能少于6位。編寫的Python代碼如下:import randomdef pas(): a=″abcdefghijklmnopqrstuvwxyz″ b=″ABCDEFGHIJKLMNOPQRSTUVWXYZ″c=″0123456789″st=a+b+cd=[]d.append(①________) #從字符串a中隨機取一個字符d.append(②________) #從字符串b中隨機取一個字符i=2f=Truewhile i<=5③________f:d.append(random.choice(st))if d[i]>=″0″ and d[i]<=″9″: f=False i+=1 random.shuffle(d) #將序列d中所有元素隨機排序 print(″″.join(d))pas()(1)請在程序劃線處填入合適的代碼。(2)執行上述算法,________(填:可能/不可能)產生密碼“Eaf8dLdeS”。聽課筆記: 變式訓練2 哥德巴赫猜想:任意一個大于等于4的偶數,都可以用兩個素數之和表示。如:4=2+2,6=3+3,8=3+5,10=5+5,12=5+7,98=17+79。編寫一個驗證哥德巴赫猜想的Python程序:程序運行時,輸入一個大于等于4的偶數,如果哥德巴赫猜想驗證成功,則第一行輸出信息“Yes”,第二行輸出用兩個素數表示該偶數的等式,否則輸出“No”。程序運行效果如圖所示:實現上述功能的程序如下,請在程序劃線處填入合適的代碼。import mathdef pp(x): pp=True j=2 while j<=int(math.sqrt(x)) and pp==True: if x % j==0: pp=False else: ① return ppn=int(input('please input n:'))p=1pd=Falseif n % 2==0: while not pd and p p=p+1 ② if pp(p) and pp(q): print('Yes') ③ print(str(n),"=",str(p),'+',str(q)) if pd==False: print('No') else: print('sorry,你輸入的數不是偶數!')例3 有如下Python程序段import randoms='abcdefghijklmnopq'for i in range(4): k=random.randint(0,4)+random.randint(0,1)*10 print(s[k],end='')執行該程序后,輸出的結果不可能是 ( )A.ddaa B.eaeo C.dfam D.nemc聽課筆記: 例4 小明用Python語言中對大小為100*100像素的圖像“上.jpg”(如圖所示)進行簡單處理,得到下列四幅圖像,請在劃線處填入合適的代碼。n1 n2 n3 n4部分代碼如下:from PIL import Imageimport numpy as npimport matplotlib.pyplot as pltimg=np.array(Image.open('上.jpg').convert('L')) #將圖像轉換為灰色圖像后轉換為二維矩陣width,height = img.shape[0],img.shape[1]n1 = np.zeros(shape=(width,height)) # 用于存儲結果圖像,大小和img相同n2 = np.zeros(shape=(width,height))n3 = np.zeros(shape=(width,height))n4 = np.zeros(shape=(width,height))for x in range(0,width):for y in range(0,height):①____________②____________n3[x,y]=img[x,y]n4[x,y]=img[x,y]if y%10==0: ③____________if x%10==0: ④____________#顯示圖像,代碼略聽課筆記: 變式訓練3 現有一幅文件名為“車牌.jpg”的彩色圖像,車牌底色為藍色,如圖a所示,通過Python程序對該圖像進行二值化,即將車牌藍色部分變為白色,其他全部變為黑色,如圖b所示,以凸顯出車牌的輪廓。程序代碼如下,請在劃線處填入合適的代碼。 圖a 圖bfrom 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]=1 #將新矩陣該位置設為白色else: ②________plt.figure('車牌')plt.imshow(imgnew, cmap='gray')plt.axis('off')plt.show()1.有如下Python程序段:def f(m): a=m%10 b=m∥10%10 c=m∥100 if c**3+b**3+a**3==m: return "YES" else: return "NO"m=int(input("輸入一個三位數:"))print(f(m))執行該程序段后,若輸出結果為“YES”,則輸入變量m值可能為 ( )A.121 B.134 C.153 D.1422.有如下Pyhton程序段:def gcd(a,b): c = a%b while c > 0: a,b = b,c c=a%b return ba=int(input("請輸入:"))b=int(input("請輸入:"))gcd = gcd(a,b)scm = a * b ∥ gcdprint( gcd,scm)運行該程序,輸入a,b的值分別為16,12,則輸出gcd,scm的值分別為 ( )A.4 48 B.48 4 C.2 12 D.12 23.有如下Pyhon程序段:def sel(a,b,c): if a a+=b;b=a-b;a=a-b if a t=a;a=c;c=t print(a,b,c)sel(1,2,3)執行該程序段后,輸出的結果是 ( )A.1,2,3 B.3,2,1 C.3,1,2 D.1,3,24.有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”程序功能不變5.有如下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.circle(x) #畫半徑是x像素的圓 t.left(91) #畫筆方向逆時針旋轉91度關于該程序段,下列說法正確的是 ( )A.程序運行后,繪制了100個同心圓B.程序運行后,繪制的所有圓的顏色不可能都為紅色C.程序運行后,最后繪制的一個圓的顏色可能為黃色D.程序運行后,繪制的各圓沒有交點6.某Python程序段如下:def isprime(x): for i in range(2,x): if x % i ==0: return False return Trueprime =[]for i in range(2,21): if isprime(i): prime.append(i) #將 i 添加到列表print(len(prime))運行該程序段,輸出結果是 。 7.技術學科一共包含2門學科——信息技術和通用技術,這就需要我們關注學科的平衡,而衡量某位學生學科平衡的重要指標就是學科吻合度,采用信息技術與通用技術的得分差來判斷[分差每3分為一級:分差0到3分(不含3分),表示“0級偏差”;分差3到6分(不含6分),表示“1級偏差”,分差6到9分(不含9分),表示“2級偏差”……分差最高為50分,最后一級分差48到50(含50分),表示“16級偏差”],計算每位學生的吻合度偏差值。根據題意,請回答下列問題:(1)(多選)為了后續程序處理,需要把數據讀入到程序,每個學生一條記錄,用Python存儲學生測試得分數據,下列可行的是(以前兩條記錄為例) (填字母)。 A.students=[[0901,50,32],[0902,50,45],……]B.students={'0901':['50','32'],'0902':['50','45'],……}C.students={0901:['50','32'],0902:['50','45'],……}D.students=[['0901','50','32'],['0902','50','45'],……](2)編寫函數f(xx,ty)實現傳入信息得分和通用得分,返回吻合度級別 (返回示例:'1級偏差')。 (3)完成程序填空:students={'0901':[50,82],'0902':[50,95],……}#(以前兩條記錄為例)for i in students.keys(): xx=① ty=② print(i,':',f(xx,ty)) 展開更多...... 收起↑ 資源列表 課時7 函數與模塊 學案 浙教版(2019)必修1.doc 課時7 函數與模塊 教案 浙教版(2019)必修1.doc 課時7 函數與模塊 課件(共108張ppt)浙教版(2019)必修1.pptx 縮略圖、資源來源于二一教育資源庫