版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2025年P(guān)ython編程挑戰(zhàn)專(zhuān)項(xiàng)訓(xùn)練試卷模擬實(shí)戰(zhàn)測(cè)評(píng)版考試時(shí)間:______分鐘總分:______分姓名:______第一題編寫(xiě)一個(gè)Python函數(shù)`find_largest_prime_factors(n)`,接收一個(gè)正整數(shù)`n`作為參數(shù)。函數(shù)需要找出并返回`n`的所有質(zhì)因數(shù),并將這些質(zhì)因數(shù)按從大到小的順序排列成一個(gè)列表。如果`n`小于2,函數(shù)返回一個(gè)空列表。例如:*`find_largest_prime_factors(13195)`應(yīng)返回`[29,23,5,7]`*`find_largest_prime_factors(2048)`應(yīng)返回`[2]`*`find_largest_prime_factors(1)`應(yīng)返回`[]`第二題現(xiàn)有以下字符串列表`sentences`:```pythonsentences=["Pythonisaninterpretedhigh-levelgeneral-purposeprogramminglanguage.","Python'sdesignphilosophyemphasizescodereadabilitywithitsnotableuseofsignificantwhitespace.","Pythonisdynamically-typedandgarbage-collected.","Pythonsupportsmultipleprogrammingparadigms,includingstructured(particularlyprocedural),object-orientedandfunctionalprogramming."]```請(qǐng)編寫(xiě)代碼,創(chuàng)建一個(gè)新的列表`word_frequencies`。該列表中的每個(gè)元素都是一個(gè)字典,字典的鍵是單詞(不區(qū)分大小寫(xiě),且已去除標(biāo)點(diǎn)符號(hào)),值是該單詞在所有句子中出現(xiàn)的總次數(shù)。按單詞在總詞頻中從高到低的順序排列`word_frequencies`列表。第三題編寫(xiě)一個(gè)生成器函數(shù)`generate_powerset(s)`,接收一個(gè)集合`s`作為參數(shù)。該函數(shù)需要生成并依次yield`s`的所有子集(冪集),包括空集和`s`本身。子集應(yīng)保持原始集合中元素的順序。例如,如果輸入`s={1,2,3}`,生成器應(yīng)按以下順序yield子集:`{}`,`{1}`,`{2}`,`{1,2}`,`{3}`,`{1,3}`,`{2,3}`,`{1,2,3}`第四題假設(shè)你需要處理一個(gè)大型日志文件,該文件每行包含一個(gè)JSON格式的日志記錄,記錄中可能包含嵌套的字典或列表。日志記錄的格式大致如下(示例):```json{"time":"2023-10-27T10:00:00Z","level":"INFO","message":"Userloggedin.","details":{"user_id":123,"session_id":"abcde"}}{"time":"2023-10-27T10:01:05Z","level":"ERROR","message":"Filenotfound.","details":[{"error":"ENOENT","code":2},{"path":"/var/log/app.log"}]}```請(qǐng)編寫(xiě)一個(gè)函數(shù)`process_log_entries(log_file_path)`。該函數(shù)接收一個(gè)表示日志文件路徑的字符串`log_file_path`。函數(shù)需要按行讀取文件,嘗試解析每一行的JSON內(nèi)容。如果解析成功,函數(shù)應(yīng)統(tǒng)計(jì)并返回一個(gè)字典,該字典包含兩個(gè)鍵:`'INFO'`和`'ERROR'`,對(duì)應(yīng)的值是相應(yīng)級(jí)別日志記錄的數(shù)量。如果某行JSON解析失?。ɡ绺袷藉e(cuò)誤),應(yīng)捕獲異常,并忽略該行,繼續(xù)處理下一行。如果文件不存在或無(wú)法讀取,函數(shù)應(yīng)拋出`IOError`異常。第五題請(qǐng)編寫(xiě)一個(gè)類(lèi)`CircularBuffer`,實(shí)現(xiàn)一個(gè)固定大小的循環(huán)緩沖區(qū)。該緩沖區(qū)支持以下方法:*`__init__(self,capacity)`:初始化緩沖區(qū),設(shè)置其容量`capacity`。內(nèi)部可以使用列表`self._data`和兩個(gè)指針`self._head`(指向第一個(gè)有效元素)和`self._tail`(指向下一個(gè)插入位置)來(lái)實(shí)現(xiàn)。*`enqueue(item)`:將元素`item`添加到緩沖區(qū)的末尾(`self._tail`指向的位置)。如果緩沖區(qū)已滿(mǎn),應(yīng)覆蓋最早添加的元素(即`self._head`指向的元素)。*`dequeue()`:從緩沖區(qū)的頭部(`self._head`指向的位置)移除并返回一個(gè)元素。如果緩沖區(qū)為空,返回`None`。*`size(self)`:返回緩沖區(qū)中當(dāng)前元素的數(shù)量。*`is_empty(self)`:如果緩沖區(qū)為空,返回`True`;否則返回`False`。*`is_full(self)`:如果緩沖區(qū)已滿(mǎn),返回`True`;否則返回`False`。請(qǐng)確保你的實(shí)現(xiàn)能夠正確處理循環(huán)的情況。第六題編寫(xiě)一個(gè)函數(shù)`find_closest_pairs(points)`,接收一個(gè)二維點(diǎn)列表`points`作為參數(shù),其中每個(gè)點(diǎn)表示為`(x,y)`坐標(biāo)對(duì)。函數(shù)的目標(biāo)是找出所有距離最近的點(diǎn)對(duì)(至少有兩個(gè)點(diǎn))。對(duì)于每一對(duì)距離最近的點(diǎn),返回它們之間的歐幾里得距離的平方(即`distance_squared=(x2-x1)^2+(y2-y1)^2`)。結(jié)果應(yīng)是一個(gè)列表,其中包含所有最近點(diǎn)對(duì)的距離平方,按從小到大的順序排列。如果有多個(gè)點(diǎn)對(duì)的距離相同且為最小值,應(yīng)全部包含在結(jié)果列表中。例如:*`find_closest_pairs([(0,0),(1,0),(1,1),(0,1)])`應(yīng)返回`[0,1,1]`(點(diǎn)(0,0)和(0,1)距離為0,點(diǎn)(0,0)和(1,0)以及(0,1)和(1,1)距離為1)*`find_closest_pairs([(1,2),(3,4),(5,6),(7,8)])`應(yīng)返回`[2,2,2]`(所有點(diǎn)對(duì)距離均為2)試卷答案第一題```pythondeffind_largest_prime_factors(n):ifn<2:return[]factors=[]#Handlefactor2separatelytoallowincrementingby2laterwhilen%2==0:factors.append(2)n//=2#Checkoddfactorsfrom3onwardsi=3whilei*i<=n:whilen%i==0:factors.append(i)n//=ii+=2#Ifnisaprimenumbergreaterthan2ifn>2:factors.append(n)#Returnfactorssortedindescendingorderreturnsorted(factors,reverse=True)```解析思路:首先處理特殊情況n<2,直接返回空列表。對(duì)于n=2,返回[2]。對(duì)于其他數(shù),使用試除法找質(zhì)因數(shù)。先去除所有因子2,然后從3開(kāi)始,只檢查奇數(shù)因子(因?yàn)榕紨?shù)已被處理),直到檢查到平方根。如果最后n大于2,則n本身是一個(gè)質(zhì)因數(shù)。最后將找到的所有質(zhì)因數(shù)按降序排列并返回。第二題```pythonfromcollectionsimportdefaultdictimportstringsentences=["Pythonisaninterpretedhigh-levelgeneral-purposeprogramminglanguage.","Python'sdesignphilosophyemphasizescodereadabilitywithitsnotableuseofsignificantwhitespace.","Pythonisdynamically-typedandgarbage-collected.","Pythonsupportsmultipleprogrammingparadigms,includingstructured(particularlyprocedural),object-orientedandfunctionalprogramming."]word_frequencies=[]#Createasetofalluniquewordsafterpreprocessing#Preprocess:lowercase,removepunctuationwords_set=set()forsentenceinsentences:#Removepunctuationusingstr.translatetranslator=str.maketrans('','',string.punctuation)cleaned_sentence=sentence.lower().translate(translator)words=cleaned_sentence.split()words_set.update(words)#Initializefrequencydictionaryfreq_dict={word:0forwordinwords_set}#Countwordoccurrencesforsentenceinsentences:translator=str.maketrans('','',string.punctuation)cleaned_sentence=sentence.lower().translate(translator)words=cleaned_sentence.split()forwordinwords:ifwordinfreq_dict:freq_dict[word]+=1#Createlistof(word,freq)tuplesword_freq_list=[(word,freq_dict[word])forwordinwords_set]#Sortthelistbyfrequencyindescendingorderword_freq_list.sort(key=lambdax:x[1],reverse=True)#Createthefinallistofdictionariesword_frequencies=[{'word':item[0],'count':item[1]}foriteminword_freq_list]```解析思路:首先遍歷所有句子,將每個(gè)句子轉(zhuǎn)換為小寫(xiě),并去除標(biāo)點(diǎn)符號(hào),然后分割成單詞列表。使用集合`words_set`收集所有唯一的單詞。然后,創(chuàng)建一個(gè)默認(rèn)字典`freq_dict`來(lái)存儲(chǔ)每個(gè)單詞的總出現(xiàn)次數(shù),初始化為0。再次遍歷所有句子,更新`freq_dict`中單詞的計(jì)數(shù)。最后,將`freq_dict`轉(zhuǎn)換為包含單詞和計(jì)數(shù)的元組列表`word_freq_list`,按計(jì)數(shù)降序排序,再將排序后的列表轉(zhuǎn)換為所需的字典列表格式。第三題```pythondefgenerate_powerset(s):#Sortthesetforconsistentorderofsubsetss_list=sorted(s)n=len(s_list)#Totalnumberofsubsetsis2^n#Usebitmaskfrom0to2^n-1foriinrange(2n):subset=[]forjinrange(n):#Checkifthej-thbitinbitmaskiissetifi&(1<<j):subset.append(s_list[j])yieldset(subset)#Exampleusage(notpartoftherequiredfunction):#s={1,2,3}#forsubsetingenerate_powerset(s):#print(subset)```解析思路:冪集是集合所有可能的子集的集合,包括空集和集合本身。對(duì)于一個(gè)包含n個(gè)元素的集合,其冪集大小為2^n??梢允褂枚M(jìn)制位掩碼來(lái)生成所有可能的組合。從0到2^n-1遍歷每個(gè)整數(shù),將整數(shù)看作一個(gè)二進(jìn)制位掩碼,其中第j位為1表示集合中第j個(gè)元素(按排序順序)包含在當(dāng)前子集中。通過(guò)檢查位掩碼的每一位是否為1,可以構(gòu)建出對(duì)應(yīng)的子集,然后yield出來(lái)。為了保持子集的順序,輸入集合先進(jìn)行排序。第四題```pythonimportjsondefprocess_log_entries(log_file_path):info_count=0error_count=0try:withopen(log_file_path,'r')asfile:forlineinfile:try:log_data=json.loads(line)#Checkthe'level'fieldlog_level=log_data.get('level','').upper()iflog_level=='INFO':info_count+=1eliflog_level=='ERROR':error_count+=1exceptjson.JSONDecodeError:#IgnorelinesthatarenotvalidJSONcontinueexceptIOError:#RaiseIOErroriffilecannotbeopened/readraiseIOError(f"Couldnotopenorreadfile:{log_file_path}")return{'INFO':info_count,'ERROR':error_count}```解析思路:函數(shù)需要按行讀取文件,對(duì)每行嘗試解析JSON。成功解析后,檢查日志數(shù)據(jù)的`level`字段。如果`level`是`'INFO'`,則`info_count`加1;如果是`'ERROR'`,則`error_count`加1。如果某行JSON解析失?。╜json.loads`拋出`JSONDecodeError`),捕獲該異常并忽略該行,繼續(xù)處理下一行。如果文件本身無(wú)法打開(kāi)或讀?。ㄈ缏窂藉e(cuò)誤、權(quán)限問(wèn)題),捕獲`IOError`并重新拋出,明確告知調(diào)用者。最后返回一個(gè)包含`INFO`和`ERROR`計(jì)數(shù)的字典。第五題```pythonclassCircularBuffer:def__init__(self,capacity):self.capacity=capacityself._data=[None]*capacityself._head=0self._tail=0self._size=0defenqueue(self,item):ifself.is_full():#Overwritetheelementatheadself._data[self._head]=item#Moveheadforward(circularly)self._head=(self._head+1)%self.capacityelse:#Additemattailself._data[self._tail]=item#Movetailforwardself._tail=(self._tail+1)%self.capacityself._size+=1defdequeue(self):ifself.is_empty():returnNone#Getitemfromheaditem=self._data[self._head]#Resettheitematheadself._data[self._head]=None#Moveheadforwardself._head=(self._head+1)%self.capacityself._size-=1returnitemdefsize(self):returnself._sizedefis_empty(self):returnself._size==0defis_full(self):returnself._size==self.capacity```解析思路:循環(huán)緩沖區(qū)使用固定大小的數(shù)組實(shí)現(xiàn)。需要兩個(gè)指針:`_head`指向隊(duì)列頭部(下一個(gè)出隊(duì)元素的位置),`_tail`指向隊(duì)列尾部(下一個(gè)入隊(duì)元素的位置)。維護(hù)一個(gè)`_size`變量跟蹤當(dāng)前元素?cái)?shù)量。`enqueue`:如果緩沖區(qū)已滿(mǎn),則需要覆蓋最早添加的元素(即`_head`指向的元素),然后將新元素添加到`_tail`指向的位置,并移動(dòng)`_tail`。如果緩沖區(qū)未滿(mǎn),直接添加元素到`_tail`,移動(dòng)`_tail`并增加`_size`。`dequeue`:如果緩沖區(qū)為空,返回`None`。否則,從`_head`指向的位置取出元素,重置該位置(設(shè)為`None`),移動(dòng)`_head`并減少`_size`。`size`返回`_size`。`is_empty`檢查`_size`是否為0。`is_full`檢查`_size`是否等于容量`capacity`。指針移動(dòng)需要使用模運(yùn)算`%`以實(shí)現(xiàn)循環(huán)。數(shù)組初始化為`None`有助于判斷位置是否被占用。第六題```pythonimportmathdeffind_closest_pairs(points):iflen(points)<2:return[]#HelperfunctiontocalculateEuclideandistancesquareddefdistance_squared(p1,p2):return(p1[0]-p2[0])2+(p1[1]-p2[1])2#Sortpointsprimarilybyx,thenbyycoordinatesorted_points=sorted(points,key=lambdap:(p[0],p[1]))#Helperfunctiontofindminimumdistanceinstripusingtwopointersdefmin_distance_in_strip(strip,d):min_d=dstrip.sort(key=lambdap:p[1])#Sortstripbyy-coordinateforiinrange(len(strip)):j=i+1#Onlycheckpairswherethey-distanceislessthancurrentmin_dwhilej<len(strip)and(strip[j][1]-strip[i][1])<min_d:dist=distance_squared(strip[i],strip[j])ifdist<min_d:min_d=distj+=1returnmin_d#Recursivefunctiontofindminimumdistancedefclosest_util(points_sorted):num_points=len(points_sorted)ifnum_points<=3:#Forsmallnumberofpoints,computeallpairwisedistancesmin_d=float('inf')foriinrange(num_points):forjinrange(i+1,num_points):dist=distance_squared(points_sorted[i],points_sorted[j])ifdist<min_d:min_d=distreturnmin_d#Dividepointsintotwohalvesmid=num_points//2mid_x=points_sorted[mid][0]#Recursivelyfindthesmallestdistancesinleftandrighthalvesd_left=closest_util(points_sorted[:mid])d_right=closest_util(points_sorted[mid:])d=min(d_left,d_right)#Createthestripcontainingpointsclosetothemiddlelinestrip=[]forpointinpoints_sorted:ifabs(point[0]-mid_x)<d:strip.append(point)#Findtheclosestpointsinthestripmin_d_strip=min_distance_in_strip(strip,d)#Returntheminimumofd,d_left,d_right,andmin_d_stripreturnmin(d,min_d_strip)#Gettheminimumdistanceusingthedivideandconquerapproachmin_distance=closest_util(sorted_points)#Collectalldistancesthatare
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 安全在我心中課件
- 《解方程》數(shù)學(xué)課件教案
- 2025福建廈門(mén)海峽投資有限公司運(yùn)營(yíng)支持崗、軟件開(kāi)發(fā)崗、商務(wù)崗社會(huì)招聘3人模擬筆試試題及答案解析
- 2026天津市北方人力資源管理顧問(wèn)有限公司河西分公司(代理制)天津高級(jí)中學(xué)-骨干教師及青年教師招聘模擬筆試試題及答案解析
- 2025年黃山學(xué)院招聘勞務(wù)派遣工作人員13名參考考試題庫(kù)及答案解析
- 2025上海對(duì)外經(jīng)貿(mào)大學(xué)公開(kāi)招聘工作人員參考考試題庫(kù)及答案解析
- 2025年福建醫(yī)科大學(xué)附屬第二醫(yī)院招聘非在編工作人員2人考試備考題庫(kù)及答案解析
- 2025化學(xué)所有機(jī)固體實(shí)驗(yàn)室項(xiàng)目聘用人員招聘模擬筆試試題及答案解析
- 網(wǎng)店廣告合同范本
- 職工承包合同范本
- 浙江省建設(shè)工程施工現(xiàn)場(chǎng)安全管理臺(tái)賬實(shí)例
- 社會(huì)主義發(fā)展史知到章節(jié)答案智慧樹(shù)2023年齊魯師范學(xué)院
- 美國(guó)史智慧樹(shù)知到答案章節(jié)測(cè)試2023年?yáng)|北師范大學(xué)
- GB/T 15924-2010錫礦石化學(xué)分析方法錫量測(cè)定
- GB/T 14525-2010波紋金屬軟管通用技術(shù)條件
- GB/T 11343-2008無(wú)損檢測(cè)接觸式超聲斜射檢測(cè)方法
- GB/T 1040.3-2006塑料拉伸性能的測(cè)定第3部分:薄膜和薄片的試驗(yàn)條件
- 教師晉級(jí)專(zhuān)業(yè)知識(shí)和能力證明材料
- 申報(bào)專(zhuān)業(yè)技術(shù)職稱(chēng)課件-
- 排隊(duì)叫號(hào)系統(tǒng)施工技術(shù)方案
- 應(yīng)用3-農(nóng)業(yè)收獲機(jī)器人課件
評(píng)論
0/150
提交評(píng)論