版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
2025年P(guān)ython二級考試押題試卷:實戰(zhàn)演練,突破難點考試時間:______分鐘總分:______分姓名:______一、基礎(chǔ)知識與編程實踐1.編寫Python代碼,定義一個名為`Student`的類,包含私有屬性`_name`和`_age`,并在類中提供公共方法`set_info`用于設(shè)置這兩個屬性值,以及`get_name`和`get_age`方法用于獲取這兩個屬性的值。要求在獲取屬性值時,如果屬性不存在,則返回`None`。同時,在類中定義一個`__str__`方法,返回格式為`"Name:{name},Age:{age}"`的字符串,其中`{name}`和`{age}`分別代表`name`和`age`屬性的值。2.使用Python標準庫中的`json`模塊,完成以下任務(wù):*編寫代碼將以下Python字典對象轉(zhuǎn)換為JSON格式的字符串,并輸出該字符串:```pythondata={"name":"Alice","age":30,"address":{"city":"Beijing","district":"Haidian"},"hobbies":["reading","traveling","sports"]}```*接著,編寫代碼將上一步生成的JSON字符串反序列化為Python字典對象,并將反序列化得到的字典的`hobbies`列表中的每個元素都轉(zhuǎn)換為大寫字母,最后輸出修改后的字典對象。3.定義一個函數(shù)`count_vowels`,接收一個字符串參數(shù)`s`,返回該字符串中元音字母(a,e,i,o,u,不區(qū)分大小寫)出現(xiàn)的總次數(shù)。要求在函數(shù)內(nèi)部使用循環(huán)和條件語句實現(xiàn),不得使用內(nèi)置的`count`方法或正則表達式。二、函數(shù)式編程與高階函數(shù)4.使用`map()`函數(shù)和`lambda`表達式,編寫代碼將一個列表`nums=[1,2,3,4,5,6,7,8,9,10]`中的每個元素平方,得到一個新的列表,并輸出該新列表。5.定義一個裝飾器`memoize`,用于緩存函數(shù)的運行結(jié)果。當裝飾的函數(shù)被多次調(diào)用,并且輸入的參數(shù)相同時,直接返回緩存的結(jié)果,不再重新計算。要求裝飾器能夠處理不帶參數(shù)的函數(shù),以及接受位置參數(shù)和關(guān)鍵字參數(shù)的函數(shù)。6.編寫一個生成器函數(shù)`fibonacci(n)`,用于生成斐波那契數(shù)列的前`n`個數(shù)字。斐波那契數(shù)列的定義為:第0項是0,第1項是1,從第2項開始,每一項都等于前兩項之和。要求生成器每次調(diào)用時返回數(shù)列中的下一項。三、文件操作與異常處理7.編寫Python代碼,實現(xiàn)以下功能:*從當前目錄下名為`input.txt`的文件中讀取所有行,忽略空行。*將讀取到的每一行文本都轉(zhuǎn)換為小寫,并去除行首行尾的空白字符。*將處理后的文本逐行寫入到當前目錄下名為`output.txt`的文件中,每個單詞之間用單個空格分隔。8.編寫一個函數(shù)`safe_divide`,接收兩個參數(shù)`num`和`den`,用于計算`num/den`。要求在函數(shù)內(nèi)部使用`try...except`語句塊來捕獲可能發(fā)生的`ZeroDivisionError`(除以零錯誤)和`TypeError`(類型錯誤,例如傳入非數(shù)字參數(shù))。如果捕獲到`ZeroDivisionError`,函數(shù)應(yīng)返回`None`;如果捕獲到`TypeError`,函數(shù)應(yīng)返回`-1`。如果計算正常進行,則返回計算結(jié)果。在函數(shù)外部,編寫代碼調(diào)用`safe_divide`函數(shù),傳入不同的參數(shù)組合(至少包含一次除以零的情況和一次類型錯誤的情況),并打印結(jié)果。四、數(shù)據(jù)結(jié)構(gòu)與算法9.編寫一個函數(shù)`find_second_largest`,接收一個非空列表`nums`作為參數(shù),該列表中的元素均為整數(shù),且列表中不包含重復(fù)元素。函數(shù)需要找到并返回列表中第二大的元素。要求在函數(shù)內(nèi)部,不得使用內(nèi)置的`sorted()`函數(shù)或列表的`sort()`方法,但可以使用`max()`函數(shù)。如果列表中元素的個數(shù)小于2,則函數(shù)返回`None`。10.編寫Python代碼,實現(xiàn)快速排序算法(QuickSort)。要求定義一個名為`quick_sort`的函數(shù),接收一個列表`arr`作為參數(shù),返回該列表的快速排序結(jié)果。在實現(xiàn)過程中,可以定義一個輔助函數(shù)`partition`用于實現(xiàn)列表劃分的操作。五、綜合應(yīng)用11.編寫一個Python程序,模擬一個簡單的待辦事項列表應(yīng)用。要求程序支持以下功能:*`add(task)`:添加一個待辦事項到列表中。*`list()`:列出所有待辦事項。*`complete(index)`:將指定索引(從0開始)的待辦事項標記為已完成。要求索引有效時才執(zhí)行操作。*`save(filename)`:將當前所有待辦事項(包括已完成和未完成的狀態(tài))保存到一個名為`filename`的JSON文件中。*`load(filename)`:從名為`filename`的JSON文件中加載待辦事項列表。加載后,待辦事項的狀態(tài)應(yīng)恢復(fù)到文件保存時的狀態(tài)。程序主體部分應(yīng)包含一個循環(huán),提示用戶輸入命令(如`'add'`,`'list'`,`'complete1'`,`'savetasks.json'`,`'loadtasks.json'`,`'exit'`),并根據(jù)用戶輸入執(zhí)行相應(yīng)的操作。當用戶輸入`'exit'`時,程序結(jié)束。12.假設(shè)有一個包含多行文本的文件`poem.txt`,每行包含一個詩句。編寫Python代碼實現(xiàn)以下功能:*讀取`poem.txt`文件,統(tǒng)計并輸出該詩歌中每個單詞出現(xiàn)的頻率(忽略大小寫,空格、標點符號如逗號、句號等視為單詞分隔符)。要求輸出的結(jié)果按照單詞出現(xiàn)頻率從高到低排序,如果頻率相同,則按單詞字母順序排序。*找出并輸出該詩歌中最長的單詞。如果有多個最長的單詞,則輸出它們(以空格分隔)。---試卷答案一、基礎(chǔ)知識與編程實踐1.```pythonclassStudent:def__init__(self):self._name=Noneself._age=Nonedefset_info(self,name,age):self._name=nameself._age=agedefget_name(self):returnself._namedefget_age(self):returnself._agedef__str__(self):returnf"Name:{self._name},Age:{self._age}"ifself._nameisnotNoneandself._ageisnotNoneelse"Name:None,Age:None"```解析思路:定義`Student`類,使用私有屬性`_name`和`_age`存儲數(shù)據(jù)。通過`set_info`設(shè)置屬性值,`get_name`和`get_age`獲取屬性值,如果屬性不存在則返回`None`。`__str__`方法用于定義對象的字符串表示形式,根據(jù)屬性是否存在返回相應(yīng)字符串。2.```pythonimportjsondata={"name":"Alice","age":30,"address":{"city":"Beijing","district":"Haidian"},"hobbies":["reading","traveling","sports"]}json_str=json.dumps(data)print(json_str)#輸出JSON字符串parsed_data=json.loads(json_str)parsed_data['hobbies']=[hobby.upper()forhobbyinparsed_data['hobbies']]print(parsed_data)#輸出修改后的字典對象```解析思路:使用`json.dumps()`將字典對象轉(zhuǎn)換為JSON格式的字符串。使用`json.loads()`將JSON字符串反序列化為字典對象。在反序列化后,通過列表推導(dǎo)式將`hobbies`列表中的每個元素轉(zhuǎn)換為大寫。3.```pythondefcount_vowels(s):count=0vowels=set('aeiouAEIOU')forcharins:ifcharinvowels:count+=1returncount```解析思路:定義函數(shù)`count_vowels`,使用循環(huán)遍歷字符串`s`中的每個字符。使用集合`vowels`存儲所有元音字母(大小寫都包含)。在循環(huán)中,使用條件語句檢查當前字符是否在元音集合中,如果在則計數(shù)器`count`加一。最后返回計數(shù)器的值。二、函數(shù)式編程與高階函數(shù)4.```pythonnums=[1,2,3,4,5,6,7,8,9,10]squared_nums=list(map(lambdax:x2,nums))print(squared_nums)```解析思路:使用`map()`函數(shù),將`lambda`表達式`lambdax:x2`(用于計算一個數(shù)的平方)應(yīng)用到列表`nums`的每個元素上。`map()`返回一個迭代器,使用`list()`將其轉(zhuǎn)換為列表。最后打印出平方后的新列表。5.```pythondefmemoize(func):cache={}defwrapper(*args,kwargs):key=(args,frozenset(kwargs.items()))ifkeyincache:returncache[key]result=func(*args,kwargs)cache[key]=resultreturnresultreturnwrapper```解析思路:定義裝飾器函數(shù)`memoize`,內(nèi)部定義`cache`字典用于存儲結(jié)果。`wrapper`函數(shù)接收任意位置參數(shù)和關(guān)鍵字參數(shù),使用元組`args`和凍結(jié)集合`frozenset(kwargs.items())`作為緩存鍵。檢查緩存鍵是否存在于`cache`中,如果存在則返回緩存結(jié)果,否則調(diào)用原始函數(shù)`func`計算結(jié)果,存入緩存并返回。返回`wrapper`函數(shù)。6.```pythondeffibonacci(n):a,b=0,1for_inrange(n):yieldaa,b=b,a+b```解析思路:定義生成器函數(shù)`fibonacci`,接收參數(shù)`n`表示生成數(shù)列的長度。初始化兩個變量`a`和`b`分別表示斐波那契數(shù)列的前兩項(0和1)。使用`for`循環(huán)迭代`n`次,每次通過`yield`語句返回當前值`a`。然后更新`a`和`b`的值為下一對斐波那契數(shù)。三、文件操作與異常處理7.```pythonwithopen('input.txt','r',encoding='utf-8')asinfile,open('output.txt','w',encoding='utf-8')asoutfile:forlineininfile:processed_line=line.strip().lower()ifprocessed_line:#忽略空行outfile.write(processed_line+'')```解析思路:使用`with`語句同時打開`input.txt`用于讀取和`output.txt`用于寫入,確保文件操作完成后自動關(guān)閉。讀取`input.txt`的每一行,使用`strip()`去除行首行尾的空白字符,使用`lower()`轉(zhuǎn)換為小寫。檢查處理后的行是否為空,如果不為空則寫入`output.txt`,并在單詞間添加單個空格。8.```pythondefsafe_divide(num,den):try:returnnum/denexceptZeroDivisionError:returnNoneexceptTypeError:return-1#調(diào)用示例print(safe_divide(10,2))#輸出5.0print(safe_divide(10,0))#輸出Noneprint(safe_divide(10,'a'))#輸出-1```解析思路:定義`safe_divide`函數(shù),在`try`塊中嘗試執(zhí)行除法運算。使用`exceptZeroDivisionError`捕獲除以零的錯誤,返回`None`。使用`exceptTypeError`捕獲類型錯誤,返回`-1`。如果除法正常執(zhí)行,則返回結(jié)果。在函數(shù)外部調(diào)用該函數(shù)并打印結(jié)果以驗證。四、數(shù)據(jù)結(jié)構(gòu)與算法9.```pythondeffind_second_largest(nums):iflen(nums)<2:returnNonefirst_max=second_max=float('-inf')fornuminnums:ifnum>first_max:second_max,first_max=first_max,numeliffirst_max>num>second_max:second_max=numreturnsecond_maxifsecond_max!=float('-inf')elseNone```解析思路:定義函數(shù),首先檢查列表長度是否小于2,如果是則返回`None`。初始化兩個變量`first_max`和`second_max`為負無窮,用于存儲最大和次大的值。遍歷列表中的每個數(shù)字`num`,如果`num`大于`first_max`,則將當前的`first_max`賦值給`second_max`,然后將`num`賦值給`first_max`。如果`num`小于`first_max`但大于`second_max`,則更新`second_max`。最后返回`second_max`,如果`second_max`仍是負無窮(即列表中所有數(shù)都相等或列表長度不夠),則返回`None`。10.```pythondefquick_sort(arr):iflen(arr)<=1:returnarrpivot=arr[len(arr)//2]left=[xforxinarrifx<pivot]middle=[xforxinarrifx==pivot]right=[xforxinarrifx>pivot]returnquick_sort(left)+middle+quick_sort(right)#輔助函數(shù)partition可選,實現(xiàn)方式類似#defpartition(arr,low,high):#pivot=arr[high]#i=low-1#forjinrange(low,high):#ifarr[j]<=pivot:#i+=1#arr[i],arr[j]=arr[j],arr[i]#arr[i+1],arr[high]=arr[high],arr[i+1]#returni+1##defquick_sort(arr,low=0,high=None):#ifhighisNone:#high=len(arr)-1#iflow<high:#pi=partition(arr,low,high)#quick_sort(arr,low,pi-1)#quick_sort(arr,pi+1,high)#returnarr```解析思路(第一版):實現(xiàn)快速排序。如果列表長度小于或等于1,直接返回。選擇中間元素作為基準值`pivot`。使用列表推導(dǎo)式將列表分為小于、等于、大于`pivot`的三部分(`left`,`middle`,`right`)。然后遞歸地對`left`和`right`部分進行快速排序,并將結(jié)果連接起來返回。這是一種簡潔的遞歸實現(xiàn)方式。解析思路(第二版,使用partition):快速排序是基于分治法的排序算法。選擇一個基準值(pivot),然后將數(shù)組劃分為兩部分,一部分是所有小于等于基準值的元素,另一部分是所有大于基準值的元素。這個過程稱為`partition`。遞歸地在小于等于基準值的部分和大于基準值的部分上重復(fù)這個過程,直到整個數(shù)組有序。`partition`函數(shù)負責找到基準值正確的位置,并返回這個位置索引,然后主函數(shù)遞歸調(diào)用自身對左右子數(shù)組進行排序。第二版提供了使用`partition`函數(shù)的實現(xiàn)思路。五、綜合應(yīng)用11.```pythonimportjsonclassTodoList:def__init__(self):self.tasks=[]#每個任務(wù)是一個字典:{'task':str,'completed':bool}defadd(self,task):self.tasks.append({"task":task,"completed":False})deflist(self):foridx,taskinenumerate(self.tasks):status="?"iftask['completed']else""print(f"{idx:2d}[{status}]{task['task']}")defcomplete(self,index):if0<=index<len(self.tasks):self.tasks[index]['completed']=Truedefsave(self,filename):withopen(filename,'w',encoding='utf-8')asf:json.dump(self.tasks,f,ensure_ascii=False,indent=2)defload(self,filename):try:withopen(filename,'r',encoding='utf-8')asf:self.tasks=json.load(f)exceptFileNotFoundError:self.tasks=[]#文件不存在時創(chuàng)建空列表#程序主體(示例)#todo=TodoList()#todo.add("Buymilk")#todo.add("Readabook")#todo.list()#plete(0)#todo.list()#todo.save("my_tasks.json")#todo.load("my_tasks.json")#todo.list()#todo.list()#輸出exit```解析思路:定義`TodoList`類管理待辦事項列表。內(nèi)部使用`tasks`列表存儲任務(wù),每個任務(wù)是一個包含`'task'`(任務(wù)描述字符串)和`'completed'`(完成狀態(tài)布爾值)的字典。`add`方法添加新任務(wù)(默認未完成)。`list`方法列出所有任務(wù),顯示索引、完成狀態(tài)和任務(wù)描述。`complete`方法根據(jù)索引標記任務(wù)為已完成。`save`方法將當前任務(wù)列表保存到JSON文件。`load`方法從JSON文件加載任務(wù)列表,如果文件不存在則創(chuàng)建空列表。程序主體部分提供了一種可能的命令循環(huán)實現(xiàn)方式。12.```pythonimportrefromcollectionsimportCounterdefanalyze_poem(filename):try:withopen(filename,'r',encoding='utf-8')asf:text=f.read()#使用正則表達式移除標點符號,并將文本轉(zhuǎn)為小寫cleaned_text=re.sub(r'[^\w\s]','',text).lower()words
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年醫(yī)療行業(yè)失信懲戒合同
- 2026年節(jié)能改造合同
- 2025年上饒市廣信區(qū)人民法院公開招聘勞務(wù)派遣工作人員14人備考題庫及答案詳解一套
- 2026年海峽兩岸國際象棋合作委員會合作協(xié)議
- 2026年教育會展活動展位銷售合同
- 快遞公司春節(jié)放假通知
- 2025年涼山彝族自治州普格縣公安局公開招聘警務(wù)輔助人員的備考題庫帶答案詳解
- 2025年上杭輔警招聘真題及答案
- 黑龍江公安警官職業(yè)學院《英語詞匯學》2025 學年第二學期期末試卷
- 黑龍江公安警官職業(yè)學院《建筑構(gòu)造》2025 學年第二學期期末試卷
- JJF(陜) 042-2020 沖擊試樣缺口投影儀校準規(guī)范
- T-CFA 030501-2020 鑄造企業(yè)生產(chǎn)能力核算方法
- 孕期膽囊炎的臨床特征
- 《飼料添加劑枯草芽孢桿菌》編制說明
- 長安大學《通信原理》2021-2022學年第一學期期末試卷
- DB53∕T 1269-2024 改性磷石膏用于礦山廢棄地生態(tài)修復(fù)回填技術(shù)規(guī)范
- JBT 8127-2011 內(nèi)燃機 燃油加熱器
- GB/T 43935-2024礦山土地復(fù)墾與生態(tài)修復(fù)監(jiān)測評價技術(shù)規(guī)范
- MOOC 西方園林歷史與藝術(shù)-北京林業(yè)大學 中國大學慕課答案
- 混凝土緩凝劑-標準
- 年生產(chǎn)一億粒阿莫西林膠囊(0.25)
評論
0/150
提交評論