中文字幕精品无码一区二区,成全视频在线播放观看方法,大伊人青草狠狠久久,亚洲一区影音先锋色资源

5.3.2 排序算法的應用 課件(22張PPT)

資源下載
  1. 二一教育資源

5.3.2 排序算法的應用 課件(22張PPT)

資源簡介

(共22張PPT)
5.3 數 據 排 序
—— 排序算法的應用
冊 別:選擇性必修1
學 科:高中信息技術(浙教版)
學習目標:
能對給定的文件中的數據進行抽象并建立模型。
能合理選用數據結構,設計排序算法。
能用Python語言編寫具體的排序程序。
能自覺對學習生活具體問題抽象建模、設計算法并編寫程序及調試程序,如:對成績進行同分同名次排名、按排車輛考場等。
閱讀教材P132-134,可根據個性學習暫?;蚣铀俨シ耪n程。
想一想:
請你給下面的2022北京冬奧會金牌編制金牌排行榜。
(一)抽象與建模
問題:每個國家的信息是一條記錄,包括編號、國家/地區、各獎牌數等數據項。
實踐體驗:Excel排序,對記錄按關鍵字排序,并關注交換如何進行?
(一)抽象與建模
問題:每個國家的信息是一條記錄,包括編號、國家/地區、各獎牌數等數據項。
實踐體驗:Excel排序,對記錄按關鍵字排序,并關注交換如何進行?
比較的是金牌數,交換的是整條記錄
排序前
排序后
(二)設計算法與數據結構

數據組織形式有兩種,哪種更方便?
方法一是采用6個一維數組按列存儲,即每個數組分別存儲每個國家的編號、國家、各獎牌數等,如定義a數組存儲表中26個國家的編號;
定義b數組存儲表中26個國家的國家名稱,其對應的值為[“中國”,”澳大利亞 ” ,”美國 ” ,”加拿大 ” , ”法國” ……]
定義c數組存儲表中26個國家的金牌數量,其對應的值為[4,1,5,1,1,4,0,0,8,3……];
定義d數組、e數組、f數組分別存銀牌、銅牌、總數
a b c d e f
(二)設計算法與數據結構
數據組織形式有兩種,哪種更方便?
方法二是采用1個一維數組按行存儲,每個數組元素對應某個國家的一條記錄信息,如[1,中國,4,3,1,8]對應中國的相關信息。
金牌為索引值[2]的元素
import csv #數據讀入
csvFile = open("jp.csv", "r“) #打開相應數據文件
reader = csv.reader(csvFile) #建立一個讀入數據的對象
a = []
for item in reader:
csvFile.close()
for i in range(1,len(a)-1): #排序不包含第一行數據
for j in range(1,len(a)-i):
if :
csvFile2 = open(‘jp2.csv’,‘w’, newline=‘’) #數據寫入
writer = csv.writer(csvFile2, dialect='excel‘)
for i in range(len(a)):
writer.writerow(a[i])
csvFile2.close()
(三)編寫程序
2022北京冬奧會金牌編制金牌排行榜
(給劃線處填上合適的語句)
(三)編寫程序(填空并調試):
#數據讀入
import csv #導入csv模塊
csvFile = open(“jp.csv”, “r”) #打開jp.csv數據文件
reader = csv.reader(csvFile)#建立一個讀入數據的對象reader
a = [] #定義空列表a
for item in reader: #jp.csv中的每一行為a列表一個元素,此元素為字符串
a.append(item)
csvFile.close() #關閉jp.csv數據文件
#冒泡排序
for i in range(1,len(a)-1): #排序不包含第一行數據
for j in range(1,len(a)-i):#從前往后冒泡排序
if int(a[j][2])a[j],a[j+1] =a[j+1],a[j] #當前記錄與后一條記錄交換位置
csvFile2 = open(‘jp2.csv’,‘w’, newline=‘’)#數據寫入到jp2.csv中
writer = csv.writer(csvFile2, dialect='excel‘)
for i in range(len(a)):
writer.writerow(a[i])
csvFile2.close()
a[1][0] a[1][1] a[1][2] a[1][3] a[1][4] a[1][5]
a[1] 1 中國 4 3 1 8
(三)編寫程序 (結果如下):
jp.csv
jp2.csv
挑戰實踐:
請你給2022北京冬奧會金牌編制金牌排行榜添加上金牌名次,而且同分數同名次,如何繼續編程實現?
金牌 名次
10  
9  
9  
9  
8  
7  
7  
1
2
2
2
5
6
6
0
1
2
3
4
5
6
7
挑戰實踐:
請你給2022北京冬奧會金牌編制金牌排行榜添加上金牌名次,而且同分數同名次,如何繼續編程實現?
#數據讀入
import csv #導入csv模塊
csvFile = open(“jp.csv”, “r”) #打開jp.csv數據文件
reader = csv.reader(csvFile)#建立一個讀入數據的對象reader
a = [] #定義空列表a
for item in reader: #每一行為a列表一個元素,此元素為字符串
a.append(item) #csv通過這種樣式讀入的數據為字符串csvFile.close() #關閉jp.csv數據文件
#冒泡排序
for i in range(1,len(a)-1): #排序不包含第一行數據(索引為0)
for j in range(1,len(a)-i):#從前往后冒泡排序
if int(a[j][2])a[j],a[j+1] =a[j+1],a[j] #當前記錄與后一條記錄交換位置
#數據寫入到jp2.csv中
csvFile2 = open(‘jp2.csv’,‘w’, newline=‘’)
writer = csv.writer(csvFile2, dialect='excel‘)
for i in range(len(a)):
writer.writerow(a[i])
csvFile2.close()
for i in range(len(a)):
a[i].append('排名') #添加每行的‘排名’列
c=1 #同分同名開始,c用于統計同分數的個數
a[1][6]=‘1’#第一個國家第一名,注意數據類型
for i in range(2,len(a)):#從第二個國家至最后一個
if a[i][2]!=a[i-1][2]: #當前國家金牌數與前一個不等
a[i][6]=str(int(a[i-1][6])+c)
#當前國家名次是前一個國家名次+前一金牌同分數的個數
c=1 #當前國家分數個數c恢復初值1個
else: #當前國家金牌數與前一個相等
a[i][6]=a[i-1][6] #當前國家與前一個相同名次
c=c+1 #統計同分個數
索引值為0 1 2 3 4 5 索引值為6
編號 國家 金牌 銀牌 銅牌 總數 排名
10 德國 8 5 1 14 1
挑戰實踐:(同分同名次結果)
jp.csv
jp2.csv
學習生活中的應用實踐:
在剛剛結束的聯盟考成績統計中,請你幫忙編寫程序,能統計各科總分,并按照總分從高到低排序,并添加上總分名次,而且同分數同名次,成績文件為“聯盟.csv”,大概有5000左右考生,最后輸出到“聯盟2.csv”文件中。
處理前的表格
處理后的表格
學習生活中的應用實踐:
#數據讀入
import csv #導入csv模塊
s=[] #定義空列表s
file=open('聯盟.csv','r') #打開聯盟.csv數據文件
lines=csv.reader(file))#建立一個讀入數據的對象lines
n=0
for item in lines: #每一行為s列表一個元素,此元素為字符串
s.append(item) #csv通過這種樣式讀入的數據為字符串
n=n+1
file.close#關閉聯盟.csv數據文件
for i in range(n): #添加2列
s[i].append("總分")
s[i].append("名次")
for i in range(1,n): #求總分
x=0
for j in range(3,13):
x+=float(s[i][j]) #注意數據類型
s[i][13]=str(x)
學習生活中的應用實踐:
#應用優化冒泡排序
i=1;ed=1;flag=True #內循環比較交換優化、外循環遍歷次數優化
while i<=n-1 or flag==True: #排序不包含第一行數據(索引為0)
flag=False
for j in range(n-1,ed,-1):#從后往前冒泡排序
if float(s[j][13])>float(s[j-1][13]):#當前記錄的總分比后一條記錄少
s[j],s[j-1]=s[j-1],s[j] #當前記錄與后一條記錄交換位置
ed=j;flag=True
if ed==n-1 or flag==False:break #未交換或上次交換為最后1個元素,退出while循環
i+=1
#數據寫入到聯盟2.csv中
file2 = open('聯盟2.csv','w', newline='') #數據寫入
writer = csv.writer(file2, dialect='excel')
for i in range(len(s)):
writer.writerow(s[i])
file2.close()
c=1#同分同名開始,c用于統計同分數的個數
s[1][14]=‘1’第一個學生第一名,注意數據類型
for i in range(2,n):
if s[i][13]!=s[i-1][13]: #當前學生總分與前一個不等
s[i][14]=str(int(s[i-1][14])+c)
#當前學生名次是前一個學生名次+前一學生同分數的個數
c=1#當前學生分數個數c恢復初值1個
else: #當前學生總分與前一個相等
s[i][14]=s[i-1][14]#當前學生與前一個同名次
c=c+1 #統計同分個數
學習生活中的應用實踐:
處理前的表格
處理后的表格
課堂小結
抽象與建模
編寫程序并調試
排序算法程序實現
設計算法與數據結構
學習評價
對自己的表現進行客觀的評價,并思考后續完善的方向。(3=優秀,2=一般,1=仍需加油)
評分項 自我評價
能對jp.csv文件中的數據進行抽象并建立模型 3 2 1
能對jp.csv數據選用合適的數據結構,設計排序算法 3 2 1
能用Python語言編寫具體的排序程序(聯盟考成績排名)。 3 2 1
能自覺將學習生活具體問題抽象建模、設計算法并編寫程序及調試程序,如:對成績進行同分同名次排名、排考場車輛等實際應用。 3 2 1
課后作業1:秋游安排車輛
某班家委會根據參加秋游的同學到達指定上車點時間和每位同學可以等待的時間信息,安排車輛接送參加秋游活動同學去秋游點白云山腳(考慮車子座位數量<=4人)。參加秋游活動同學到達上車點的時間和可以等待的時間用長度為7的字符串表示,例如out.txt中第一行“ 08:11 4 xixi”表示xixi同學當天8點11分到達上車點,最多等待4分鐘(每個同學的等待時間都小于10),那么最晚8點23分出發去秋游點(若8點23分剛到的同學也一同出發)。編寫 Python 程序,統計接送n個參加秋游活動同學所需的最少車輛數。運行程序,顯示所有同學提交的信息,數據已經按到達時間先后排列,程序運行結果顯示所需的最少車輛數。
(1)若將圖中最后1 行“08:16 2”數據改為“08:16 7”,請問需要 ( )輛車接送?(填數字)
4
課后作業:秋游安排車輛
a=[];xz=4 #每輛車最多坐4人
b=[];c=[]
n=0 #常量初始化,n值后面另計
for line in open("out.txt","r"): #從文件time.txt中讀取時間數據
a.append(line.strip("\n"))
n+=1
for i in range(n):
print(a[i])
print("讀取out.txt文件結束,共",n,"條數據。")
print("參加秋游人數n=",n)
#排序
for i in range(len(a)-1):
for j in range(len(a)-1, #① ):
if #② :
a[j],a[j-1]=a[j-1],a[j]
for i in range(n):
b.append(0);c.append(0)
b[i]=int(a[i][:2])*60+int(a[i][3:5])
c[i]=b[i]+int(a[i][6:8])
print(b[i],c[i])
tot=0;i=0;k=1
while it=c[i]
j=i+1
while jif b[j]<=t:
k+=1;j+=1
else:
break
if k==xz:k=0;break
i=j
# ③
for i in range(n):
print(a[i])
print("接送所有參加秋游同學最少需要",tot,"輛車")
① i,-1
② a[j]③ tot+=1
課后作業2:教材P134思考與練習
1.結合“奧運排行榜”的例子,分別編寫程序滿足下列要求:
(1)若數據以7個一維數組的形式存儲。
(2)若將排序關鍵字改為“獎牌數”,并按升序排序。
import csv #數據讀入
csvFile = open("jp.csv", "r") #打開相應數據文件
reader = csv.reader(csvFile) #建立一個讀入數據的對象
a = [] ;b=[];c=[];d=[];e=[];f=[]
for item in reader:
a.append(item[0])
b.append(item[1])
c.append(item[2])
d.append(item[3])
e.append(item[4])
f.append(item[5])
csvFile.close()
for i in range(len(a)):
print (a[i],b[i],c[i],d[i],e[i],f[i])
for i in range(1,len(a)-1): #排序不包含第一行數據
for j in range(1,len(a)-i):
if int(c[j])a[j],a[j+1] =a[j+1],a[j]
b[j],b[j+1] =b[j+1],b[j]
c[j],c[j+1] =c[j+1],c[j]
d[j],d[j+1] =d[j+1],d[j]
e[j],e[j+1] =e[j+1],e[j]
f[j],f[j+1] =f[j+1],f[j]
for i in range(len(a)): #輸出排序后的序列
print (a[i],b[i],c[i],d[i],e[i],f[i])

展開更多......

收起↑

資源預覽

<pre id="tfb94"><li id="tfb94"></li></pre>

<bdo id="tfb94"><rt id="tfb94"></rt></bdo>
  • <menu id="tfb94"><dl id="tfb94"></dl></menu><i id="tfb94"><acronym id="tfb94"><sub id="tfb94"></sub></acronym></i>

    1. 主站蜘蛛池模板: 丽水市| 桐庐县| 博湖县| 剑川县| 宜城市| 古浪县| 榆林市| 景谷| 青龙| 金秀| 荔浦县| 大连市| 江达县| 泰州市| 福泉市| 满洲里市| 普兰县| 长垣县| 靖远县| 从化市| 临西县| 额尔古纳市| 日照市| 南康市| 赣州市| 清新县| 文登市| 五原县| 宜兰市| 阳春市| 佳木斯市| 广西| 仙游县| 乳源| 建德市| 临桂县| 应用必备| 上饶市| 江山市| 万安县| 景德镇市|