Python程序設(shè)計實(shí)踐 教案 實(shí)驗(yàn)8 字典與集合_第1頁
Python程序設(shè)計實(shí)踐 教案 實(shí)驗(yàn)8 字典與集合_第2頁
Python程序設(shè)計實(shí)踐 教案 實(shí)驗(yàn)8 字典與集合_第3頁
Python程序設(shè)計實(shí)踐 教案 實(shí)驗(yàn)8 字典與集合_第4頁
Python程序設(shè)計實(shí)踐 教案 實(shí)驗(yàn)8 字典與集合_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

《Python程序設(shè)計實(shí)踐教程》課程教案課題:字典與集合教學(xué)目的:掌握字典的基本概念與操作方法:通過字典的創(chuàng)建、訪問、添加、修改、刪除等操作的講解,幫助學(xué)生理解字典作為鍵值對集合的特性,并能夠靈活運(yùn)用字典處理復(fù)雜數(shù)據(jù)。理解集合的唯一性與無序性:通過集合的學(xué)習(xí),使學(xué)生掌握集合的基本操作及其在去重與集合運(yùn)算中的應(yīng)用,理解集合在數(shù)據(jù)處理中的獨(dú)特優(yōu)勢。學(xué)會使用字典推導(dǎo)式簡化代碼:通過字典推導(dǎo)式的語法與應(yīng)用實(shí)例,幫助學(xué)生掌握如何通過簡潔的代碼生成字典,提升編程效率與代碼可讀性。培養(yǎng)數(shù)據(jù)處理與集合運(yùn)算的能力:通過字典與集合的實(shí)踐操作,學(xué)生能夠熟練處理數(shù)據(jù)集合,掌握數(shù)據(jù)增刪改查與集合運(yùn)算的基本方法,為后續(xù)復(fù)雜數(shù)據(jù)處理提供支持。理解字典與集合的性能差異與適用場景:通過對比字典與集合的特性,幫助學(xué)生理解它們在性能、存儲結(jié)構(gòu)及適用場景上的差異,能夠根據(jù)需求選擇合適的數(shù)據(jù)結(jié)構(gòu)。為后續(xù)數(shù)據(jù)處理與算法實(shí)現(xiàn)奠定基礎(chǔ):通過本章的學(xué)習(xí),學(xué)生能夠掌握字典與集合的核心操作與應(yīng)用方法,為后續(xù)學(xué)習(xí)復(fù)雜數(shù)據(jù)處理算法與數(shù)據(jù)結(jié)構(gòu)提供支持。課型:新授課課時:本章安排2個課時。教學(xué)重點(diǎn):重點(diǎn):1.理解字典與集合的基本概念。2.掌握字典的創(chuàng)建和使用方法。3.掌握集合的創(chuàng)建和使用方法。教學(xué)難點(diǎn):難點(diǎn):本章教學(xué)難點(diǎn)在于如何理解字典與集合的特性差異,并能夠根據(jù)實(shí)際需求選擇合適的數(shù)據(jù)結(jié)構(gòu),同時掌握字典推導(dǎo)式與集合運(yùn)算的高效使用方法。教學(xué)過程:教學(xué)形式:講授課,教學(xué)組織采用課堂整體講授和分組演示。教學(xué)媒體:采用啟發(fā)式教學(xué)、案例教學(xué)等教學(xué)方法。教學(xué)手段采用多媒體課件、視頻等媒體技術(shù)。板書設(shè)計:本課標(biāo)題字典與集合課次0.5授課方式理論課□討論課□習(xí)題課□其他□課時安排2學(xué)分共2分授課對象普通高等院校學(xué)生任課教師教材及參考資料1.《Python程序設(shè)計實(shí)踐教程》。2.本教材配套視頻教程及學(xué)習(xí)檢查等資源。3.與本課程相關(guān)的其他資源。教學(xué)基本內(nèi)容教學(xué)方法及教學(xué)手段課程引入在Python編程中,字典與集合是兩種高效且靈活的數(shù)據(jù)結(jié)構(gòu),它們?yōu)槲覀兲峁┝藦?qiáng)大的數(shù)據(jù)存儲與處理能力。字典以其鍵值對的存儲方式,能夠快速查找與關(guān)聯(lián)數(shù)據(jù);而集合則以其唯一性與無序性,成為去重與集合運(yùn)算的利器。無論是處理復(fù)雜的數(shù)據(jù)映射,還是進(jìn)行高效的集合操作,字典與集合都為我們提供了簡潔而強(qiáng)大的工具。本章將帶領(lǐng)大家深入學(xué)習(xí)字典與集合的基本概念、操作方法及其適用場景,同時介紹字典推導(dǎo)式與集合運(yùn)算的高效編程技巧。通過豐富的實(shí)例與實(shí)驗(yàn),你將掌握如何根據(jù)需求選擇合適的數(shù)據(jù)結(jié)構(gòu),并學(xué)會利用字典與集合解決實(shí)際問題。讓我們一起探索字典與集合的強(qiáng)大功能,用代碼高效管理復(fù)雜數(shù)據(jù)!參考以下形式:1.銜接導(dǎo)入2.懸念導(dǎo)入3.情景導(dǎo)入4.激疑導(dǎo)入5.演示導(dǎo)入6.實(shí)例導(dǎo)入7.其他形式實(shí)驗(yàn)8字典與集合一、實(shí)驗(yàn)?zāi)康?.理解字典與集合的基本概念。2.掌握字典的創(chuàng)建和使用方法。3.掌握集合的創(chuàng)建和使用方法。二、知識要點(diǎn)1.字典字典是無序可變序列。字典中的每個元素都是一個鍵值對,包含鍵和值兩部分,鍵和值是對應(yīng)的,表示一種映射關(guān)系。字典的鍵是唯一的,值可以不唯一。(1)創(chuàng)建字典創(chuàng)建字典的語法格式如下。字典名={[鍵?1:值?1[,鍵?2:值?2[,...,鍵?n:值?n]]]}(2)遍歷字典遍歷是指沿著某條搜索路徑,依次對每個節(jié)點(diǎn)做一次且僅做一次訪問,遍歷的幾種方式如下。①遍歷鍵。遍歷鍵是默認(rèn)的遍歷方式,代碼如下。>>>d={"English":80,"Math":70,"Program":90}>>>forkeyind: #循環(huán)變量取的是字典中的各個鍵print(str(key)+':'+str(d[key]))English:80Math:70Program:90也可以使用字典的成員函數(shù)?get()取值。②使用值遍歷的代碼如下。>>>d={"English":80,"Math":70,"Program":90}>>>forvalueind.values():print(value)807090③使用鍵和值遍歷的代碼如下。>>>d={"English":80,"Math":70,"Program":90}>>>forkey,valueind.items():print(key,value)English80Math70Program90(3)字典的常規(guī)操作字典的常規(guī)操作主要包括增、刪、改、查等,主要操作方法如表?8-1?所示。其中,創(chuàng)建字典的示例代碼如下(表8-1中的操作方法以本字典為例)。d={"English":80,"Math":70,"Program":90}表?8-1字典的主要操作方法方法描述示例結(jié)果獲得鍵對應(yīng)的值,若鍵不存在,則返回設(shè)置的默認(rèn)值d.get("Math")70d.get("math")Nonepop(key[,val])刪除鍵對應(yīng)的值,且返回鍵相應(yīng)的值;若鍵不存在,且提供了?val?參數(shù),則返回?val,否則出現(xiàn)?KeyError?錯誤d.pop("Math")70popitem()刪除最后一個鍵值對,且返回該鍵值對相應(yīng)的元組;若字典為空,則出現(xiàn)?KeyError?錯誤d.popitem()("Program":90)items()返回所有鍵值對相應(yīng)的元組構(gòu)成的可迭代對象d.items()dict_items([("English",80),("Math",70),("Program",90)])values()返回所有值構(gòu)成的可迭代對象d.values()dict_values([80,70,90])keys()返回所有鍵構(gòu)成的可迭代對象d.keys()dict_keys(["English","Math","Program"])clear()刪除字典中的所有元素,使其成為一個空字典d.clear()None2.集合集合由一系列元素組成,集合中的元素是無序且不可重復(fù)的。集合的元素類型只能是數(shù)字、字符串、元組等不可變類型,不能是列表、字典、集合等可變類型。集合的基本功能是進(jìn)行成員測試和刪除重復(fù)元素。集合通過?set()函數(shù)創(chuàng)建,用“{}”標(biāo)識。集合的主要操作方法如表?8-2?所示(假設(shè)s={1,2})。表8-2集合的主要操作方法方法描述示例結(jié)果s1|s2并集操作,生成一個新集合,包含集合?s1?和?s2?中的所有元素{1,2,3}|{3,4,5}{1,2,3,4,5}s1&s2交集操作,生成一個新集合,包含集合?s1?和?s2?共同擁有的元素{1,2,3}&{3,4,5}{3}s1-s2差集操作,生成一個新集合,包含在集合?s1?中但不在?s2?中的元素{1,2,3}-{3,4,5}{1,2}s1^s2對稱差,生成一個新集合,包含集合?s1?和?s2?中除共同元素之外的元素{1,2,3}^{3,4,5}{1,2,4,5}s.add(x)將元素?x?添加到集合?s?中s.add(6){1,2,6}s.clear()刪除集合?s?中的所有元素,使其成為一個空集合s.clear()Nones.copy()生成一個新集合,復(fù)制集合?s?中的所有元素t=s.copy(){1,2}s.pop()獲取集合?s?中的一個元素,并刪除該元素s.pop(){2}s.remove(x)刪除集合?s?中值為?x?的元素s.remove(2){1}不同于序列,集合中的元素是無序的,所以索引在集合中無意義,切片操作也無法在集合中使用。集合的部分操作與序列的通用操作相同,使用方法可以參照前面的內(nèi)容。三、實(shí)例解析【實(shí)例?8-1】去掉重復(fù)數(shù)字輸入一個整數(shù)列表,去掉列表中的重復(fù)數(shù)字,輸出升序排列后的列表。(1)問題分析把列表轉(zhuǎn)換成集合以去掉重復(fù)元素,然后再轉(zhuǎn)換成列表,將其進(jìn)行排序,輸出排序后的結(jié)果。(2)程序代碼#sl8-1.pynum=eval(input())newnum=list(set(num))newnum.sort()print(newnum)(3)輸入樣例[4,2,1,2,8,4,5,3,8](4)輸出樣例[1,2,3,4,5,8]【實(shí)例?8-2】簡單的交互式計算器編寫程序,實(shí)現(xiàn)一個簡單的交互式計算器,能夠完成加、減、乘、除運(yùn)算。(1)輸入格式在第一行中輸入一個數(shù)字,在第二行中輸入一個四則運(yùn)算符(+、?、*、/),在第三行中輸入一個數(shù)字。(2)輸出格式另起一行輸出運(yùn)算結(jié)果(保留?2?位小數(shù))。若除法運(yùn)算的分母為?0,則輸出“dividedbyzero”。(3)輸入樣例7.4/2.1(4)輸出樣例3.52(5)程序代碼#sl8-2.py簡單的交互式計算器(使用字典)x=eval(input())fh=input()y=eval(input())jsq={'+':'x+y','-':'x-y','*':'x*y','/':'x/y'}iffh=='/'andy==0:print('dividedbyzero')else:t=eval(jsq.get(fh))print(f'{t:.2f}')(6)思考與討論設(shè)計簡單的交互式菜單,可以使用?if-elif?選擇結(jié)構(gòu),代碼如下。#用戶輸入print("選擇運(yùn)算:")print("1、相加")print("2、相減")print("3、相乘")print("4、相除")choice=input("輸入你的選擇(1/2/3/4):")num1=int(input("輸入第一個數(shù)字:"))num2=int(input("輸入第二個數(shù)字:"))ifchoice=='1':print(num1,"+",num2,"=",num1+num2)elifchoice=='2':print(num1,"-",num2,"=",num1-num2)elifchoice=='3':print(num1,"*",num2,"=",num1*num2)elifchoice=='4':print(num1,"/",num2,"=",num1/num2)else:print("非法輸入")【實(shí)例?8-3】輸出全排列(1)題目描述輸入整數(shù)?n(3≤n≤7),編寫程序輸出?1、2、…、n?的全排列。(2)輸入格式輸入正整數(shù)?n。(3)輸出格式輸出?1、2、…、n?的全排列。每種排列占一行,數(shù)字間無空格。(4)輸入樣例3(5)輸出樣例123132213231312321(6)題目分析解決問題的關(guān)鍵是將數(shù)字轉(zhuǎn)換為列表,運(yùn)用集合,進(jìn)行排列,然后再輸出。本例調(diào)用的函數(shù)如下。①shuffle():random?庫中的函數(shù),用于打亂列表中的數(shù)。②str():將數(shù)字轉(zhuǎn)換為字符串。③set():使集合存儲的元素?zé)o序不重復(fù)。④join():將集合中的元素進(jìn)行連接。⑤sorted():將集合中的元素進(jìn)行升序排列。(7)程序代碼#sl8-3.pyimportrandomn=int(input())t=[]sum=1foriinrange(1,n+1):sum=sum*it.append(str(i))s=set()whilelen(s)<sum:random.shuffle(t)s.add("".join(t))s=sorted(s)foriinrange(0,len(s)):print(s[i])(8)思考與討論輸入整數(shù)?n=10,要求輸出?1、2、3、…、10?的全排列。要求運(yùn)行時間限制在?20?秒之內(nèi),超出該時間則認(rèn)為程序錯誤。提示:當(dāng)?n?增大時,運(yùn)行時間將急劇增加,編程時要注意盡量優(yōu)化算法,提高運(yùn)行效率。【實(shí)例?8-4】統(tǒng)計重復(fù)數(shù)字出現(xiàn)的次數(shù)編寫程序,生成?1000?個?1~100?的隨機(jī)整數(shù),統(tǒng)計每個數(shù)字出現(xiàn)的次數(shù)。(1)問題分析用集合進(jìn)行操作,還需要用到隨機(jī)數(shù)函數(shù)。(2)程序代碼#sl8-4.pyimportrandomx=[random.randint(1,100)foriinrange(1000)]d=set(x)forvind:print(v,':',x.count(v))(3)思考與討論下面用字典進(jìn)行操作。①方法一:先排序,后統(tǒng)計。importrandomdigits=[] #定義一個空列表foriteminrange(1000): #生成?1000?個隨機(jī)整數(shù)并放到列表中digits.append(random.randint(1,100)) #對生成的?1000?個數(shù)進(jìn)行升序排序,然后添加到字典中sorted_digits=sorted(digits) #升序排序digit_dict={} #定義一個空字典fordigitinsorted_digits: #遍歷已排序的列表ifdigitindigit_dict:digit_dict[digit]+=1 #若鍵存在,則更新值else:digit_dict[digit]=1 #在字典中添加新的鍵值對print(f'數(shù)字\t?出現(xiàn)次數(shù)')foriindigit_dict:print(f'{i}\t{digit_dict[i]}')②方法二:先統(tǒng)計,后排序。importrandomdigit_dict={} #定義一個空字典foriinrange(1000): #生成?1000?個隨機(jī)整數(shù)并放到字典中digit_key=random.randint(1,100)ifdigit_keyindigit_dict:digit_dict[digit_key]+=1 #若鍵存在,則更新值else:digit_dict[digit_key]=1 #在字典中添加新的鍵值對 #對生成的?1000?個數(shù)進(jìn)行升序排序,然后遍歷輸出print(f'數(shù)字\t?出現(xiàn)次數(shù)')foriinsorted(digit_dict.keys()):print(f'{i}\t{digit_dict[i]}')程序運(yùn)行結(jié)果如下。數(shù)字 出現(xiàn)次數(shù)112293841157611…【實(shí)例?8-5】求每門科目的最高分以字典的形式輸入?n?位同學(xué)的各科(語文、數(shù)學(xué)、英語)成績,求出每門科目的最高分。(1)問題分析可以將結(jié)果保存在一個字典中,開始時該字典是一個空字典,遍歷輸入的成績,更新該字典。(2)參考程序#sl8-5.pyn=int(input())result={}foriinrange(n):student=eval(input())fork,vinstudent.items():result[k]=vifv>result.get(k,0)elseresult[k]fork,vinresult.items():print('{}:{}'.format(k,v))(3)輸入樣例2{'語文':80,'數(shù)學(xué)':95,'英語':90}{'語文':85,'數(shù)學(xué)':82,'英語':76}(4)輸出樣例語文:85數(shù)學(xué):95英語:90四、實(shí)驗(yàn)內(nèi)容1.在?IDLE?中依次輸入下列語句,將輸出結(jié)果填寫在橫線處。(1)定義字典的方法>>>keys=['name','age','sex']>>>values=['zhangsan',18,'Male']>>>dict1=dict(zip(keys,values))>>>dict1 #輸出結(jié)果為:>>>dict2=dict(name='zhangsan',age=18,gender='Male')>>>dict2 #輸出結(jié)果為:(2)字典元素的訪問>>>dict3={"Zhejiang":"Hangzhou","Jiangsu":"Nanjing"}>>>dict3["Zhejiang"] #輸出結(jié)果為:>>>dict3.get("Zhejiang") #輸出結(jié)果為:(3)字典元素的修改>>>dict4={'name':'zhangsan','age':18,'gender':'Male'}>>>dict4['score']=88>>>dict4 #輸出結(jié)果為:>>>dict4.pop('score')>>>dict4 #輸出結(jié)果為:>>>dict4.clear()>>>dict4 #輸出結(jié)果為:(4)字典的遍歷>>>user_password={"zhangsan":"abc123","lisi":"123456","wangwu":'666666',"zhaoliu":"888888"}>>>fornameinuser_password.keys():print(name,end="") #輸出結(jié)果為:>>>forpasswordinuser_password.values():print(password,end="") #輸出結(jié)果為:>>>fork,vinuser_password.items():print(k,v) #輸出結(jié)果為:>>>fornameinuser_password.items():print(name,end="") #輸出結(jié)果為:2.在?IDLE?中依次輸入下列語句,將輸出結(jié)果填寫在橫線處。(1)集合的創(chuàng)建>>>set1={1,2,3,4,3,2,1}>>>set1 #輸出結(jié)果為:>>>set2=set('abcdcba')>>>set2 #輸出結(jié)果為:(2)集合的基本操作>>>set3={1,2,3}>>>set3.add(4)>>>set3 #輸出結(jié)果為:>>>set3.discard(1)>>>set3 #輸出結(jié)果為:>>>set3.pop()>>>len(set3) #輸出結(jié)果為:(3)集合運(yùn)算(交、并、差、對稱差)>>>set4={10,20,30}>>>set5={20,30,40}>>>set4&set5 #輸出結(jié)果為:>>>set4|set5 #輸出結(jié)果為:>>>set4-set5 #輸出結(jié)果為:>>>set4^set5 #輸出結(jié)果為:3.在?IDLE?中依次輸入下列語句,將輸出結(jié)果填寫在橫線處。(1)字典與列表的轉(zhuǎn)換>>>x={'a':1,'b':2,'c':3}>>>key_value=list(x.keys())>>>key_value #輸出結(jié)果為:>>>value_list=list(x.values())>>>value_list #輸出結(jié)果為:>>>x=[70,80,90]>>>y=['zhangsan','lisi','wangwu']>>>print(dict(zip(y,x))) #輸出結(jié)果為:(2)集合與列表、元組的轉(zhuǎn)換>>>s=set([1,2,3,1,2,4,6])>>>s #輸出結(jié)果為:>>>len(s) #輸出結(jié)果為:>>>list1=list(s)>>>list1 #輸出結(jié)果為:>>>s_score=set([('zhangsan',90),('lisi',70),('wangwu',80)])>>>forxins_score: print(x[0],':',x[1]) #輸出結(jié)果為:(3)字典與列表>>>stu={"zhangsan":{"Python":92,"Math":88,"English":85},"lisi":{"Python":88,"Math":77,"English":89}}>>>len(stu) #輸出結(jié)果為:>>>list(stu.keys()) #輸出結(jié)果為:>>>list(stu["zhangsan"].keys()) #輸出結(jié)果為:4.輸入一系列數(shù)據(jù),降序輸出這些數(shù)據(jù),重復(fù)元素只輸出一次(用集合實(shí)現(xiàn))。5.求指定區(qū)間內(nèi)能被?3、5、7?整除的數(shù)的個數(shù)(用集合實(shí)現(xiàn))。6.編寫程序,使用給定的整數(shù)?n?生成一個字典,該字典包含?1~n?的整數(shù)(兩者都包含),然后輸出字典。7.一個四位數(shù)的各位數(shù)字互不相同,所有數(shù)字之和等于?6,并且這個數(shù)是?11?的倍數(shù)。滿足這種要求的四位數(shù)有多少個?分別是什么?8.9.查找下列字典中值以“A”或“a”開頭的所有鍵值對。dic={'k1':"adolescent",'k2':"amusement",'k3':"academy",'k4':"Accountant",'k5':"

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論