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