資源簡介 (共17張PPT)微項目4用排序算法進行數據整理Phthon編程------4 排序算法學習目標1.通過計算選手得分活動 ,查找最大數、最小數,了解如何進行數據比較 解決如何比較數據大小問題。2.通過為選手排名次活動, 觀察冒泡排序的基本過程,探索序列的生成過程,理解 冒泡排序中的數據交換如何實現。學習活動 過程與目標 核心問題學校舉行歌手大獎賽,需要設計一個程序,對選手比賽成績進行處理。比賽規則是滿分為10分且評委打分均為整數;每位選手最終得分為去掉1個最高分和1個最低分后的平均分。評委共有12位,參賽選手10位,如何計算并顯示所有選手最終得分并排出名次 項目實施活動一 計算選手得分活動一項目實施:——解決生活種的問題學校舉行歌手大獎賽,需要設計一個程序,對選手比賽成績進行處理。比賽規則是滿分為10分且評委打分均為整數;每位選手最終得分為去掉1個最高分和1個最低分后的平均分。評委共有12位,參賽選手10位,如何計算并顯示所有選手最終得分并排出名次 問題分析:首先輸入評委打分,接著通過判斷找到最大數、最小數,最后針對有效打分求解平均數,獲得選手得分。需要將12位評委打分一次性錄人,分數之間用英文逗號分隔。按Enter鍵,結束輸入。參照下列代碼完成給一個選手的打分錄人程序。1.輸入評委打分#!/usr/bin/env python3a=input(”輸入評委打分,并以英文逗號分隔:").split(",") #輸入數值以逗號分隔b=[int(x) for x in a] #將字符串型的得分轉換為數字型數據(整數)并存儲print("評委打分為:",a) #顯示未轉換類型的數據print("評委打分為:",b) #顯示轉換類型后的數據2.判斷最大數、最小數#!/usr/bin/env python3a=input("輸入評委打分,以英文逗號分隔:").split(",") #輸入得分數值以逗號分隔b = [int(x) for xin a] #將輸入的字符串型得分轉換為數字型數據(整數)并存儲d=b[0]for i in b: #訪問列表中所有數值進行判斷if i>d:d=iprint("最大數為",d)找最大數問題:通過對列表中數據進行逐個判斷,找出最大數和最小數。下面代碼初始化最大數變量d為第1個元素,通過循環訪問整個列表,最終找出最大數。3.計算選手平均分根據規則,從所有評委打分之和中減去最高分與最低分,然后除以有效打分個數求得該選手的最終得分。#!/usr/bin/env python3a=input("輸入評委打分以英文逗號分隔:").split(",")b=[int(x) for xin a]d=b[0]x=b[0]for i in b: # 遍歷列表中所有數值進行判斷if i>d:d=iif ix=im=sum(b)-d-x#求和,并減去最高分、最低分n=len(b)-2 #求有效分的個數k=m/n # 求平均print("選手得分:",b)print("去掉一個最高分:",d)print("去掉一個最低分:",x)print("最終平均得分:",k)活動一 為選手排名次活動二解決問題:按照得分高則名次靠前的原則,需要將10位選手的最終得分按照從高到低進行排序。計算機如何完成對選手成績的排序呢 在程序設計中,冒泡排序是比較常見的一種排序算法。下面,一起來探究該算法的實現過程。1.冒泡排序算法的執行過程1.冒泡排序算法的執行過程所謂冒泡排序,就是從初始位置開始,每次對相鄰兩個數據進行比較,如順序無誤保持位置不變,順序錯誤則交換位置,不斷進行下一次比較,直至數據順序調整完畢。79564795647596475694756497564957649567495647956479原始數據第1次比較后第2次比較后第3次比較后第4次比較后第1次比較后第2次比較后第3次比較后第4次比較后從第1輪比較結果開始第1輪比較第2輪比較(1)觀察冒泡排序的基本過程第1輪如何比較?第2輪如何比較?討論:如何進行第三輪比較呢?以對7、9、5、6、4從小到大排序為例,我們先嘗試兩輪冒泡排序過程根據前兩輪排序過程,推演冒泡排序的全部過程。(2)分析冒泡排序的基本規律討論:n個數進行冒泡排序,除第一輪比較外,每輪比較需要n-1次嗎?一共需要比較多少輪?2.編寫冒泡排序程序進行實驗——雙重循環通過使用雙重循環,很容易實現冒泡排序的程序設計:用外層循環控制比較輪次,用內層循環控制每輪內的數據比較次數;每次比較后可顯示比較結果,每輪比較后顯示當前結果。通過排序實驗的過程數據,會直觀地看出整個冒泡排序的過程。實驗中,可用“#”臨時屏蔽每次比較后的結果顯示,直觀觀察所有輪次的比較過程。#!/usr/bin/env python3#冒泡排序實驗#9個測試數據存儲在s[0]-s[8]s=[9,8,7,6,5,4,3,2,1]print(”參與排序的數據:", s)for k in range(0,len(s)-1): #控制比較輪數for i in range(0,len(s)-k-1): #每輪比較次數if s[i]>s[i+1]: #判斷相鄰兩數值的大小s[i],s[i+1]=s[i+1],s[i] #符合判斷條件情況,交換位置print("第",i+1,"次比較結果:"s) #顯示比較過程print("第",k+1,"輪比較結果:",s )#顯示當前結果print()討論:1.用測試數據運行程序有什么好處 2.如何刪除測試數據,為選手得分排序 雙重循環 —— 程序實現3.用冒泡排序的降序方式為選手成績排序#!/usr/bin/env python3s=[5.3,6.0,4.1,7.5,9.6,4.7.7.2,8.6,6.3.9.2]#選手成績列表for k in range(0,len(s)-1):for i in range(len(s)-k-1):If s[i]s[i],s[i+1]=s[i+1].s[i] #小數交換到后面位置print("成績從高到低排序結果:",s)冒泡排序不僅可以升序排序,通過修改比較運算符,還可以進行降序排序。參考以下程序,請對選手成績從高到低進行排序。在程序中:①在Python中,s[i],s[i+1]=s[i+1],s[i]語句直接完成變量值的交換,不用第三個變量。② print("第%d名得分:%.2f 選手:%s”%(i+1,s[i],c[i]))語句中采用了輸出格式的設置。%f;輸出對應的浮點數,%.2f是保留2位小數。本程序在執行時%.2f對應輸出s[ī]。%s:輸出對應的字符串。本程序在執行時%s對應輸出c[i]。4.同時交換選手編號與得分僅對分數排序,無法區分是哪位選手的成績。使用列表c輔助,可以實現編號與得分對應,符合交換條件時同步交換,從而能夠確定某位選手的具體得分和位次。m!/usr/binfeny python s=[5.3,6.0,4.1,7.5,9.6,4. 7,7.2,8.6,6.3,9.2]#選手成績列表c=[“001”,”002”,” 003” ,”004,””005”,”006”,”007”,“008”,”009”]#選于編號for k in range(O,len(s)-1)for i in range(len(s)-k-1):if s[i]s[1].s[1+1]**[1+1].s[0c[i].c[i-]]*c[i+1].c[i] x編號網修交換for i in range(0,len(s)):print(“第%d名 得分:%.2f 選手:%s” %(i+1,s[1],cti]))編號對應程序討論1.如有相同得分,如何顯示并列名次 2. 將排序、編號對應的兩個程序連續起來,如何修改可以完成10位選手的成績錄入和排序工作 課堂小結:排序算法的思想是什么?升序和降序是如何在排序算法中實現的 展開更多...... 收起↑ 資源預覽 縮略圖、資源來源于二一教育資源庫