版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
2025年P(guān)ython編程專項訓(xùn)練試卷:實戰(zhàn)案例與解題技巧考試時間:______分鐘總分:______分姓名:______一、基礎(chǔ)應(yīng)用與函數(shù)編寫1.編寫一個Python函數(shù)`calculate_statistics(data)`,接收一個包含數(shù)字的列表`data`作為參數(shù)。該函數(shù)應(yīng)計算并返回一個包含三個元素的元組:列表中所有數(shù)字的總和、平均值(結(jié)果保留兩位小數(shù))以及列表中最大值與最小值的差值。要求在函數(shù)內(nèi)部處理可能的異常情況,例如輸入列表為空時,返回的總和、平均值和差值均為0.0。2.使用列表推導(dǎo)式,編寫代碼生成一個包含1到100(包含1和100)所有奇數(shù)的列表`odd_numbers`。二、文件與目錄操作3.假設(shè)當前工作目錄下存在一個名為`example_files`的文件夾,該文件夾內(nèi)包含若干個文本文件(文件名以`.txt`結(jié)尾)和一個名為`exclude.txt`的文件,該`exclude.txt`文件中包含了一些不應(yīng)被處理的文件名(每行一個)。編寫Python代碼,遞歸地遍歷`example_files`文件夾及其所有子文件夾,讀取每個`.txt`文件的內(nèi)容,并將其內(nèi)容打印到控制臺。但在讀取之前,需要先檢查該文件名是否出現(xiàn)在`exclude.txt`文件中,如果出現(xiàn)則跳過該文件。4.編寫代碼實現(xiàn)以下功能:在當前工作目錄下創(chuàng)建一個名為`new_directory`的新文件夾(如果該文件夾不存在)。然后,將該文件夾下的所有文件(不包括子文件夾)復(fù)制到`new_directory`文件夾的同一結(jié)構(gòu)下,但所有文件名都添加前綴`copied_`??梢允褂胉shutil`庫輔助完成文件復(fù)制操作。三、網(wǎng)絡(luò)請求與數(shù)據(jù)處理5.使用`requests`庫,編寫代碼向URL`/posts`發(fā)送GET請求,獲取返回的JSON數(shù)據(jù)。假設(shè)返回的是一個包含多個帖子的列表。請篩選出所有`userId`為1的帖子,并將這些帖子的`title`和`body`字段提取出來,存儲到一個新的列表中,每個元素是一個包含`title`和`body`的字典。6.繼續(xù)使用第5題的設(shè)置。假設(shè)需要將篩選出的帖子數(shù)據(jù)存儲到本地文件`filtered_posts.json`中。請使用Python的JSON模塊將該列表數(shù)據(jù)以JSON格式(確保是標準的JSON數(shù)組格式)寫入到該文件中。注意處理可能出現(xiàn)的異常,如網(wǎng)絡(luò)請求失敗或文件寫入錯誤。四、算法與邏輯應(yīng)用7.編寫一個Python函數(shù)`find_common_elements(list1,list2)`,接收兩個列表`list1`和`list2`作為參數(shù)。該函數(shù)應(yīng)找出兩個列表中的公共元素,并返回一個包含所有公共元素的新列表。要求返回的列表中的元素順序與它們在`list1`中出現(xiàn)的順序相同。不允許使用集合操作來簡化實現(xiàn)。8.編寫代碼實現(xiàn)一個簡單的文本搜索功能。定義一個字符串`text`:“Pythonisahigh-level,interpreted,general-purposeprogramminglanguage.Itsdesignphilosophyemphasizescodereadabilitywiththeuseofsignificantindentation."。然后,編寫代碼查找并統(tǒng)計`text`中單詞"Python"出現(xiàn)的次數(shù)。要求不區(qū)分大小寫。五、面向?qū)ο缶幊膛c類設(shè)計9.定義一個名為`Employee`的Python類,用于表示員工信息。該類應(yīng)有以下屬性:`name`(姓名,字符串類型),`department`(部門,字符串類型),`salary`(薪水,浮點數(shù)類型)。同時,該類應(yīng)包含一個初始化方法`__init__`,用于在創(chuàng)建對象時設(shè)置這些屬性。此外,還需定義一個方法`display_info`,用于打印員工的信息(姓名、部門、薪水)。10.基于第9題的`Employee`類,定義一個名為`Manager`的子類。`Manager`類應(yīng)繼承`Employee`類,并增加一個屬性`bonus`(獎金,浮點數(shù)類型)。在`Manager`類中,重寫`display_info`方法,使其在打印基本信息后,額外打印出獎金信息。創(chuàng)建一個`Manager`對象,并調(diào)用其`display_info`方法顯示信息。六、綜合應(yīng)用與代碼優(yōu)化11.假設(shè)有一個文件`data.csv`,其內(nèi)容格式如下(每行一個數(shù)字,以逗號分隔):```23,45,12,67,8934,56,78,23,5412,34,56,78,90```編寫Python代碼讀取該文件,并將每行的數(shù)字數(shù)據(jù)轉(zhuǎn)換為整數(shù)列表。然后,計算所有這些整數(shù)列表的平均值,并將平均值四舍五入到整數(shù)部分。最后,將計算出的平均值存儲在一個名為`average_value`的變量中。12.審查以下代碼片段,并指出其中至少三個可以改進的地方,以提高代碼的可讀性、效率或健壯性。說明每個改進建議的具體內(nèi)容以及為什么這樣做是有效的。```pythondefprocess_data(data_list):result=[]foritemindata_list:iftype(item)==intanditem>10:new_value=item*2result.append(new_value)returnresultdata=[5,12,'hello',8,20,3.14]output=process_data(data)print(output)```---試卷答案一、基礎(chǔ)應(yīng)用與函數(shù)編寫1.```pythondefcalculate_statistics(data):try:total=sum(data)average=round(total/len(data),2)max_value=max(data)min_value=min(data)difference=max_value-min_valuereturntotal,average,differenceexcept(ValueError,ZeroDivisionError):return0.0,0.0,0.0```解析思路:首先使用`try-except`結(jié)構(gòu)處理異常,如空列表或非數(shù)字元素導(dǎo)致的求和、求長、求最大最小值錯誤。`sum(data)`計算總和。`len(data)`獲取列表長度用于計算平均值,注意處理空列表的情況(`ZeroDivisionError`)。`max(data)`和`min(data)`分別獲取最大值和最小值。計算差值`max_value-min_value`。平均值使用`round()`函數(shù)保留兩位小數(shù)。2.```pythonodd_numbers=[numfornuminrange(1,101)ifnum%2!=0]```解析思路:利用列表推導(dǎo)式生成序列。`range(1,101)`生成從1到100的整數(shù)。`ifnum%2!=0`是條件判斷,篩選出奇數(shù)。列表推導(dǎo)式將所有滿足條件的奇數(shù)直接生成列表。二、文件與目錄操作3.```pythonimportosdefprocess_files(root_dir,exclude_file):try:withopen(exclude_file,'r')asf:exclude_names={line.strip()forlineinfifline.strip()}exceptFileNotFoundError:exclude_names=set()forroot,dirs,filesinos.walk(root_dir):forfileinfiles:iffile.endswith('.txt')andfilenotinexclude_names:full_path=os.path.join(root,file)try:withopen(full_path,'r',encoding='utf-8')asf:content=f.read()print(f"Reading{full_path}:")print(content)print("-"*20)exceptExceptionase:print(f"Errorreading{full_path}:{e}")#Exampleusage:#process_files('example_files','exclude.txt')```解析思路:使用`os.walk()`遞歸遍歷指定根目錄及其子目錄下的所有文件。首先嘗試打開`exclude.txt`文件,讀取其中排除的文件名列表,并存儲在一個集合`exclude_names`中,使用集合便于快速查找。遍歷過程中,檢查文件名是否以`.txt`結(jié)尾且不在排除列表中。如果是,使用`os.path.join()`獲取完整文件路徑,然后嘗試打開并讀取文件內(nèi)容,打印到控制臺。使用`try-except`處理文件讀取可能出現(xiàn)的異常。4.```pythonimportosimportshutilsource_dir='example_files'target_dir='new_directory'ifnotos.path.exists(target_dir):os.makedirs(target_dir)forroot,dirs,filesinos.walk(source_dir):forfileinfiles:src_file_path=os.path.join(root,file)relative_path=os.path.relpath(src_file_path,source_dir)target_subdir=os.path.join(target_dir,os.path.dirname(relative_path))ifnotos.path.exists(target_subdir):os.makedirs(target_subdir)target_file_path=os.path.join(target_subdir,'copied_'+file)try:shutil.copy2(src_file_path,target_file_path)#print(f"Copied{src_file_path}to{target_file_path}")#Optional:fortracingexceptExceptionase:print(f"Errorcopying{src_file_path}to{target_file_path}:{e}")```解析思路:首先檢查目標文件夾`target_dir`是否存在,不存在則創(chuàng)建。使用`os.walk()`遍歷源文件夾`source_dir`。對于每個文件,計算其相對于源文件夾的相對路徑`relative_path`。根據(jù)相對路徑在目標文件夾中創(chuàng)建相同的目錄結(jié)構(gòu)`target_subdir`。將文件名前綴改為`copied_`,形成目標文件路徑`target_file_path`。使用`shutil.copy2()`復(fù)制文件,它會嘗試保留文件的元數(shù)據(jù)(如修改時間)。對整個復(fù)制過程使用`try-except`處理可能的文件操作異常。三、網(wǎng)絡(luò)請求與數(shù)據(jù)處理5.```pythonimportrequestsimportjsonurl='/posts'try:response=requests.get(url)response.raise_for_status()#RaisesHTTPErrorforbadresponses(4xxor5xx)posts_data=response.json()filtered_posts=[]forpostinposts_data:ifpost['userId']==1:filtered_posts.append({'title':post['title'],'body':post['body']})#print(json.dumps(filtered_posts,indent=4))#Optional:fortracingreturnfiltered_posts#Assumingthefunctionshouldreturntheresultexceptrequests.exceptions.RequestExceptionase:print(f"Requesterror:{e}")return[]#Returnemptylistonerrorexceptjson.JSONDecodeErrorase:print(f"JSONdecodeerror:{e}")return[]```解析思路:使用`requests.get(url)`發(fā)送GET請求。`response.raise_for_status()`用于檢查響應(yīng)狀態(tài)碼,如果是不成功的狀態(tài)碼則拋出異常。`response.json()`將JSON響應(yīng)內(nèi)容解析為Python列表。遍歷列表中的每個字典(帖子),檢查`userId`字段是否為1。如果是,提取`title`和`body`字段,創(chuàng)建一個新的字典,并將該字典添加到結(jié)果列表`filtered_posts`中。最后返回這個篩選后的列表。全程使用`try-except`捕獲可能的請求異常和JSON解析異常。6.```pythonimportrequestsimportjson#Assumingfiltered_postslistisavailablefromQuestion5#filtered_posts=[...]output_file='filtered_posts.json'try:withopen(output_file,'w',encoding='utf-8')asf:json.dump(filtered_posts,f,ensure_ascii=False,indent=4)#print(f"Datasuccessfullywrittento{output_file}")#Optional:fortracingexceptIOErrorase:print(f"Filewriteerror:{e}")```解析思路:使用`open(output_file,'w',encoding='utf-8')`以寫入模式打開(或創(chuàng)建)目標文件,指定UTF-8編碼。使用`json.dump()`將第5題得到的`filtered_posts`列表寫入文件。`ensure_ascii=False`允許輸出非ASCII字符(如中文字符)。`indent=4`使輸出的JSON文件具有可讀性。使用`with`語句確保文件正確關(guān)閉。使用`try-except`捕獲文件操作可能出現(xiàn)的IO異常。四、算法與邏輯應(yīng)用7.```pythondeffind_common_elements(list1,list2):common=[]index1=0len1=len(list1)len2=len(list2)foritem2inlist2:whileindex1<len1andlist1[index1]<item2:index1+=1ifindex1<len1andlist1[index1]==item2:common.append(item2)index1+=1#Movepastthematchedelementinlist1returncommon```解析思路:采用類似歸并排序中合并過程的思路。維護兩個指針`index1`和`index2`分別指向`list1`和`list2`的當前比較位置。從`list2`的開頭開始,使用`while`循環(huán)在`list1`中查找與`list2[index2]`相等的元素。`whilelist1[index1]<item2:`確保在`list1`中查找的位置是有可能匹配的。一旦找到匹配(`list1[index1]==item2`),將其添加到結(jié)果`common`列表中,并將`index1`指針向前移動一位,繼續(xù)查找下一個可能的匹配。這種方法保證了結(jié)果列表`common`中的元素順序與它們在`list1`中出現(xiàn)的順序相同,且時間復(fù)雜度較好(接近O(n+m))。8.```pythontext="Pythonisahigh-level,interpreted,general-purposeprogramminglanguage.Itsdesignphilosophyemphasizescodereadabilitywiththeuseofsignificantindentation."count=text.lower().count("python")#print(f"Countof'Python':{count}")#Optional:fortracing```解析思路:為了不區(qū)分大小寫,首先將整個文本字符串`text`轉(zhuǎn)換為小寫(或大寫)使用`text.lower()`。然后,使用字符串的`count()`方法統(tǒng)計小寫"python"在轉(zhuǎn)換后的字符串中出現(xiàn)的次數(shù)。`count()`方法會返回指定子串出現(xiàn)的總次數(shù)。五、面向?qū)ο缶幊膛c類設(shè)計9.```pythonclassEmployee:def__init__(self,name,department,salary):=nameself.department=departmentself.salary=salarydefdisplay_info(self):print(f"Name:{}")print(f"Department:{self.department}")print(f"Salary:{self.salary}")```解析思路:定義`Employee`類。`__init__`方法是初始化方法,在創(chuàng)建類的實例時自動調(diào)用,用于設(shè)置對象的初始狀態(tài)。它接收`name`,`department`,`salary`三個參數(shù),并將它們分別賦值給實例屬性``,`self.department`,`self.salary`。`display_info`是一個普通方法,用于打印員工信息。它通過`self`關(guān)鍵字訪問實例的屬性。10.```pythonclassManager(Employee):def__init__(self,name,department,salary,bonus):super().__init__(name,department,salary)self.bonus=bonusdefdisplay_info(self):super().display_info()#Callthedisplay_infomethodfromtheparentclassprint(f"Bonus:{self.bonus}")```解析思路:定義`Manager`類,它繼承自`Employee`類(`classManager(Employee):`)。`__init__`方法中,首先調(diào)用父類的初始化方法`super().__init__(name,department,salary)`,將`name`,`department`,`salary`傳遞給父類,完成員工基本信息初始化。然后,添加一個新的實例屬性`self.bonus`用于存儲獎金。`display_info`方法中,使用`super().display_info()`調(diào)用父類`Employee`的`display_info`方法來打印基本信息,然后額外打印獎金信息`self.bonus`。六、綜合應(yīng)用與代碼優(yōu)化11.```pythonimportcsvaverage_value=0try:withopen('data.csv','r',encoding='utf-8')asf:reader=csv.reader(f)all_lists=[]forrowinreader:int_list=[int(item)foriteminrowifitem.strip().isdigit()]all_lists.append(int_list)ifall_lists:total_sum=sum([sum(lst)forlstinall_lists])total_count=sum([len(lst)forlstinall_lists])average_value=round(total_sum/total_count)#print(f"Averagevalue:{average_value}")#Optional:fortracingexceptFileNotFoundError:print("Error:'data.csv'filenotfound.")except(IOError,ValueError)ase:print(f"Errorprocessingfile:{e}")```解析思路:使用`csv.reader`讀取CSV文件。遍歷文件的每一行,將每行中的數(shù)字字符串轉(zhuǎn)換為整數(shù),忽略非數(shù)字項,并將轉(zhuǎn)換后的整數(shù)列表添加到`all_lists`中。計算`all_lists`中所有列表的總元素個數(shù)`total_count`和所有元素的總和`total_sum`。如果`all_lists`不為空,則計算平均值`total_sum/total_count`。使用`round()`保留整數(shù)部分。全程使用`try-except`處理文件未找到、IO錯誤和值轉(zhuǎn)換錯誤。12.```python#OriginalCode:#defprocess_data(data_list)
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026湖南長沙財經(jīng)學(xué)校短期勞務(wù)合同人員招聘1人備考題庫及一套完整答案詳解
- 機械設(shè)備輸送傳動設(shè)備維護手冊
- 2026青海西寧城西區(qū)西部礦業(yè)集團有限公司黨務(wù)工作部門業(yè)務(wù)崗位選聘5人備考題庫及一套完整答案詳解
- 2026陜西西安市灞橋區(qū)空軍工程大學(xué)基礎(chǔ)部科研助理招聘1人備考題庫參考答案詳解
- 企業(yè)線上銷售拓客運營手冊
- 2026年公關(guān)活動全流程策劃執(zhí)行課
- 超市日常安全培訓(xùn)課件
- 藍色清爽風(fēng)格年終總結(jié)(3篇)
- 職業(yè)健康風(fēng)險評估模型的長期隨訪研究
- 職場心態(tài)培訓(xùn)
- 兒童課件小學(xué)生講繪本成語故事《69狐假虎威》課件
- 湖北中煙2025年招聘綜合測試
- 不銹鋼管道酸洗鈍化方案
- 2025年高考時事政治高頻考點(107條)
- O2O商業(yè)模式研究-全面剖析
- 2025至2030年醇基鑄造涂料項目投資價值分析報告
- 企業(yè)成本管理分析
- ISO14001-2015環(huán)境管理體系風(fēng)險和機遇識別評價分析及應(yīng)對措施表(包含氣候變化)
- 2024-2025學(xué)年山西省太原市高一上冊期末數(shù)學(xué)檢測試題(附解析)
- 2024年山東省高考數(shù)學(xué)閱卷情況反饋
- 《老年高血壓的用藥指導(dǎo) 》 教學(xué)課件
評論
0/150
提交評論