




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Python大數(shù)據(jù)基礎與實戰(zhàn)實驗(實訓)指導書
實驗項目內容與學時分配序號實驗名稱實驗內容學時實驗類型實驗要求1anaconda安裝和使用Anaconda的安裝、配置和簡單實用2驗證必修2序列的使用列表、元組、字典、集合的使用2設計必修3字符串處理程序編寫編寫對字符串(正則表達式)進行操作的程序2設計必修4函數(shù)的使用函數(shù)的設計與使用2設計必修5類的使用類的設計與使用2設計必修6文件的操作和使用二進制和文本文件的操作使用2設計必修7異常處理異常處理程序的編寫2設計必修8數(shù)據(jù)可視化數(shù)據(jù)可視化庫matplotlib的使用2設計必修9數(shù)據(jù)分析Pandas庫的使用2設計選修10網(wǎng)絡爬蟲設計lxml、requests庫的使用2設計選修合計學時20實驗一anaconda安裝與使用實驗目的和要求掌握windows下PythonIDEL的安裝。掌握anaconda的安裝和配置、jupyternotebook、spyder工具的使用3)掌握使用pip安裝Python擴展庫。4)熟悉離線安裝輪子文件的方法。二、實驗內容1)PythonIDL、anaconda下載和安裝。2)JupyterNotebook使用和常用功能。3)擴展庫的安裝。4)輪子文件的安裝。三、實驗儀器、設備計算機一臺,安裝有Windows7操作系統(tǒng)四、實驗原理從Python官網(wǎng)下載Python3.7.2。從anaconda官網(wǎng)下載anaconda,建議下載3.6以上版本。Jupyternotebook是一個IDL,可以進行交互式編程,支持多種格式文件的編輯。IDEL也可以進行交互性編程。五、實驗步驟1.下載anaconda/PythonIDEL從官網(wǎng)上下載anaconda3.6,需要根據(jù)安裝的OS來進行選擇。具體的安裝環(huán)境要求可以查看官網(wǎng)的文檔說明。從官網(wǎng)上下載Python,建議安裝3.7.2版本。安裝anaconda安裝時選擇定制安裝,建議不要把anaconda安裝在c:盤上。安裝時選擇針對所有用戶。不要把anacond自帶的python解釋器加入到path中。啟動JupyterNotebook
1)【開始】-->【所有程序】-->【anaconda】-->【JupyterNotebook】選擇復制鏈接。修改屬性,將%userprofile%更改為今后存放Python源程序的目錄。啟動JupyterNotebook。單擊【new】--->“Python3”,進入Python腳本編輯界面??梢赃x擇單元類型【code】,輸入源代碼,通過按下【shifit】+【enter】組合鍵,運行程序。也可以選擇單元類型【markdown】。Markdown模式下可以對文本進行編輯,采用Markdown的語法規(guī)范,可以設定文本格式,插入鏈接、圖片甚至數(shù)學公式,同樣,通過按下【shifit】+【enter】組合鍵可運行Markdown單元,顯示格式化的文本。在首行前加一個“#”字符和空格代表一級標題,加兩個“#”字符和空格代表二級標題,以此類推。項目符號可以使用“+”、“-”、“*”加空格,公式使用兩個“$”符號,例如“$E=mc^2$”。完成以下內容的輸入:4.安裝第三方擴展庫(以安裝matplotlib庫為例。)1)升級pipwindows下進入命令行模式,輸入python-mpipinstall--upgradepip。2)切換到python安裝目錄的scripts子目錄下3)依次輸入pipinstallnumpyscipy、pipinstallmatplotlib。5.離線安裝第三方擴展庫如果遇到安裝不成功的擴展庫,使用瀏覽器打開下面的網(wǎng)址,下載whl文件進行離線安裝:/~gohlke/pythonlibs/。在IDLE中使用import導入安裝好的擴展庫,驗證是否安裝成功。六、實驗注意事項1)Python是解釋型語言,需要Python解釋器支持。2)可以使用.tab來獲取對象的屬性,使用函數(shù)名?獲取函數(shù)幫助信息,??函數(shù)名獲取函數(shù)源碼。七、實驗報告要求實驗報告以電子文檔形式提交。實驗報告主要內容:anaconda安裝過程、第三方擴展庫的安裝、Python程序基本結構。八、實驗成績考核(黑體、小四號、加粗、行距1.5倍縮進兩個字符)(百分制)實驗二序列、流程控制語句的使用一、實驗目的和要求掌握列表的功能和使用。掌握元組的功能和使用。掌握字典的功能和使用。掌握集合的功能和使用。掌握選擇結構和循環(huán)結構for、while的使用二、實驗內容把列表中的所有數(shù)字都加5,得到新列表。輸入三個序列,輸出三個序列中最大值相乘的結果和最大值出現(xiàn)的位置。生成包含1000個隨機字符的字符串,統(tǒng)計每個字符的出現(xiàn)次數(shù)。已知有一個包含一些同學成績的字典,現(xiàn)在需要計算所有成績的最高分、最低分、平均分,并查找所有最高分同學。編寫一個程序,檢查用戶輸入3條邊能否構成三角形,如果可以構成,請判斷三角形的類型(銳角、鈍角和直角以及等腰、等邊)。三、實驗儀器、設備Windows7以上OS、安裝有anaconda。四、實驗原理列表、集合、元組和集合的定義、可以進行的操作。五、實驗步驟1)啟動jupyternotebook2)單擊【new】按鈕。3)輸入程序。3)使用【run】按鈕執(zhí)行程序。六、實驗注意事項1)正確使用數(shù)據(jù)類型。2)先確定思路,在編寫程序實現(xiàn)。七、實驗報告要求實驗報告以電子文檔形式提交。實驗報告主要內容:完成要求的程序編寫,提交源代碼和運行結果。比較列表、元組、字典和集合的異同。比較for、while循環(huán)的執(zhí)行流程。八、實驗成績考核(黑體、小四號、加粗、行距1.5倍縮進兩個字符)(百分制)參考程序1)x=list(range(10))y=[]fornuminx: y.append(num+5)或者[num+5fornuminx]2)x=input("inputfirstlist:")x=list(map(int,x.split()))i=max(x)iPos=x.index(i)y=input("inputsecondlist:")y=list(map(int,y.split()))j=max(y)jPos=y.index(j)z=input("inputthirdlist:")z=list(map(int,z.split()))k=max(z)kPos=z.index(k)print("maxis",i*j*k,",positionis%d,%d,%d."%(iPos,jPos,kPos))3)importstringimportrandomx=string.ascii_letters+string.digits+string.punctuationy=[random.choice(x)foriinrange(1000)]z=''.join(y)d=dict()#使用字典保存每個字符出現(xiàn)次數(shù)forchinz:d[ch]=d.get(ch,0)+14)scores={"ZhangSan":45,"LiSi":78,"WangWu":40,"ZhouLiu":96,"ZhaoQi":65,"SunBa":90,"ZhengJiu":78,"WuShi":99,"DongShiyi":60}highest=max(scores.values())#最高分lowest=min(scores.values())#最低分average=sum(scores.values())/len(scores)#平均分highestPerson=[nameforname,scoreinscores.items()ifscore==highest]#或者scores={'LiSi':78,'ZhaoQi':65,'WangWu':40,'WuShi':99,'ZhengJiu':78,'ZhangSan':45,'SunBa':90,'ZhouLiu':96,'DongShiyi':60}highest=max(scores.values())average=sum(scores.values())/len(scores)forname,scoreinscores.items():ifscore==highest:print(name)5)"""本程序完成對輸入的3條邊進行判斷,如果構成三角形,則判斷是銳角、鈍角和直角三角形;還可以判斷等腰和等邊三角形"""x,y,z=eval(input("請輸入三角形3條邊的長度(以,分隔):"))#輸入三條邊長度x,y,z=sorted([x,y,z],reverse=True)#降序排列三條邊長度whiley+z<=x:print("不能構成三角形,請重新輸入3條邊的長度:")x,y,z=eval(input("請輸入三角形3條邊的長度(以,分隔):"))x,y,z=sorted([x,y,z],reverse=True)cosX=(y**2+z**2-x**2)/2.0/y/zifcosX>0.0:print("銳角三角形")elifcosX==0.0:print("直角三角形")else:print("鈍角三角形")ifx==y==z:print("等邊三角形")elifx==yory==zorx==z:print("等腰三角形")實驗三字符串處理程序編寫一、實驗目的和要求熟悉并掌握字符串的定義掌握字符串常用操作的使用二、實驗內容生成指定長度的隨機密碼。編寫程序實現(xiàn)字符串加密和解密,循環(huán)使用指定密鑰,采用簡單的異或算法。檢查并判斷密碼字符串的安全強度,密碼必須至少包含6個字符。編寫程序,模擬打字練習程序的成績評定。假設origin為原始內容,userInput為 用戶練習時輸入的內容,要求用戶輸入的內容長度不能大于原始內容的長度,如果對應 位置的字符一致則認為正確,否則判定輸入錯誤。最后成績?yōu)椋赫_的字符數(shù)量/原始 字符串長度,按百分制輸出,要求保留2位小數(shù)。三、實驗儀器、設備計算機、windows7操作系統(tǒng)+anaconda。四、實驗原理1)在Python中,字符串屬于不可變有序序列,使用單引號、雙引號、三單引號或三雙引號作為定界符,并且不同的定界符之間可以互相嵌套。2)Python字符串對象提供了大量方法用于字符串的切分、連接、替換和排版等操作,另外還有大量內置函數(shù)和運算符也支持對字符串的操作。五、實驗步驟1)啟動jupyternotebook2)單擊【new】按鈕。3)輸入程序。4)使用【run】按鈕執(zhí)行程序。六、實驗注意事項正確使用字符串的方法和基本操作。字符串編碼方案。編程規(guī)范。七、實驗報告要求實驗報告以電子文檔形式提交。實驗報告主要內容:完成要求的程序編寫,提交源代碼和運行結果。八、實驗成績考核(黑體、小四號、加粗、行距1.5倍縮進兩個字符)(百分制)參考程序:1)importstringimportrandomcharacters=string.digits+string.ascii_lettersprint(''.join([random.choice(characters)foriinrange(8)]))#返回8位的密碼字段print(''.join([random.choice(characters)foriinrange(10)]))#返回10位的密碼字段print(''.join([random.choice(characters)foriinrange(16)]))#返回16位的密碼字段2)fromitertoolsimportcyclesource='xijinguniveisity'key='FanHui'result=''temp=cycle(key)forchinsource:result=result+chr(ord(ch)^ord(next(temp)))print(result)3)importstringpwd=input(‘inputapassword’)#密碼必須至少包含6個字符ifnotisinstance(pwd,str)orlen(pwd)<6:return'notsuitableforpassword'#密碼強度等級與包含字符種類的對應關系d={1:'weak',2:'belowmiddle',3:'abovemiddle',4:'strong'}#分別用來標記pwd是否含有數(shù)字、小寫字母、大寫字母和指定的標點符號r=[False]*4forchinpwd:#是否包含數(shù)字ifnotr[0]andchinstring.digits:r[0]=True#是否包含小寫字母elifnotr[1]andchinstring.ascii_lowercase:r[1]=True#是否包含大寫字母elifnotr[2]andchinstring.ascii_uppercase:r[2]=True#是否包含指定的標點符號elifnotr[3]andchin',.!;?<>':r[3]=True#統(tǒng)計包含的字符種類,返回密碼強度result=d.get(r.count(True),'error')4)origin='''Beautifulisbetterthanugly.\Explicitisbetterthanimplicit.\Simpleisbetterthancomplex.\Complexisbetterthancomplicated.\Flatisbetterthannested.'''print("原始字符串:",origin)userInput=input("請按照原始字符串輸入:")iflen(origin)<len(userInput):print("輸入字符串和原始字符串長度不一致!")#精確匹配的字符個數(shù)right=sum(1foroc,ucinzip(origin,userInput)ifoc==uc)rate=right/len(origin)print("正確率為:{}%".format(round(rate*100,2)))實驗四函數(shù)的編寫和使用一、實驗目的和要求熟悉并掌握函數(shù)的定義和調用理解函數(shù)形參和實參的含義,能夠正確設置形參類型理解隱含函數(shù)lambda二、實驗內容輸出“水仙花數(shù)”。所謂水仙花數(shù)是指1個3位的十進制數(shù),其各位數(shù)字的立方和等于該數(shù)本身。例如:153是水仙花數(shù),因為153=13+53+33。請使用函數(shù)式編程+內置函數(shù)來實現(xiàn)。把列表中的所有數(shù)字都加5,得到新列表。請使用函數(shù)實現(xiàn)。計算兩點間曼哈頓距離。判斷密碼強度,數(shù)字、小寫字母、大寫字母和指定的標點符號,分別對應weak、belowmiddle、abovemiddle、strong。編寫函數(shù),求任意一個數(shù)的立方根。三、實驗儀器、設備計算機、安裝有anaconda。四、實驗原理1)def定義函數(shù)2)函數(shù)名參數(shù)后面添加:表示函數(shù)體開始3)利用縮進表示函數(shù)體4)函數(shù)內參數(shù)為局部變量五、實驗步驟1)啟動jupyternotebook2)單擊【new】按鈕。3)輸入程序。3)使用【run】按鈕執(zhí)行程序。六、實驗注意事項函數(shù)的正確縮進。Lambda函數(shù)的定義和實現(xiàn)。函數(shù)內變量的作用域。七、實驗報告要求實驗報告以電子文檔形式提交。實驗報告主要內容:完成要求的程序編寫,提交源代碼和運行結果。八、實驗成績考核(黑體、小四號、加粗、行距1.5倍縮進兩個字符)(百分制)參考程序1)defsxh():fornuminrange(100,1000):r=map(lambdax:int(x)**3,str(num))ifsum(r)==num:print(num)2)defadd5(alist):return[i+5foriinalist]3)defmanhattanDistance(x,y):returnsum(map(lambdai,j:abs(i-j),x,y))print(manhattanDistance([1,2],[3,4]))print(manhattanDistance([1,2,3],[4,5,6]))print(manhattanDistance([1,2,3,4],[5,6,7,8]))4)defcheck(pwd):#密碼強度等級與包含字符種類的對應關系d={1:'weak',2:'belowmiddle',3:'abovemiddle',4:'strong'}#分別用來標記pwd是否含有數(shù)字、小寫字母、大寫字母和指定的標點符號r=[False]*4forchinpwd:ifnotr[0]andchinstring.digits:r[0]=Trueelifnotr[1]andchinstring.ascii_lowercase:r[1]=Trueelifnotr[2]andchinstring.ascii_uppercase:r[2]=Trueelifnotr[3]andchin',.!;?<>':r[3]=True#統(tǒng)計包含的字符種類,返回密碼強度returnd.get(r.count(True),'error')5)defcbrt(x): ifx==0.0: return0.0 x1=x whileTrue: x2=(2.0*x1+x/x1/x1)/3 ifabs((x2-x1)/x1)<0.001: returnx2 x1=x2實驗五類的設計一、實驗目的和要求熟悉并掌握類的編寫過程理解類中成員的含義二、實驗內容系統(tǒng)中的用戶分類非常復雜,不同用戶組具有不同的行為和權限,并且可能會經(jīng)常改變,管理非常困難。這時候我們可以獨立地定義一些行為,然后根據(jù)需要來為不同的用戶設置相應的行為能力。請設計一個Person類,完成sing()、walk()、eat()等行為。現(xiàn)有一個基類Animal,其中有一個方法show(),請使用多態(tài)性方法,實現(xiàn)Cat、Dog、Tiger中的show()方法。編寫一個隊列類myQueue,完成隊列的初始化、刪除、入隊和出隊等操作。三、實驗儀器、設備計算機、安裝有ananconda系統(tǒng)四、實驗原理 1)使用jupyternotebook來編寫類的Python程序2)執(zhí)行類的Python程序3)根據(jù)提示信息判斷程序中類的使用錯誤修改程序得出正確的結果五、實驗步驟1)啟動jupyternotebook2)單擊【new】按鈕。3)輸入程序。3)使用【run】按鈕執(zhí)行程序。六、實驗注意事項使用jupyternotebook輸入源代碼。熟悉類的語法結構。當出現(xiàn)錯誤腳本會停止在錯誤行上,修正錯誤后,重新運行腳本。七、實驗報告要求實驗報告以電子文檔形式提交。實驗報告主要內容:完成要求的程序編寫,提交源代碼和運行結果。八、實驗成績考核(黑體、小四號、加粗、行距1.5倍縮進兩個字符)(百分制)參考程序:1)importtypesclassPerson(object):def__init__(self,name):assertisinstance(name,str),'namemustbestring'=namedefsing(self): print(+'cansing.')defwalk(self): print(+'canwalk.') defeat(self): print(+'caneat.')2)classAnimal(object):#定義基類defshow(self):print('Iamananimal.')classCat(Animal):#派生類,覆蓋了基類的show()方法defshow(self):print('Iamacat.')classDog(Animal):#派生類defshow(self):print('Iamadog.')classTiger(Animal):#派生類defshow(self):print('Iamatiger.')classTest(Animal):#派生類,沒有覆蓋基類的show()方法passx=[item()foritemin(Animal,Cat,Dog,Tiger,Test)]foriteminx:#遍歷基類和派生類對象并調用show()方法item.show()3)classmyDeque:#構造方法,默認隊列大小為10def__init__(self,iterable=None,maxlen=10):ifiterable==None:self._content=[]self._current=0else:self._content=list(iterable)self._current=len(iterable)self._size=maxlenifself._size<self._current:self._size=self._current#析構方法def__del__(self):delself._content#修改隊列大小defsetSize(self,size):ifsize<self._current:#如果縮小隊列,需要同時刪除后面的元素foriinrange(size,self._current)[::-1]:#逆序delself._content[i]self._current=sizeself._size=size#在右側入隊defappendRight(self,v):ifself._current<self._size:self._content.append(v)self._current=self._current+1else:print('Thequeueisfull')#在左側入隊defappendLeft(self,v):ifself._current<self._size:self._content.insert(0,v)self._current=self._current+1else:print('Thequeueisfull')#在左側出隊defpopLeft(self):ifself._content:self._current=self._current-1returnself._content.pop(0)else:print('Thequeueisempty')#在右側出隊defpopRight(self):ifself._content:self._current=self._current-1returnself._content.pop()else:print('Thequeueisempty')#循環(huán)移位defrotate(self,k):ifabs(k)>self._current:print('kmust<='+str(self._current))returnself._content=self._content[-k:]+self._content[:-k]#元素翻轉defreverse(self):self._content=self._content[::-1]#顯示當前隊列中元素個數(shù)def__len__(self):returnself._current#使用print()打印對象時,顯示當前隊列中的元素def__str__(self):return'myDeque('+str(self._content)+',maxlen='+str(self._size)+')'#直接對象名當做表達式時,顯示當前隊列中的元素__repr__=__str__#隊列置空defclear(self):self._content=[]self._current=0#測試隊列是否為空defisEmpty(self):returnnotself._content#測試隊列是否已滿defisFull(self):returnself._current==self._sizeif__name__=='__main__':print('Pleaseusemeasamodule.')實驗六文件的操作和使用一、實驗目的和要求掌握文件的定義、操作和使用能夠正確使用文件來獲取和存儲數(shù)據(jù)二、實驗內容遞歸遍歷指定文件夾下的子文件夾和文件。編寫程序,遞歸刪除指定文件夾中指定類型的文件。編寫程序,進行文件夾增量備份。三、實驗儀器、設備計算機、安裝有ananconda系統(tǒng)四、實驗原理 1)使用jupyternotebook來編寫類的Python程序2)執(zhí)行類的Python程序3)根據(jù)提示信息判斷程序中類的使用錯誤修改程序得出正確的結果五、實驗步驟1)啟動jupyternotebook2)單擊【new】按鈕。3)輸入程序。3)使用【run】按鈕執(zhí)行程序。六、實驗注意事項使用jupyternotebook輸入源代碼。熟悉文件的操作語法。當出現(xiàn)錯誤腳本會停止在錯誤行上,修正錯誤后,重新運行腳本。七、實驗報告要求實驗報告以電子文檔形式提交。實驗報告主要內容:完成要求的程序編寫,提交源代碼和運行結果。八、實驗成績考核(黑體、小四號、加粗、行距1.5倍縮進兩個字符)(百分制)參考程序:1)fromosimportlistdirfromos.pathimportjoin,isfile,isdirdeflistDirDepthFirst(directory):#遍歷文件夾,如果是文件就直接輸出,如果是文件夾,就輸出顯示,然后遞歸遍歷該文件夾forsubPathinlistdir(directory):path=join(directory,subPath)print(path)ifisdir(path):listDirDepthFirst(path)2)fromos.pathimportisdir,join,splitextfromosimportremove,listdirimportsysfiletypes=['.tmp','.log','.obj','.txt']#指定要刪除的文件類型defdelCertainFiles(directory):ifnotisdir(directory):returnforfilenameinlistdir(directory):temp=join(directory,filename)ifisdir(temp):delCertainFiles(temp)elifsplitext(temp)[1]infiletypes:#檢查文件類型remove(temp)print(temp,'deleted....')3)importosimportfilecmpimportshutilimportsysdefautoBackup(scrDir,dstDir):if((notos.path.isdir(scrDir))or(notos.path.isdir(dstDir))or(os.path.abspath(scrDir)!=scrDir)or(os.path.abspath(dstDir)!=dstDir)):usage()foriteminos.listdir(scrDir):scrItem=os.path.join(scrDir,item)dstItem=scrItem.replace(scrDir,dstDir)ifos.path.isdir(scrItem):#創(chuàng)建新增的文件夾,保證目標文件夾的結構與原始文件夾一致ifnotos.path.exists(dstItem):os.makedirs(dstItem)print('makedirectory'+dstItem)#遞歸調用自身函數(shù)autoBackup(scrItem,dstItem)elifos.path.isfile(scrItem):#只復制新增或修改過的文件if((notos.path.exists(dstItem))or(notfilecmp.cmp(scrItem,dstItem,shallow=False))):shutil.copyfile(scrItem,dstItem)print('file:'+scrItem+'==>'+dstItem)defusage():print('scrDiranddstDirmustbeexistingabsolutepathofcertaindirectory')print('Forexample:{0}c:\\olddirc:\\newdir'.format(sys.argv[0]))sys.exit(0)if__name__=='__main__':iflen(sys.argv)!=3:usage()scrDir,dstDir=sys.argv[1],sys.argv[2]autoBackup(scrDir,dstDir)實驗七異常處理一、實驗目的和要求掌握Python的異常處理結構能夠獨立編寫異常處理程序二、實驗內容編寫函數(shù)模擬猜數(shù)游戲。系統(tǒng)隨機產(chǎn)生一個數(shù),并且指定玩家最多可以猜的次數(shù),系統(tǒng)會根據(jù)玩家的猜測進行提示,玩家則可以根據(jù)系統(tǒng)的提示對下一次的猜測進行適當調整。用戶輸入若干個分數(shù),求所有分數(shù)的平均分。每輸入一個分數(shù)后詢問是否繼續(xù)輸入下一個分數(shù),回答“yes”就繼續(xù)輸入下一個分數(shù),回答“no”就停止輸入分數(shù)。請使用異常處理機制來編寫程序編寫自定義異常類,完成對異常信息的記錄,將異常信息寫入到app_log_file.txt文件中。三、實驗儀器、設備計算機、安裝有ananconda系統(tǒng)四、實驗原理 1)使用jupyternotebook來編寫異常處理的Python程序2)執(zhí)行Python程序3)根據(jù)提示信息判斷程序中的使用錯誤修改程序得出正確的結果五、實驗步驟1)啟動jupyternotebook2)單擊【new】按鈕。3)輸入程序。4)使用【run】按鈕執(zhí)行程序。六、實驗注意事項使用jupyternotebook輸入源代碼。熟悉文件的操作語法。當出現(xiàn)錯誤腳本會停止在錯誤行上,修正錯誤后,重新運行腳本。七、實驗報告要求實驗報告以電子文檔形式提交。實驗報告主要內容:完成要求的程序編寫,提交源代碼和運行結果。八、實驗成績考核(黑體、小四號、加粗、行距1.5倍縮進兩個字符)(百分制)參考程序:1)fromrandomimportrandintdefguess(maxValue=100,maxTimes=5):value=randint(1,maxValue)#隨機生成一個整數(shù)foriinrange(maxTimes):prompt='StarttoGUESS:'ifi==0else'Guessagain:'try:#使用異常處理結構,防止輸入不是數(shù)字的情況x=int(input(prompt))except:print('YouMustinputanintegerbetween1and',maxValue)else:ifx==value:#猜對了print('Congratulations!')breakelifx>value:print('Toobig')else:print('Toolittle')else:#次數(shù)用完還沒猜對,游戲結束,提示正確答案print('Gameover.FAIL.')print('Thevalueis',value)2)numbers=[]#使用列表存放臨時數(shù)據(jù)whileTrue:x=input('請輸入一個成績:')try:#異常處理結構numbers.append(float(x))except:print('不是合法成績')whileTrue:flag=input('繼續(xù)輸入嗎?(yes/no)').lower()ifflagnotin('yes','no'):#限定用戶輸入內容必須為yes或noprint('只能輸入yes或no')else:breakifflag=='no':breakprint(“平均分是{0:.1f}”.format(sum(numbers)/len(numbers)))3)fromdatetimeimportdatetimeimporttraceback,sysclassMyException(Exception):logfile="c:\\app_log_file.txt"defdoLog(self):log=open(self.logfile,"wt")day=datetime.today()x=sys.exc_info()print("\n------出錯了------",file=log)print("\n日期時間:",day,file=log)log.write("\n異常類型:%s"%x[0].__name__)log.write("\n異常描述:%s"%x[1])print("\n堆棧跟蹤信息:",file=log)traceback.print_tb(self.args[1],file=log)#獲得堆棧跟蹤信息log.close()try:try:print(5/'0')exceptExceptionasex:raiseMyException(ex.args[0],ex.__traceback__)except(MyException)asex:ex.doLog()finally:print("程序執(zhí)行結束")實驗八數(shù)據(jù)可視化一、實驗目的和要求掌握折線圖的作用與繪制方法。掌握柱形圖的作用與繪制方法。掌握條形圖的作用與繪制方法。掌握散點圖的作用與繪制方法掌握氣泡圖的作用與繪制方法。掌握面積圖的作用與繪制方法。掌握雷達圖的繪制方法掌握三維曲面圖、三維散點圖的繪制方法掌握數(shù)學函數(shù)圖形的繪制方法掌握樹地圖的繪制方法實驗內容折線圖的繪制方法。柱形圖的繪制方法。條形圖的繪制方法。散點圖的繪制方法氣泡圖的繪制方法。面積圖的繪制方法。雷達圖的繪制方法三維曲面圖、三維散點圖的繪制方法數(shù)學函數(shù)圖形的繪制方法樹地圖的繪制方法三、實驗儀器、設備計算機、安裝有ananconda系統(tǒng)四、實驗原理 1)使用jupyternotebook來編寫Python程序。2)導入matplotlib.pyplot和seaborn庫。3)使用seaborn和matplotlib庫提供的函數(shù)來編寫代碼。五、實驗步驟1)啟動jupyternotebook2)單擊【new】按鈕。3)輸入程序4)使用【run】按鈕執(zhí)行程序。六、實驗注意事項使用jupyternotebook輸入源代碼。在代碼第一行加入指令
%matplotlibinline,以確保圖形能夠在瀏覽器中顯示。如果要將圖形存盤,使用如下代碼:plt.savefig(r"d:\test2.jpg",dpi=1000,bbox_inches='tight',pad_inches=0)。七、實驗報告要求實驗報告以電子文檔形式提交。實驗報告主要內容:完成要求的程序編寫,提交源代碼和運行結果。八、實驗成績考核(黑體、小四號、加粗、行距1.5倍縮進兩個字符)(百分制)數(shù)學函數(shù)圖形的繪制1)初等函數(shù)繪圖代碼:importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['KaiTi']#SIMHei黑體plt.rcParams['axes.unicode_minus']=False#正常顯示圖中負號plt.figure(figsize=(15,4))#設置畫布大小fig,ax=plt.subplots(2,2,figsize=(15,12))#一個繪制4個圖形importmathx=np.linspace(0,2*math.pi);ax[0,0].plot(x,np.sin(x),c='red',linestyle='--');ax[0,1].plot(x,np.cos(x))ax[1,0].plot(x,np.log(x))ax[1,1].plot(x,np.exp(x))plt.show()運行截圖:2)極坐標圖形的繪制代碼:#根據(jù)函數(shù)式的基本繪圖,在直角坐標下可使用參數(shù)方法:#(x/a)^2+(y/b)^2=1等價于x=asin(c),y=bcos(c),(0<c<2*pi)#其圖形繪制方法如下importnumpyimportmathimportmatplotlib.pyplotaspltt=numpy.linspace(0,2*math.pi)x=2*numpy.sin(t)y=2*numpy.cos(t)plt.plot(x,y)plt.text(0,0,r'$\frac{x^2}{2}+\frac{y^2}{3}=1$',fontsize=20);plt.show()運行截圖:2.繪制折線圖代碼:importnumpyasnpimportmathimportmatplotlib.pyplotasplt#折線圖常用于表示隨著時間的推某指標的變化趨勢,使用的是plt庫中的plot方法。#plot方法的具體參數(shù)如下:#plt.plot(x,y,color,linestyle,linewidth,marker,markeredgeclor,markeredgwidth,markerfacecolor,markersize,label)#其中,參數(shù)x,y分別表示x軸和y軸的數(shù)據(jù);color表示折線圖的顏色,linestyle表示顯得風格,linewith表示線的寬度。#繪制某公司1-9月份注冊用戶量的折線圖。plt.subplot(1,1,1)#建立一個坐標系x=np.array([1,2,3,4,5,6,7,8,9])#指定x值y=np.array([886,2335,5710,6482,6120,1605,3813,4428,4631])plt.plot(x,y,color='r',linestyle='dashdot',linewidth=1,marker='o',markersize=5,label='注冊用戶數(shù)')#繪圖plt.title('某公司1-9月注冊用戶量',loc='center')#設置標題名及標題的位置#添加數(shù)據(jù)標簽fora,binzip(x,y):plt.text(a,b,b,ha='center',va='bottom',fontsize=10)plt.grid(True)#設置網(wǎng)格線plt.legend()#設置圖例,調用顯示出plot的labelplt.show()plt.savefig(r'C:\Users\Administrator\Desktop\8.1.jpg')#保存到本地運行截圖:3.繪制柱形圖代碼:importnumpyasnpimportmathimportmatplotlib.pyplotaspltfrompylabimport*mpl.rcParams['font.sans-serif']=['SimHei']#柱形圖常用于比較不同類別之間的數(shù)據(jù)情況,使用的是plt庫中的bar方法。#bar方法實現(xiàn)如下:#plt.bar(x,height,width=0.8,bottom=None,align='center',color,edgecolor)#其中,height表示每根柱子的高度,width表示每根柱子的寬度,bottom表示每根柱子的底部位置,每根柱子的底部位置讀可以一樣,也可以不一樣;#align表示柱子的位置與x值得關系,有center、edge兩個參數(shù)可選,center表示柱子位于x值得中心位置,edge表示柱子位于x值的邊緣位置;color表示顏色;edgecolor表示柱子邊緣的顏色#繪制一張全國各分區(qū)任務量的普通柱形圖plt.subplot(1,1,1)#建立一個坐標系x=np.array(['東區(qū)','北區(qū)','南區(qū)','西區(qū)'])y=np.array([8566,6482,5335,7310])plt.bar(x,y,width=0.5,align='center',label='任務量',color=['r','g','b','k'])#繪圖plt.title('全國各分區(qū)任務量',loc='center')#設置標題fora,binzip(x,y):plt.text(a,b,b,ha='center',va='bottom',fontsize=10)#添加數(shù)據(jù)標簽plt.xlabel('分區(qū)')#設置x軸坐標plt.ylabel('任務量')#設置y軸坐標plt.legend()#顯示圖例plt.show()#簇狀柱形圖常用來表示不同類別隨著同一變量的變化情況,使用的同樣是plt庫中的bar方法,只不過需要調整柱子的顯示位置。#如繪制全國各分區(qū)任務量和完成量的簇狀圖形圖。plt.subplot(1,1,1)#建立一個坐標系x=np.array([1,2,3,4])y1=np.array([8566,6482,5335,7310])#任務量y2=np.array([4283,2667,3655,3241])#任務量plt.bar(x,y1,width=0.3,label='任務量')#柱形圖的寬度為0.3plt.bar(x+0.3,y2,width=0.3,label='完成量')#x+0.3相當于把完成量的每個柱子右移動0.3plt.title('全國各分區(qū)任務量',loc='center')#設置標題fora,binzip(x,y1):plt.text(a,b,b,ha='center',va='bottom',fontsize=12)#添加數(shù)據(jù)標簽fora,binzip(x+0.3,y2):plt.text(a,b,b,ha='center',va='bottom',fontsize=12)#添加數(shù)據(jù)標簽plt.xlabel('分區(qū)')#設置x軸坐標plt.ylabel('任務情況')#設置y軸坐標#設置x軸刻度值plt.xticks(x+0.15,['東區(qū)','南區(qū)','西區(qū)','北區(qū)'])#設置網(wǎng)格線plt.grid(False)plt.legend()#顯示圖例plt.show()#堆積柱形圖實例#堆積柱形圖常用來比較同類別各變量和不同類別變量的總和差異,使用的同樣是plt庫中的bar方法,只要在相同的x位置繪制不同的y,y就會自動疊加。#如,繪制全國各分區(qū)任務量和完成量的堆積柱形圖plt.subplot(1,1,1)#建立一個坐標系x=np.array([1,2,3,4])y1=np.array([8566,6482,5335,7310])#任務量y2=np.array([4283,2667,3655,3241])#任務量plt.bar(x,y1,width=0.3,label='任務量')plt.bar(x,y2,width=0.3,label='完成量')plt.title('全國各分區(qū)任務量和完成量',loc='center')#設置標題fora,binzip(x,y1):plt.text(a,b,b,ha='center',va='top',fontsize=12)#添加數(shù)據(jù)標簽fora,binzip(x,y2):plt.text(a,b,b,ha='center',va='bottom',fontsize=12)#添加數(shù)據(jù)標簽plt.xlabel('分區(qū)')#設置x軸坐標plt.ylabel('任務情況')#設置y軸坐標#設置x軸刻度值plt.xticks(x,['東區(qū)','南區(qū)','西區(qū)','北區(qū)'])#設置網(wǎng)格線plt.grid(False)plt.legend(loc='uppercenter',ncol=2)#顯示圖例plt.show()運行截圖:4.條形圖代碼:importnumpyasnpimportmathimportmatplotlib.pyplotaspltfrompylabimport*mpl.rcParams['font.sans-serif']=['SimHei']#條形圖與柱形圖類似,只不過是將柱形圖的x軸和y軸進行了調換,縱向柱形圖變成了橫向柱形圖,使用plt庫中的barth方法。#barth方法如下所示:#plt.barth(y,width,height,align,color,edgecolor)#barth方法的參數(shù)及說明如下表:#width表示柱子的寬度#height表示柱子的高度#align表示柱子的對齊方式#color表示顏色#edgeclolor表示柱子邊緣顏色#繪制全國各分區(qū)任務量的條形圖plt.subplot(1,1,1)#建立一個坐標系x=np.array(['東區(qū)','北區(qū)','南區(qū)','西區(qū)'])y=np.array([8566,6482,5335,7310])plt.barh(x,height=0.5,width=y,align='center',color=['r','g','b','k'])#繪圖plt.title('全國各分區(qū)任務量',loc='center')#設置標題fora,binzip(x,y):plt.text(b,a,b,ha='center',va='bottom',fontsize=12)#添加數(shù)據(jù)標簽plt.ylabel('分區(qū)')#設置y軸坐標plt.xlabel('任務量')#設置x軸坐標plt.grid(False)#不要網(wǎng)格線plt.show()運行截圖:實驗九數(shù)據(jù)分析一、實驗目的和要求熟悉Python標準庫csv的用法。熟悉使用Python擴展庫pandas進行數(shù)據(jù)分析的基本操作。熟悉CSV和TXT文件操作。二、實驗內容(1)運行下面的程序,在d:\文件夾中生成飯店營業(yè)額模擬數(shù)據(jù)文件data.csv。importcsvimportrandomimportdatetimefn=r'd:\data.csv'withopen(fn,'w',newline="")asfp:#創(chuàng)建csv文件寫入對象wr=csv.writer(fp)#寫入表頭wr.writerow(['日期','銷量'])#生成模擬數(shù)據(jù)startDate=datetime.date(2020,1,1)#生成200個模擬數(shù)據(jù)foriinrange(200):#生成一個模擬數(shù)據(jù),寫入csv文件amount=200+i*5+random.randrange(100)wr.writerow([str(startDate),amount])#生產(chǎn)下一天數(shù)據(jù)startDate=startDate+datetime.timedelta(days=1)2)然后完成下面的任務:使用pandas讀取文件data.csv中的數(shù)據(jù),創(chuàng)建DataFrame對象,并刪除其中所有缺失值;使用matplotlib生成折線圖,反應該飯店每天的營業(yè)額情況,并把圖形保存為本地文件first.jpg;按月份進行統(tǒng)計,使用matplotlib繪制柱狀圖顯示每個月份的營業(yè)額,并把圖形保存為本地文件second.jpg;按月份進行統(tǒng)計,找出相鄰兩個月最大漲幅,并把漲幅最大的月份寫入文件maxMonth.txt;按季度統(tǒng)計該飯店2020年的營業(yè)額數(shù)據(jù),使用matplotlib生成餅狀圖顯示2020年4個季度的營業(yè)額分布情況,并把圖形保存為本地文件third.jpg。三、實驗儀器、設備計算機、安裝有ananconda系統(tǒng)四、實驗原理 1)使用jupyternotebook來編寫Python程序2)執(zhí)行Python程序3)根據(jù)提示信息判斷程序中的使用錯誤4)修改程序5)得出正確的結果五、實驗步驟1)啟動jupyternotebook2)單擊【new】按鈕。3)輸入程序。4)使用【run】按鈕執(zhí)行程序。六、實驗注意事項使用jupyternotebook輸入源代碼。熟悉函數(shù)的使用。當出現(xiàn)錯誤腳本會停止在錯誤行上,修正錯誤后,重新運行腳本。七、實驗報告要求實驗報告以電子文檔形式提交。實驗報告主要內容:完成要求的程序編寫,提交源代碼和運行結果。八、實驗成績考核(黑體、小四號、加粗、行距1.5倍縮進兩個字符)(百分制)參考程序:%matplotlibinlineimportpandasaspdimportmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=False#讀取數(shù)據(jù),刪除缺失值df=pd.read_csv(r'd:\data.csv',encoding='cp936')df=df.dropna()#生成營業(yè)額折線圖plt.figure()df.plot(x=df['日期'])plt.savefig('first.jpg')#按月統(tǒng)計,生成柱狀圖plt.figure()df1=df[:]df1['month']=df1['日期'].map(lambdax:x[:x.rindex('-')])df1=df1.groupby(by='month',as_index=False).sum()df1.plot(x=df1['month'],kind='bar')plt.savefig('second.jpg')#查找漲幅最大的月份,寫入文件df2=df1.drop('month',axis=1).diff()m=df2['銷量'].nlargest(1).keys()[0]withopen(r'd:\maxMonth.txt','w')asfp:fp.write(df1.loc[m,'month'])#按季度統(tǒng)計,生成餅狀圖plt.figure()one=df1[:3]['銷量'].sum()two=df1[3:6]['銷量'].sum()three=df1[6:9]['銷量'].sum()four=df1[9:12]['銷量'].sum()plt.pie([one,two,three,four],labels=['one','two','three','four'])plt.savefig('third.jpg')實驗十網(wǎng)絡爬蟲設計一、實驗目的和要求掌握requests、lxml庫的使用掌握多線程爬蟲系統(tǒng)設計掌握爬蟲系統(tǒng)設計過程二、實驗內容使用多線程爬蟲(Q房爬蟲實例)爬取目標網(wǎng)站是深圳Q房網(wǎng)(/)三、實驗儀器、設備計算機、安裝有ananconda系統(tǒng)四、實驗原理 1)使用jupyternotebook來編寫Python程序2)導入requests、lxml、multiprocessing.dummy庫3)按照頁面HTML內容分析、編寫爬蟲代碼、提取信息存盤步驟來設計程序五、實驗步驟1)啟動jupyternotebook2)單擊【new】按鈕。3)輸入程序。4)使用【run】按鈕執(zhí)行程序。六、實驗注意事項使用jupyternotebook輸入源代碼。熟悉爬蟲庫的操作語法。當出現(xiàn)錯誤腳本會停止在錯誤行上,修正錯誤后,重新運行腳本。七、實驗報告要求實驗報告以電子文檔形式提交。實驗報告主要內容:完成要求的程序編寫,提交源代碼和運行結果。八、實驗成績考核(黑體、小四號、加粗、行距1.5倍縮進兩個字符)(百分制)參考程序:#coding:utf-8##使用多線程爬蟲(Q房爬蟲實例)###說明:爬取目標網(wǎng)站是深圳Q房網(wǎng)(/)###1)頁面分析(分析頁面特點和URL構造規(guī)律)###2)編寫爬蟲代碼###3)保存爬取到的信息####本示例演示多層頁面的爬蟲和使用函數(shù)組織代碼#"""首先導入requests庫和lxml庫。我們準備把爬取的數(shù)據(jù)保存為CSV格式,因此還需要導入csv模塊。為了控制爬取速度,還需要導入time模塊??刂婆廊∷俣鹊哪康闹饕欠乐贡籕房網(wǎng)站的服務器反爬蟲。為了提高爬取速度,使用多線程技術,因此需要導入multiprocessing.dummy庫"""importrequestsfromlxmlimportetreeimportcsvimporttimefrommultiprocessing.dummyimportPoolasplpre_url="/sale/f"#為防止被WEB服務器反爬蟲禁止,定義一個頭部headersheaders={"user-agent":"Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/63.0.3239.132Safari/537.36"}#cookies具有一定的時效性,需要使用最新的cookiescookies="""acw_tc=db90631615547077210513243e12071b450b0885c180a9d3ef34797998;qchatid=75762117-5c92-46d8-9f52-0af0199e9b1b;__guid=29133566.2612920276169135600.1554707722539.75;_ga=GA1.3.59492559.1554707726;WINDOW_DEVICE_PIXEL_RATIO=1;CITY_NAME=SHENZHEN;sid=21761161-2b38-4ffb-a956-395898cb18f8;language=SIMPLIFIED;JSESSIONID=aaa-RFGCNMtCo8R_mJfQw;_qzjc=1;_jzqc=1;_jzqckmp=1;_gid=GA1.3.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025企業(yè)新人試用期勞動合同
- 2025購房轉讓合同模板
- 河南省南陽完全學校2024~2025學年 高三第三次調研測試數(shù)學試卷附解析
- 2025屆江蘇省揚州市儀征市中考二模數(shù)學試卷
- 2024河南公務員考試行測真題(省直)
- 石大學前兒童保育學課外必讀:幼兒園游戲安全防護
- 2025年人工智能培訓師試題
- 初一學生數(shù)學元認知策略水平的現(xiàn)狀及其培養(yǎng)研究
- 自動化運輸與貨物標簽識別技術-洞察闡釋
- 數(shù)字藝術服務與用戶交互-洞察闡釋
- 磚廠安全生產(chǎn)管理制度
- 醫(yī)院設備采購預算編制要點
- 汽車尾氣治理技術
- 新教師科研能力提升措施
- 《現(xiàn)代農(nóng)業(yè)生物技術育種方法》課件
- 企業(yè)慈善捐贈指引
- 部編版四年級道德與法治上冊第8課《網(wǎng)絡新世界》
- 房地產(chǎn)開發(fā)項目風險評估報告
- 2025年廣東中考物理學科模擬試卷(廣東專屬)
- 【物理】《滑輪》(教學設計)-2024-2025學年人教版(2024)初中物理八年級下冊
- 2025年國能新疆化工有限公司招聘筆試參考題庫含答案解析
評論
0/150
提交評論