資源簡介 學(xué)習(xí)任務(wù)單課程基本信息課題 查找算法的應(yīng)用學(xué)習(xí)目標(biāo)1. 能對(duì)生活中的具體問題進(jìn)行抽象建模。 2. 能根據(jù)問題的特點(diǎn)選擇合適的數(shù)據(jù)結(jié)構(gòu),設(shè)計(jì)查找算法。 3. 通過解決實(shí)際問題,理解并掌握查找算法的實(shí)現(xiàn)過程,體會(huì)查找算法在生活中的應(yīng)用。課前學(xué)習(xí)任務(wù)復(fù)習(xí)冒泡排序的實(shí)現(xiàn)過程。 復(fù)習(xí)順序查找和二分查找的實(shí)現(xiàn)過程,總結(jié)二者的時(shí)間復(fù)雜度和應(yīng)用場景。 體驗(yàn)學(xué)習(xí)生活中的查找應(yīng)用。課上學(xué)習(xí)任務(wù)“航空公司VIP會(huì)員積分查詢”問題部分?jǐn)?shù)據(jù)如右圖所示: 【學(xué)習(xí)任務(wù)一】 抽象與建模:如何根據(jù)VIP號(hào)碼快速查詢到會(huì)員積分?【學(xué)習(xí)任務(wù)二】設(shè)計(jì)算法與數(shù)據(jù)結(jié)構(gòu):如何用Python實(shí)現(xiàn)根據(jù)VIP號(hào)碼找到該會(huì)員的記錄。 1.對(duì)于會(huì)員記錄的存儲(chǔ),按列存儲(chǔ)或者按行存儲(chǔ)哪個(gè)更方便后續(xù)數(shù)據(jù)處理? 2. 根據(jù)右表思考,實(shí)現(xiàn)快速查詢 采用哪種查找算法效率更高?【學(xué)習(xí)任務(wù)三】 編寫程序并上機(jī)調(diào)試:在算法實(shí)現(xiàn)的過程中,冒泡排序和二分查找分別實(shí)現(xiàn)了獨(dú)立的功能,為了提高代碼的復(fù)用性,可將其封裝成函數(shù),請(qǐng)同學(xué)們根據(jù)流程圖和教材P155-P156頁例程自主實(shí)現(xiàn)函數(shù)的封裝并上機(jī)調(diào)試運(yùn)行。 【學(xué)習(xí)任務(wù)四】 學(xué)生“七選三”選課信息查詢: 某校高一學(xué)期結(jié)束,學(xué)生進(jìn)行了“七選三”預(yù)選課,選課信息存儲(chǔ)在“course.csv”中,如圖1所示,前3列分別存儲(chǔ)學(xué)生的學(xué)號(hào)、姓名、班號(hào),第4列到第10列分別表示物理、化學(xué)、生物、政治、歷史、地理和技術(shù)的選課情況,其中“1”表示選擇,“0”表示未選擇。李老師編寫了一個(gè)查詢程序,此程序有以下功能:程序運(yùn)行后自動(dòng)從“course.csv”中讀取學(xué)生信息,按照學(xué)號(hào)從小到大的順序?qū)⑺袑W(xué)生信息排序,并打印輸出。輸入一個(gè)學(xué)生的學(xué)號(hào),程序自動(dòng)查找是否存在該學(xué)生,若找到,輸出該生的“七選三”科目,如果沒有找到,則顯示“沒有查詢到該學(xué)號(hào)信息!”。查詢結(jié)果如圖2所示。 圖 1 圖 2 查詢程序如下,根據(jù)代碼注釋,將橫線處缺失的代碼補(bǔ)充完整。 #讀入csv中數(shù)據(jù)保存到列表a中 import csv csvFile=open("course.csv","r") #打開文件 reader=csv.reader(csvFile) a=[] for item in reader: #將每行數(shù)據(jù)(列表)依次追加到列表a中 a.append(item) csvFile.close() #冒泡排序 for i in range(1,len(a)): for j in range(1,len(a)-i): #從第1條記錄開始比較 if _______________: #按照每條記錄的第0個(gè)元素學(xué)號(hào)進(jìn)行升序排列 temp=a[j] a[j]=a[j+1] a[j+1]=temp #打印排序后的學(xué)生信息 print('排序后:') for i in range(len(a)): print(a[i]) #二分查找 key=int(input("請(qǐng)輸入要查找的學(xué)號(hào):")) i=1;j=len(a)-1 #查找范圍不包含第一行數(shù)據(jù) flag=False #設(shè)置查找標(biāo)記 while i<=j: m=(i+j)//2 #取中間索引 if int(a[m][0])==key: _________________ #查找成功,結(jié)束查找 break if ________________: #若查找學(xué)號(hào)<當(dāng)前學(xué)號(hào),查詢左區(qū)間 j=m-1 else: i=m+1 #根據(jù)查找結(jié)果輸出學(xué)生的選考科目 b=['物理','化學(xué)','生物','政治','歷史','地理','技術(shù)'] if flag==True: #查找成功 print(a[m][1],"同學(xué),您的7選3科目為:") for j in range(3,10): if a[m][j]=='1': print(b[j-3],end=" ") else: print("找不到此學(xué)號(hào)對(duì)應(yīng)的同學(xué)信息!") 展開更多...... 收起↑ 資源預(yù)覽 縮略圖、資源來源于二一教育資源庫