2025年P(guān)ython二級(jí)考試專項(xiàng)訓(xùn)練試卷:案例解析與代碼優(yōu)化_第1頁
2025年P(guān)ython二級(jí)考試專項(xiàng)訓(xùn)練試卷:案例解析與代碼優(yōu)化_第2頁
2025年P(guān)ython二級(jí)考試專項(xiàng)訓(xùn)練試卷:案例解析與代碼優(yōu)化_第3頁
2025年P(guān)ython二級(jí)考試專項(xiàng)訓(xùn)練試卷:案例解析與代碼優(yōu)化_第4頁
2025年P(guān)ython二級(jí)考試專項(xiàng)訓(xùn)練試卷:案例解析與代碼優(yōu)化_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

2025年P(guān)ython二級(jí)考試專項(xiàng)訓(xùn)練試卷:案例解析與代碼優(yōu)化考試時(shí)間:______分鐘總分:______分姓名:______第一題請(qǐng)編寫一個(gè)Python函數(shù),名為`analyze_text`。該函數(shù)接收一個(gè)字符串參數(shù)`text`。函數(shù)需要完成以下任務(wù):1.統(tǒng)計(jì)并返回字符串中每個(gè)字母(區(qū)分大小寫)出現(xiàn)的次數(shù),結(jié)果以字典形式返回,其中鍵為字母,值為出現(xiàn)次數(shù)。忽略非字母字符。2.計(jì)算并返回字符串中所有單詞的長(zhǎng)度總和。假設(shè)單詞由非字母字符分隔。3.返回字符串中最長(zhǎng)的單詞。如果存在多個(gè)最長(zhǎng)單詞,返回第一個(gè)找到的單詞。假設(shè)單詞由非字母字符分隔。請(qǐng)確保你的函數(shù)能夠處理空字符串,并在計(jì)算過程中考慮效率。第二題假設(shè)你需要管理一個(gè)簡(jiǎn)單的圖書館借閱系統(tǒng)。請(qǐng)定義一個(gè)類`Book`,包含以下特性:1.`__init__`方法:接收書名`title`(字符串)和作者`author`(字符串)作為參數(shù),并初始化相應(yīng)屬性。同時(shí),添加一個(gè)`borrowed`屬性,用于標(biāo)記書籍是否已被借出,初始值為`False`。2.`borrow`方法:當(dāng)書籍未被借出時(shí),將其`borrowed`狀態(tài)設(shè)置為`True`,并返回一條借閱成功的消息,例如`"《書名》hasbeenborrowed."`。如果書籍已被借出,返回一條消息`"《書名》isalreadyborrowed."`。3.`return_book`方法:當(dāng)書籍已被借出時(shí),將其`borrowed`狀態(tài)設(shè)置為`False`,并返回一條歸還成功的消息,例如`"《書名》hasbeenreturned."`。如果書籍未被借出,返回一條消息`"《書名》wasnotborrowed."`。請(qǐng)確保在方法中正確引用書籍的標(biāo)題。1.`__init__`方法:接收一個(gè)空列表作為參數(shù),用于存儲(chǔ)圖書館內(nèi)的`Book`對(duì)象。2.`add_book`方法:接收一個(gè)`Book`對(duì)象作為參數(shù),將其添加到圖書館的書籍列表中。3.`find_book_by_title`方法:接收一個(gè)書名`title`(字符串)作為參數(shù),在圖書館的書籍列表中查找該書。如果找到,返回該`Book`對(duì)象;如果未找到,返回`None`。4.`borrow_book_by_title`方法:接收一個(gè)書名`title`(字符串)作為參數(shù)。首先調(diào)用`find_book_by_title`查找該書,如果找到且書籍可借(`borrowed`為`False`),則調(diào)用該書的`borrow`方法,并返回借閱結(jié)果消息。如果未找到或書籍已被借出,返回相應(yīng)的提示消息。第三題請(qǐng)編寫一個(gè)Python腳本,用于處理學(xué)生成績(jī)數(shù)據(jù)。腳本需要完成以下功能:1.從一個(gè)名為`grades.txt`的文本文件中讀取學(xué)生數(shù)據(jù)。文件格式如下,每行一個(gè)學(xué)生,包含姓名(字符串)和分?jǐn)?shù)(整數(shù)),姓名和分?jǐn)?shù)之間用逗號(hào)分隔:```Alice,85Bob,92Charlie,78David,65```2.將讀取到的學(xué)生姓名和分?jǐn)?shù)存儲(chǔ)在字典中,其中姓名為鍵,分?jǐn)?shù)為值。3.計(jì)算所有學(xué)生的平均分,并將結(jié)果打印輸出,格式為`"AverageScore:X.X"`。4.找出分?jǐn)?shù)最高的學(xué)生姓名和分?jǐn)?shù),并將結(jié)果打印輸出,格式為`"HighestScore:<Name>,<Score>"`。5.將所有學(xué)生的姓名按分?jǐn)?shù)從高到低排序,并將排序后的姓名列表打印輸出,格式為:```1.<Name1>2.<Name2>3.<Name3>```(如果有并列分?jǐn)?shù),保持輸入順序)請(qǐng)確保腳本能夠處理文件不存在或格式不正確的異常情況,并進(jìn)行適當(dāng)?shù)奶崾?。第四題請(qǐng)編寫一個(gè)生成器函數(shù),名為`generate_primes`。該函數(shù)接收一個(gè)整數(shù)參數(shù)`n`,表示生成的質(zhì)數(shù)范圍上限(即生成小于或等于`n`的所有質(zhì)數(shù))。函數(shù)應(yīng)使用yield語句逐個(gè)產(chǎn)出一個(gè)質(zhì)數(shù)。請(qǐng)確保你的函數(shù)能夠正確處理`n`小于2的情況(此時(shí)不應(yīng)產(chǎn)生任何質(zhì)數(shù))。在生成質(zhì)數(shù)時(shí),可以采用基礎(chǔ)的試除法(例如,檢查從2到`sqrt(current_number)`是否有因子)。第五題現(xiàn)有以下代碼片段:```pythondefprocess_data(data):result=[]foritemindata:ifitem%2==0:processed=item*2else:processed=item+10result.append(processed)returnresultdata_list=[1,2,3,4,5,6]output=process_data(data_list)print(output)```請(qǐng)分析上述代碼的功能?,F(xiàn)在,請(qǐng)重構(gòu)`process_data`函數(shù),使其功能保持不變,但使用列表推導(dǎo)式(listcomprehension)來實(shí)現(xiàn),以提高代碼的簡(jiǎn)潔性和執(zhí)行效率。請(qǐng)將重構(gòu)后的函數(shù)代碼寫在下面。第六題請(qǐng)使用`os`模塊中的相關(guān)函數(shù),編寫一個(gè)Python腳本,實(shí)現(xiàn)以下功能:1.獲取當(dāng)前工作目錄的路徑,并打印輸出。2.列出當(dāng)前工作目錄下的所有文件和文件夾(不包括`.`和`..`),并打印出每個(gè)條目的路徑。3.在當(dāng)前工作目錄下創(chuàng)建一個(gè)名為`test_folder`的新文件夾。如果該文件夾已存在,則打印出`"Folderalreadyexists."`消息,不再重復(fù)創(chuàng)建。4.刪除在步驟2中列出的第一個(gè)找到的名為`test_folder`的文件夾(如果存在)。如果該文件夾不存在,則打印出`"Foldernotfoundfordeletion."`消息。請(qǐng)確保腳本在執(zhí)行刪除操作前,已確認(rèn)目標(biāo)文件夾的存在,并妥善處理可能出現(xiàn)的異常。試卷答案第一題解析思路:1.統(tǒng)計(jì)字母頻率:使用`collections.Counter`或手動(dòng)創(chuàng)建字典。遍歷字符串,使用`str.isalpha()`檢查字符是否為字母,忽略非字母。如果字符是字母,則更新字典計(jì)數(shù)。2.計(jì)算單詞長(zhǎng)度總和:使用`str.split()`分割字符串獲取單詞列表。遍歷列表,計(jì)算每個(gè)單詞的長(zhǎng)度(`len(word)`),并將所有長(zhǎng)度累加。3.查找最長(zhǎng)單詞:在分割得到的單詞列表中,使用內(nèi)置的`max`函數(shù),可以指定`key=len`作為參數(shù),自動(dòng)找出最長(zhǎng)的單詞。第一題答案:```pythonfromcollectionsimportCounterdefanalyze_text(text):#1.統(tǒng)計(jì)字母頻率letters=[cforcintextifc.isalpha()]letter_count=dict(Counter(letters))#2.計(jì)算單詞長(zhǎng)度總和words=text.split()total_length=sum(len(word)forwordinwords)#3.查找最長(zhǎng)單詞longest_word=max(words,key=len)ifwordselse""returnletter_count,total_length,longest_word```第二題解析思路:1.`Book`類:*`__init__`:初始化`title`,`author`,`borrowed`屬性。*`borrow`:檢查`borrowed`是否為`False`。如果是,則設(shè)置為`True`,并返回成功消息,消息中包含`title`。如果不是,返回已借出消息。*`return_book`:檢查`borrowed`是否為`True`。如果是,則設(shè)置為`False`,并返回歸還成功消息,消息中包含`title`。如果不是,返回未借出消息。2.`Library`類:*`__init__`:初始化一個(gè)空列表`books`。*`add_book`:將傳入的`Book`對(duì)象添加到`books`列表的末尾。*`find_book_by_title`:遍歷`books`列表,檢查每個(gè)`Book`對(duì)象的`title`屬性是否與傳入的`title`匹配。找到則返回該`Book`對(duì)象。遍歷結(jié)束后若未找到,返回`None`。*`borrow_book_by_title`:調(diào)用`find_book_by_title`查找書籍。如果返回值不是`None`(即找到書籍),則檢查該書的`borrowed`狀態(tài)。如果為`False`,調(diào)用該書的`borrow`方法并返回結(jié)果。如果為`True`,返回已借出消息。如果`find_book_by_title`返回`None`(即未找到書籍),返回未找到消息。第二題答案:```pythonclassBook:def__init__(self,title,author):self.title=titleself.author=authorself.borrowed=Falsedefborrow(self):ifnotself.borrowed:self.borrowed=Truereturnf"《{self.title}》hasbeenborrowed."else:returnf"《{self.title}》isalreadyborrowed."defreturn_book(self):ifself.borrowed:self.borrowed=Falsereturnf"《{self.title}》hasbeenreturned."else:returnf"《{self.title}》wasnotborrowed."classLibrary:def__init__(self):self.books=[]defadd_book(self,book):self.books.append(book)deffind_book_by_title(self,title):forbookinself.books:ifbook.title==title:returnbookreturnNonedefborrow_book_by_title(self,title):book=self.find_book_by_title(title)ifbook:returnbook.borrow()else:returnf"Booktitled'{title}'notfound."```第三題解析思路:1.讀取文件:使用`open`函數(shù)以讀模式打開`grades.txt`。使用`try...except`結(jié)構(gòu)處理文件不存在異常(`FileNotFoundError`)。使用`readlines()`讀取所有行。2.解析數(shù)據(jù)并存儲(chǔ):初始化一個(gè)空字典`grades_dict`。遍歷文件讀取到的每一行。使用`str.strip()`去除行首行尾空格,使用`str.split(',')`按逗號(hào)分割行內(nèi)容,獲取姓名和分?jǐn)?shù)。將分?jǐn)?shù)轉(zhuǎn)換為整數(shù)。將姓名作為鍵,分?jǐn)?shù)作為值,添加到`grades_dict`中。3.計(jì)算平均分:遍歷`grades_dict`的值(分?jǐn)?shù)),使用`sum()`求和,然后除以分?jǐn)?shù)的數(shù)量(`len(grades_dict)`)。格式化輸出結(jié)果。4.找出最高分:使用內(nèi)置的`max`函數(shù),在`grades_dict`的鍵(姓名)上操作,并指定`key=lambdaname:grades_dict[name]`作為參數(shù),這樣`max`會(huì)根據(jù)對(duì)應(yīng)的值(分?jǐn)?shù))來找出最大值對(duì)應(yīng)的鍵(姓名)。5.排序并打印:使用`sorted`函數(shù)對(duì)`grades_dict`的鍵(姓名)進(jìn)行排序。指定`key=lambdaname:grades_dict[name]`參數(shù),確保按分?jǐn)?shù)從高到低排序。如果分?jǐn)?shù)相同,`sorted`保持輸入順序(穩(wěn)定排序)。遍歷排序后的姓名列表,使用`enumerate`從1開始計(jì)數(shù),格式化打印輸出。第三題答案:```pythondefprocess_grades():grades_dict={}try:withopen('grades.txt','r')asfile:lines=file.readlines()forlineinlines:parts=line.strip().split(',')iflen(parts)==2:name,score_str=partstry:score=int(score_str)grades_dict[name]=scoreexceptValueError:print(f"Warning:Invalidscore'{score_str}'forstudent{name}.Skipping.")exceptFileNotFoundError:print("Error:'grades.txt'filenotfound.")returnifnotgrades_dict:print("Novalidgradedatafound.")return#3.計(jì)算平均分total_score=sum(grades_dict.values())num_students=len(grades_dict)average_score=total_score/num_studentsprint(f"AverageScore:{average_score:.1f}")#4.找出最高分highest_scorer=max(grades_dict,key=lambdaname:grades_dict[name])highest_score=grades_dict[highest_scorer]print(f"HighestScore:{highest_scorer},{highest_score}")#5.排序并打印sorted_names=sorted(grades_dict,key=lambdaname:grades_dict[name],reverse=True)print("\n".join(f"{i+1}.{name}"fori,nameinenumerate(sorted_names)))#Note:Totestthis,youneedtocreatea'grades.txt'filewiththecorrectformat.```第四題解析思路:1.生成器函數(shù):定義函數(shù)`generate_primes(n)`,使用`yield`代替`return`。2.處理邊界情況:如果`n`小于2,函數(shù)體為空,直接返回,不產(chǎn)生任何值。3.生成質(zhì)數(shù):*從2開始遍歷到`n`(包含)。*對(duì)于每個(gè)當(dāng)前數(shù)字`current_num`,檢查它是否為質(zhì)數(shù)。可以通過檢查從2到`sqrt(current_num)`(包含)是否有能整除`current_num`的數(shù)來判斷。如果沒有,則`current_num`是質(zhì)數(shù)。*如果`current_num`是質(zhì)數(shù),使用`yield`產(chǎn)出一個(gè)值,該值可以是`current_num`本身,也可以是一個(gè)包含質(zhì)數(shù)的列表(需要管理內(nèi)部狀態(tài))。*優(yōu)化:可以只生成小于或等于`sqrt(n)`的質(zhì)數(shù),然后用這些質(zhì)數(shù)去篩選`n`以內(nèi)的數(shù)。第四題答案:```pythonimportmathdefgenerate_primes(n):ifn<2:return#Noprimeslessthan2defis_prime(num):ifnum<2:returnFalseforiinrange(2,int(math.sqrt(num))+1):ifnum%i==0:returnFalsereturnTrue#Generateprimesuptosqrt(n)primes_list=[]forcandidateinrange(2,int(math.sqrt(n))+1):ifis_prime(candidate):primes_list.append(candidate)#Yield2separatelyifneededif2<=n:yield2#Usealreadygeneratedprimestochecklargernumbersforcandidateinrange(3,n+1,2):#Checkonlyoddnumbersifall(candidate%p!=0forpinprimes_listifp*p<=candidate):yieldcandidate```*(注:此答案生成所有小于等于n的質(zhì)數(shù)。根據(jù)題目要求“逐個(gè)產(chǎn)出”,單個(gè)yieldcandidate即可。如果需要yield一個(gè)列表,則需在函數(shù)開始時(shí)初始化列表,并在每次循環(huán)的末尾append,最后yield整個(gè)列表。)*第五題解析思路:1.分析原代碼功能:函數(shù)`process_data`接收一個(gè)列表`data`。遍歷`data`中的每個(gè)元素`item`。如果`item`是偶數(shù)(`item%2==0`),則將其乘以2(`item*2`);如果`item`是奇數(shù),則將其加上10(`item+10`)。將處理后的結(jié)果`processed`添加到結(jié)果列表`result`中。最后返回`result`列表。整體功能是:將輸入列表中的偶數(shù)翻倍,奇數(shù)加10。2.重構(gòu)為列表推導(dǎo)式:列表推導(dǎo)式提供了一種更簡(jiǎn)潔、通常也更快的構(gòu)建列表的方式?;窘Y(jié)構(gòu)為`[expressionforiteminiterableifcondition]`或`[expressionforiteminiterable]`。*可行方案1(使用條件表達(dá)式):`[item*2ifitem%2==0elseitem+10foritemindata]`*可行方案2(先過濾再處理):`[item*2foritemindataifitem%2==0]+[item+10foritemindataifitem%2!=0]`(注意順序)*最簡(jiǎn)潔方案通常使用條件表達(dá)式。第五題答案:```pythondefprocess_data(data):return[item*2ifitem%2==0elseitem+10foritemindata]```第六題解析思路:1.獲取當(dāng)前工作目錄:使用`os.getcwd()`獲取當(dāng)前工作目錄的路徑。使用`print`輸出。2.列出目錄內(nèi)容:使用`os.listdir()`獲取當(dāng)前工作目錄下的所有條目(包括文件和文件夾)。使用`os.path.join(current_dir,entry)`構(gòu)造每個(gè)條目的完整路徑。遍歷列表,使用`print`輸出每個(gè)路徑。3.創(chuàng)建新文件夾:使用`os.makedirs(path,exist_ok=True)`創(chuàng)建`test_folder`。`exist_ok=True`參數(shù)表示如果文件夾已存在,則不會(huì)拋出異常,只會(huì)忽略創(chuàng)建請(qǐng)求。4.查找并刪除指定文件夾:*遍歷`os.listdir()`獲取的條目。*對(duì)于每個(gè)條目,使用`os.path.join(current_dir,entry)`構(gòu)造完整路徑。*使用`os.path.isdir(path)`檢查該路徑是否指向一個(gè)文件夾。*如果找到名為`test_folder`的文件夾,使用`os.rmdir(path)`或`os.remove(path)`(后者會(huì)刪除文件,需謹(jǐn)慎)刪除它。`os.rmdir`只能刪除空文件夾。如果需要?jiǎng)h除非空文件夾,使用`shutil.rmtree(path)`(需導(dǎo)入`shutil`)。*如果在遍歷結(jié)束后沒有找到`test_folder`,打印未找到消息。第六題答案:```pythonimportos#importshutil#Ifusingshutil.rmtreefornon-emptyfoldersdefma

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論