數(shù)據(jù)科學第三章:python語言基礎-1112-v2_第1頁
數(shù)據(jù)科學第三章:python語言基礎-1112-v2_第2頁
數(shù)據(jù)科學第三章:python語言基礎-1112-v2_第3頁
數(shù)據(jù)科學第三章:python語言基礎-1112-v2_第4頁
數(shù)據(jù)科學第三章:python語言基礎-1112-v2_第5頁
已閱讀5頁,還剩105頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

內(nèi)容提綱講課內(nèi)容3.1Python語言概述3.2Python的基本用法3.3重要庫的使用方法與案例重點難點掌握基本的Python語言使用方法具有基本的Python程序設計與開發(fā)能力

3.1Python語言概述3.1Python語言概述3.1.1Python語言簡介3.1.2Python語言語言環(huán)境搭建

3.1.1Python語言簡介

什么是PythonPython是一種解釋型語言,在Python開發(fā)過程沒有編譯的環(huán)節(jié)。Python是交互式語言,可以在Python交互界面直接執(zhí)行代碼。Python是面向對象語言,Python支持面向對象的風格或代碼封裝在對象的編程技術。3.1.1Python語言簡介Python的發(fā)展歷史Python是由GuidovanRossum在八十年代末和九十年代初,在荷蘭國家數(shù)學和計算機科學研究所設計出來的。Python本身也是由諸多其他語言發(fā)展而來的,這包括ABC、Modula-3、C、C++、Algol-68、SmallTalk、Unixshell和其他的腳本語言等等。像Perl語言一樣,Python源代碼同樣遵循GPL(GNUGeneralPublicLicense)協(xié)議。現(xiàn)在Python是由一個核心開發(fā)團隊在維護,GuidovanRossum仍然占據(jù)著至關重要的作用,指導其進展。

3.1.1Python語言簡介Python的特點簡單易學免費、開源可移植性為什么使用PythonPython提供了很多的重要庫,包括:Numpy、Pandas、Matplotlib、Scipy、scikit-learn等。這些庫為Python提供了數(shù)值計算需要的多種的數(shù)據(jù)結構、算法、接口;同時還提供了多種的機器學習庫函數(shù)以及用于制圖和可視化用的必備操作等等,這使得Pyhon使用方便,也因此成為了解決數(shù)據(jù)挖掘、數(shù)據(jù)分析和機器學習問題的必備工具。

3.1.1Python語言簡介Python基礎語法概述Python標識符在Python里,標識符有字母、數(shù)字、下劃線組成。在Python中,標識符不能以數(shù)字開頭。Python中的標識符是區(qū)分大小寫的。下劃線開頭的標識符是有特殊意義的。Python有五種標準的數(shù)據(jù)類Numbers(數(shù)字)String(字符串)List(列表)

Tuple(元組)Dictionary(字典)

3.1.1Python語言簡介Python基礎語法概述List(列表)是Python中使用最頻繁的數(shù)據(jù)類型。列表可以完成大多數(shù)集合類的數(shù)據(jù)結構實現(xiàn)。列表支持字符,數(shù)字,字符串甚至可以包含列表(即嵌套)。列表用[]標識,是python最通用的復合數(shù)據(jù)類型。列表中值的切割也可以用到變量[頭下標:尾下標],就可以截取相應的列表,從左到右索引默認0開始,從右到左索引默認-1開始,下標可以為空表示取到頭或尾。加號+是列表連接運算符,星號*是重復操作。

3.1.1Python語言簡介Python基礎語法概述元組是另一個數(shù)據(jù)類型,類似于List(列表)。元組用”()”標識。內(nèi)部元素用逗號隔開。但是元組不能二次賦值,相當于只讀列表。字典(dictionary)是除列表以外Python之中最靈活的內(nèi)置數(shù)據(jù)結構類型。列表是有序的對象結合,字典是無序的對象集合。兩者之間的區(qū)別在于:字典當中的元素是通過鍵來存取的,而不是通過偏移存取。字典用”{}”標識。字典由索引(key)和它對應的值value組成。

3.1.1Python語言簡介Python基礎語法概述Python數(shù)據(jù)類型轉換數(shù)據(jù)類型的轉換,只需要將數(shù)據(jù)類型作為函數(shù)名即可。以下幾個內(nèi)置的函數(shù)可以執(zhí)行數(shù)據(jù)類型之間的轉換。這些函數(shù)返回一個新的對象,表示轉換的值。int(x[,base]):將x轉換為一個整數(shù)long(x[,base]):將x轉換為一個長整數(shù)float(x):將x轉換到一個浮點數(shù)complex(real[,imag]):創(chuàng)建一個復數(shù)str(x)將對象x轉換為字符串repr(x):將對象x轉換為表達式字符串eval(str):用來計算在字符串中的有效Python表達式,并返回一個對象

3.1.1Python語言簡介Python數(shù)據(jù)類型轉換tuple(s):將序列s轉換為一個元組list(s):將序列s轉換為一個列表set(s):轉換為可變集合dict(d):創(chuàng)建一個字典,d必須是一個序列(key,value)元組frozenset(s):轉換為不可變集合chr(x):將一個整數(shù)轉換為一個字符unichr(x):將一個整數(shù)轉換為Unicode字符ord(x):將一個字符轉換為它的整數(shù)值hex(x)將一個整數(shù)轉換為一個十六進制字符串oct(x)將一個整數(shù)轉換為一個八進制字符串

3.1.1Python語言簡介Python基礎語法概述Python運算符算術運算符比較(關系)運算符賦值運算符邏輯運算符位運算符成員運算符身份運算符

3.1.1Python語言簡介Python基礎語法概述算術運算符+:兩個對象相加-:得到負數(shù)或是一個數(shù)減去另一個數(shù)*:兩個數(shù)相乘或是返回一個被重復若干次的字符串x/y

:

-x除以%:取模,返回除法的余數(shù)x**y:冪,返回x的y次方//

:取整除-返回商的整數(shù)部分

3.1.1Python語言簡介Python基礎語法概述比較運算符==:等于,比較對象是否!=:不等于,比較兩個對象是否不相等<>:不等于,比較兩個對象是否不相等,這個運算符類似!=>:大于,返回x是否大于y<:小于-返回x是否小于y>=:大于等于,返回x是否大于等于y<=:小于等于-返回x是否小于等于y

3.1.1Python語言簡介Python基礎語法概述賦值運算符=:簡單的賦值運算符+=:加法賦值運算符-=:減法賦值運算符*=:乘法賦值運算符/=:除法賦值運算符%=:取模賦值運算符^=:冪賦值運算符//=:取整除賦值運算符

3.1.1Python語言簡介Python基礎語法概述位運算符&:按位與運算符:參與運算的兩個值,如果兩個相應位都為1,則該位的結果為1,否則為0^:按位異或運算符:當兩對應的二進位相異時,結果為1~:按位取反運算符:對數(shù)據(jù)的每個二進制位取反,即把1變?yōu)?,把0變?yōu)?<<:左移動運算符:運算數(shù)的各二進位全部左移若干位,由”<<”右邊的數(shù)指定移動的位數(shù),高位丟棄,低位補0>>:右移動運算符:把”>>”左邊的運算數(shù)的各二進位全部右移若干位,”>>”右邊的數(shù)指定移動的位數(shù)

3.1.1Python語言簡介Python基礎語法概述邏輯運算符and:xandy布爾”與”-如果x為False,xandy返回False,否則它返回y的計算值or:xory布爾”或”-如果x是非0,它返回x的值,否則它返回y的計算值not:notx布爾”非”-如果x為True,返回False。如果x為False,它返回True。not(aandb)返回False

3.1.1Python語言簡介Python基礎語法概述身份運算符is:is是判斷兩個標識符是不是引用自一個對象xisy,類似id(x)==id(y),如果引用的是同一個對象則返回True,否則返回Falseisnot:isnot是判斷兩個標識符是不是引用自不同對象xisnoty,類似id(a)!=id(b)。如果引用的不是同一個對象則返回結果True,否則返回False。注:is與==區(qū)別:is用于判斷兩個變量引用對象是否為同一個,==用于判斷引用變量的值是否相等。

3.1.2Python語言環(huán)境搭建Python語言環(huán)境搭建課后作業(yè):參照教材學習Python下載與安裝的步驟,熟悉常用的Python集成開發(fā)環(huán)境。

3.2Python的基本用法3.2Python的基本用法3.2.1列表與元組3.2.2字符串3.2.3字典3.2.4條件、循環(huán)語句3.2.5函數(shù)3.2.6文件

3.2.1列表與元組序列在Python中,最基本的數(shù)據(jù)結構為序列(sequence)。序列中的每個元素都有編號,即其位置或索引,其中第一個元素的索引為0,第二個元素的索引為1,依此類推。Python中有多種序列,但最常見的是列表和元組。列表和元組的主要不同在于,列表是可以修改的,而元組不可以。常用的序列操作索引、切片、序列相加、乘法、成員資格檢查等

3.2.1序列操作索引使用‘[]’表示索引,其中方框中的元素可以取正數(shù),但也可以使用負數(shù)索引。當使用負數(shù)索引時,表示從最后一個元素開始往左數(shù),取第-n個元素。【例3-2.1-1】In[1]:number_list=[0,1,2,3,4,5,6,7,8,9]In[2]:number_list[3]Out[2]:3In[3]:number_list[-1]Out[3]:9

3.2.1序列操作切片使用方括號的形式截取特定范圍內(nèi)的元素,這種操作稱為切片(slicing)。切片本質上是使用冒號間隔的兩個索引,其中第一個索引指定的元素包含在切片內(nèi),但第二個索引指定的元素不包含在切片內(nèi)?!纠?-2.1-2】同樣的,當要從列表末尾開始訪問元素時,可以使用負數(shù)索引?!纠?-2.1-3】In[4]:number_list=[0,1,2,3,4,5,6,7,8,9]In[5]:number_list[3:7]Out[5]:[3,4,5,6]In[6]:number_list[-3:-1]Out[6]:[7,8]

3.2.1序列操作加法可以使用加法運算符來拼接序列?!纠?-2.1-6】乘法將序列與數(shù)x相乘時,將重復這個序列x次來創(chuàng)建一個新序列?!纠?-2.1-7】In[11]:list1=[1,2,3]list2=[4,5,6]In[12]:list1+list2Out[12]:[1,2,3,4,5,6]In[13]:[1,2]*8Out[13]:[1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2]

3.2.1序列操作成員資格檢查可以通過in運算符來檢查特定的值是否包含在序列中。它檢查是否滿足指定的條件,并返回相應的值:滿足時返回True,不滿足時返回False?!纠?-2.1-8】In[14]:name_list=['Tom','Jerry','Mickey','Mike']In[15]:'Tom'inname_listOut[15]:TrueIn[16]:'Marry'inname_listOut[16]:False

3.2.1列表操作

列表修改元素賦值:使用索引法找到特定位置的元素,并使用賦值號=給元素賦值。但要注意,不能給超出列表長度范圍的元素賦值。【例3-2.1-9】In[17]:lst=[1,10,20,30,40]In[18]:lst[3]=35In[19]:lstOut[19]:[1,10,20,35,40]In[20]:lst[5]=50Out[20]:IndexError:listassignmentindexoutofrange

3.2.1列表操作

刪除元素:使用下標索引并結合del語句來刪除元素?!纠?-2.1-10】切片賦值:使用切片可以同時給多個元素賦值,并實現(xiàn)序列的長度改變。不僅如此,使用切片賦值還可以在不替換原有元素的情況下更新元素?!纠?-2.1-11】In[21]:lst=[1,10,20,30,40]In[22]:dellst[3]In[23]:lstOut[23]:[1,10,20,40]In[24]:number_list=[1,2,3,4,5,6]In[25]:number_list[2:]=[20,30,40]In[26]:number_listOut[26]:[1,2,20,30,40]In[27]:number_list[1:1]=[5,10,15]In[28]:number_listOut[28]:[1,5,10,15,2,20,30,40]

3.2.1列表方法方法所謂方法是通過在方法名前加上對象和句點來調用:object.method(arguments)。列表常用方法append()

:將一個對象附加到列表的末尾【例3-2.1-12】clear():用于清空列表中所有內(nèi)容【例3-2.1-13】In[31]:number_list.append(50)In[32]:number_listOut[32]:[1,2,20,30,40,50]In[33]:number_list.clear()In[34]:number_listOut[34]:[]

3.2.1列表方法copy():復制列表【例3-2.1-14】insert():將一個對象插入到列表中【例3-2.1-15】

In[35]:number_list=[1,2,3,4,5,6,7]In[36]:nl=number_list.copy()In[37]:number_list[3]=40In[37]:number_listOut[37]:[1,2,3,40,5,6,7]In[38]:nlOut[38]:[1,2,3,4,5,6,7]In[39]:number_list.insert(2,7)In[40]:number_listOut[40]:[1,2,7,3,40,5,6,7]3.2.1列表方法remove():刪除第一個為指定值的元素【例3-2.1-16】count():統(tǒng)計某個元素在列表中出現(xiàn)的次數(shù)【例3-2.1-17】

In[41]:sentence=['how','do','you','do']In[42]:sentence.remove('do')In[43]:sentenceOut[43]:['how','you','do']In[44]:['to','be','or','not','to','be'].count('to')Out[44]:23.2.1列表方法extend():在列表末尾一次性追加另一個序列中的多個值【例3-2.1-18】index():在列表中查找指定值第一次出現(xiàn)的索引【例3-2.1-19】In[45]:a1=['a','b','c']b1=['d','e','f']In[46]:a1.extend(b1)In[47]:a1Out[47]:['a','b','c','d','e','f']In[48]:sentence=['how','do','you','do']In[49]:sentence.index('do')In[50]:1In[51]:sentence.index('who')Out[52]:ValueError:'who'isnotinlist

3.2.1列表方法reverse():反向列表元素【例3-2.1-20】

In[53]:name=['M','i','c','k','e','y']In[54]:name.reverse()In[55]:nameOut[55]:['y','e','k','c','i','M']3.2.1元組特殊的列表-元組與列表一樣,元組也是序列,唯一的差別在于元組是不能修改的。元組語法很簡單,只要將一些值用逗號分隔,就能自動創(chuàng)建一個元組。元組并不太復雜,而且除創(chuàng)建和訪問其元素外,可對元組執(zhí)行的操作不多。元組的創(chuàng)建及其元素的訪問方式與其他序列相同。定義元組In[56]:1,2,3Out[56]:(1,2,3)In[57]:(1,2,3)Out[57]:(1,2,3)

3.2.2字符串字符串字符串是Python中最常用的數(shù)據(jù)類型。我們可以使用引號(‘’或“”)來創(chuàng)建字符串。創(chuàng)建字符串很簡單,只要為變量分配一個值即可?!纠?-2.2-1】字符串本身也是一種序列,Python訪問字符串可以下標索引以及方括號截取字符串。而字符串的更新、修改刪除等等都與列表的操作類似操作符描述+字符串連接*重復輸出字符串[]通過索引獲取字符串中字符[:]截取字符串中的一部分in如果字符串中包含給定的字符返回Truenotin如果字符串中不包含給定的字符返回True

3.2.2字符串方法字符串方法find():在字符串中查找子串,找到則返回子串的第一個字符的索引,否則返回-1,當出現(xiàn)返回值為0時說明恰巧在最開始處找到了指定的子串。同時還可以指定搜索范圍,第二個和第三個參數(shù)分別代表搜索的起點與終點,包含起點但不包含終點?!纠?-2.2-2至3】In[11]sentence='Actionsspeaklouderthanwords.'In[12]sentence.find('speak')Out[12]8In[13]sentence.find('pick')Out[13]-1In[14]sentence.find('Actions')Out[14]0In[15]sentence.find('s',3,10)Out[15]6

3.2.2字符串方法join():用于合并字符串,注意所有合并的序列元素都必須是字符串。【例3-2.2-4】split():將字符串按照分隔符拆分為序列。如果沒有指定分隔符,將默認在單個或多個連續(xù)的空白字符(空格、制表符、換行符等)處進行拆分?!纠?-2.2-5】In[16]:number_list=['1','2','3','4','5']In[17]add='+'In[18]:add.join(number_list)Out[18]'1+2+3+4+5'In[19]:'1+2+3+4+5'.split('+')Out[19]['1','2','3','4','5']In[20]:"IamastudentfromBUPT".split()Out[20]['I','am','a','student','from','BUPT']

3.2.2字符串方法字符串方法strip():將字符串開頭和末尾的空白(但不包括中間的空白)刪除,并返回刪除后的結果。【例3-2.2-6】lower():返回字符串的小寫版本。【例3-2.2-7】In[21]:"IamastudentfromBUPT".strip()Out[21]'IamastudentfromBUPT'In[22]:'*****!!!!!Somethingimportant!!!!!*****'.strip('*!')Out[22]'Somethingimportant'In[23]:'MyfavouritecharacterisMickeyMouse'.lower()Out[23]'myfavouritecharacterismickeymouse'

3.2.3字典字典概述Python中有一種數(shù)據(jù)結構是通過名稱來訪問其各個值,這種數(shù)據(jù)結構成為映射(mapping)。比較常用的一種就是字典,字典中的值不按順序存放,而是通過鍵值索引,這里的鍵可能是數(shù)、字符串或元組等等。字典中的這種鍵-值對被稱為項(item)。每個鍵與其值之間都用冒號(:)進行分隔,項之間用逗號分隔,而整個字典放在花括號內(nèi),整體類似于{key1:value1,key2:value2}??兆值渲袥]有任何項,用兩個花括號表示,類似于:{}。Python中的字典能夠實現(xiàn)輕松快速地查找,通過給定的鍵,找到該鍵對應的值。因此在字典中,鍵必須是獨一無二的,而字典中的值無需如此。

3.2.3字典操作創(chuàng)建字典可以直接使用賦值的方式創(chuàng)建字典,但需要注意的是,鍵是唯一的,如果重復,最后的一個鍵值對會替換前面的,但值不需要唯一。值可以取任何數(shù)據(jù)類型,但鍵必須是不可變的,如字符串、數(shù)字或者元組?!纠?-2.3-1】也可以使用函數(shù)dict從其他映射或鍵-值對序列創(chuàng)建字典。

【例3-2.3-2】In[1]:number_dict={'a':1,'b':2,'c':3,'c':4}In[2]number_dictOut[2]{'a':1,'b':2,'c':4}In[3]:student=[('name','Mickey'),('age',24)]In[4]d=dict(student)In[5]dOut[5]{'age':24,'name':'Mickey'}

3.2.3字典操作字典操作常用的字典操作包括索引,刪除,修改對應項的值等。

In[6]:student_dict={'Tom':24,'Mickey':23,'Marry':15,'Abel':18}In[7]student_dictOut[7]{'Abel':18,'Marry':15,'Mickey':23,'Tom':24}In[9]student_dict['Marry']Out[9]15In[8]len(student_dict)Out[8]4In[10]student_dict['Tom']=28In[11]student_dictOut[11]{'Abel':18,'Marry':15,'Mickey':23,'Tom':28}

3.2.3字典方法刪除字典中的元素使用in判斷某一關鍵字是否在字典中雖然字典和列表有多個相同之處,但也有一些重要的不同之處。首先,字典中的鍵可以是整數(shù),但并非必須是整數(shù),只需要保證字典的鍵是任何不可變的類型,如實數(shù)、字符串或元組。其次不使用append或其他類似的方法就不能給列表中沒有的元素賦值,但即便是字典中原本沒有的鍵,也可以給它賦值,這樣將在字典中創(chuàng)建一個新項。In[12]delstudent_dict['Mickey']In[13]student_dictOut[13]{'Abel':18,'Marry':15,'Tom':28}In[14]'Mickey'instudent_dictOut[14]False

3.2.3字典方法字典方法clear():刪除所有的字典項,返回值為None。還可以通過給字典賦空值來清空此字典。【例3-2.3-14】copy():返回一個新字典,其包含的鍵值對與原來的字典相同?!纠?-2.3-15】In[17]student_dict={'Abel':18,'Alan':24}In[18]student_dict.clear()In[19]student_dictOut[19]{}In[20]x={'username':'201820091','grades':[90,87,10]}In[21]y=x.copy()In[22]yOut[22]{'grades':[90,87,10],'username':'201820091'}

3.2.3字典方法get():使用get來訪問不存在的鍵時,沒有引發(fā)異常,而是返回None。而如果字典包含指定的鍵,get的作用將與普通字典查找相同。keys():返回一個字典視圖,其中包含指定字典中的鍵In[23]d={}In[24]print(d['name'])Out[24]KeyError:'name'In[25]print(d.get('name'))Out[25]NoneIn[26]d['name']='Eric'In[26]d.get('name')Out[28]'Eric'In[30]x={'username':'201820091','grades':[90,87,10]}In[31]x.keys()Out[31]dict_keys(['username','grades'])

3.2.3字典方法字典方法pop():用于獲取與指定鍵相關聯(lián)的值,并將該鍵值對從字典中刪除?!纠?-2.3-19】items():方法items返回一個包含所有字典項的列表,其中每個元素都為(key,value)的形式?!纠?-2.3-20】In[32]d={'x':1,'y':2}In[33]d.pop('x')Out[33]1In[34]dOut[34]{'y':2}In[35]student={'year':'2015','grades':[90,87,10]}In[36]student.items()Out[36]dict_items([('year','2015'),('grades',[90,87,10])])

3.2.4條件、循環(huán)語句條件語句Python中的條件語句用if和else來控制程序的執(zhí)行,基本形式為:if語句的判斷條件可以用>(大于)、<(小于)、==(等于)、>=(大于等于)、<=(小于等于)、!=(不等于)來表示其關系。if判斷條件:

執(zhí)行語句段1……else:

執(zhí)行語句段2……

3.2.4條件、循環(huán)語句條件語句因為Python不支持switch語句,所以多個條件判斷,只能使用elif來實現(xiàn):除此之外,if語句還可以實現(xiàn)嵌套,可將if語句放到其他if語句中,來實現(xiàn)判斷后的再次判斷?!纠?-2.4-1】if判斷條件1:

執(zhí)行語句段1……elif判斷條件2:

執(zhí)行語句段2……else:執(zhí)行語句段3……

3.2.4條件、循環(huán)語句程序3-2.4-1

條件語句的應用實例num=9ifnum<0:print('Negative')elifnum>0:if(num>=0andnum<=100)or(num>=100andnum<=150):print(num)else:print('Morethan150!')

3.2.4條件、循環(huán)語句循環(huán)語句Python的基本循環(huán)語句是while循環(huán)和for循環(huán),在這些基礎上加入一些跳出循環(huán)的語句就可以使得整個程序的流程更為多樣,可能性更為豐富。while循環(huán)

或者是while判斷條件:

執(zhí)行語句段……while判斷條件:

執(zhí)行語句段1……else:

執(zhí)行語句段2……

3.2.4條件、循環(huán)語句程序3-2while循環(huán)的應用實例numbers=[12,23,34,45,56,67,78,89]even=[]odd=[]whilelen(numbers)>0:number=numbers.pop()if(number%2)==0:even.append(number)else:odd.append(number)else:print(even)print(odd)輸出結果[78,56,34,12][89,67,45,23]

3.2.4條件、循環(huán)語句循環(huán)語句for循環(huán):for循環(huán)可以實現(xiàn)遍歷任何序列的項目,如一個列表或者一個字符串。for循環(huán)的基本形式為:除了直接使用序列進行遍歷,還可以使用計數(shù)器來作為索引,此時往往會使用到內(nèi)置len()獲取列表的長度和range()返回元素的范圍等。和while相類似,for循環(huán)也可以同else結合表示跳出循環(huán)后執(zhí)行的內(nèi)容for迭代變量in序列:

執(zhí)行語句……

3.2.4條件、循環(huán)語句程序3-3for循環(huán)的應用實例fruits=['bananan','apple','mango']forindexinrange(len(fruits)):print("fruit"+str(index)+":",fruits[index])else:print("Bye")輸出結果friut0:banananfriut1:applefriut2:mangoBye

3.2.4條件、循環(huán)語句循環(huán)語句嵌套循環(huán),Python允許在一個循環(huán)體中嵌入另一個循環(huán),如在for循環(huán)中嵌入for循環(huán),在while循環(huán)中循環(huán)中嵌入while循環(huán),在while循環(huán)中可以嵌入for循環(huán),在for循環(huán)中可以嵌入while循環(huán)等等。

3.2.4條件、循環(huán)語句break跳出循環(huán):break語句用來終止循環(huán)語句,它在while和for中使用。break語句能停止執(zhí)行最深層的循環(huán),并開始執(zhí)行下一行代碼?!纠?-2.4-4】

程序3-4break跳出循環(huán)的應用實例forletterin'Python':ifletter=='h':breakprint('這是break塊')print('當前字母:',letter)print('break')輸出結果當前字母:P當前字母:y當前字母:tbreak3.2.4條件、循環(huán)語句continue跳出循環(huán):continue語句用來跳出本次循環(huán),即跳過當前循環(huán)的剩余語句,然后繼續(xù)進行下一輪循環(huán)。它可以在while和for循環(huán)中使用。【例3-2.4-5】

程序3-5continue跳出循環(huán)的應用實例forletterin'Python':#第一個實例ifletter=='h':continueprint('這是continue塊')print('當前字母:',letter)print('continue')輸出結果當前字母:P當前字母:y當前字母:t當前字母:o當前字母:ncontinue3.2.4條件、循環(huán)語句pass跳出循環(huán):空語句,pass不做任何事情,占位語句。

程序3-6pass跳出循環(huán)的應用實例forletterin'Python':ifletter=='h':passprint('這是pass塊')print('當前字母:',letter)print('pass')輸出結果當前字母:P當前字母:y當前字母:t這是pass塊當前字母:h當前字母:o當前字母:npass3.2.4條件、循環(huán)語句課堂練習輸出9行內(nèi)容,第1行輸出1,第2行輸出12,第3行輸出123,以此類推,第9行輸出123456789

示例答案num1=1whilenum1<=9:num2=1whilenum2<=num1:print(num2,end="")num2+=1print()num1+=1====================================================foriinrange(1,10):forjinrange(1,10):print(j,end="")ifi==j:print()break

3.2.5函數(shù)定義函數(shù)函數(shù)是組織好的,可重復使用的,用來實現(xiàn)單一,或相關聯(lián)功能的代碼段。函數(shù)能提高應用的模塊性,和代碼的重復利用率。Python提供了許多內(nèi)建函數(shù),比如print()等,同時也可以自己創(chuàng)建函數(shù),這被叫做用戶自定義函數(shù)。定義函數(shù)需要遵照以下幾點規(guī)則:函數(shù)代碼塊以def關鍵詞開頭,后接函數(shù)標識符名稱和圓括號任何傳入?yún)?shù)和自變量必須放在圓括號中間。圓括號之間可以用于定義參數(shù)函數(shù)的第一行語句可以選擇性地使用文檔字符串—用于存放函數(shù)說明函數(shù)內(nèi)容以冒號起始,并且縮進return[表達式]結束函數(shù),返回一個值給調用者。

3.2.5函數(shù)定義函數(shù)格式樣例:調用函數(shù)定義一個函數(shù)只給了函數(shù)一個名稱,指定了函數(shù)里包含的參數(shù),和代碼塊結構。這個函數(shù)的基本結構完成以后,你可以通過另一個函數(shù)調用執(zhí)行,也可以直接從Python提示符執(zhí)行?!纠?-2.5-1】def

函數(shù)名(參數(shù)列表):

函數(shù)執(zhí)行語句段……return[表達式]

3.2.5函數(shù)參數(shù)傳遞在Python中,變量是沒有類型的,僅僅是一個對象的引用,或者可以理解為一個指針。因此定義的函數(shù)參數(shù)列表中的變量類型取決于參數(shù)傳遞時所賦值的類型。Python函數(shù)中的變量作為參數(shù)傳遞包括不可變類型與可變類型。不可變類型類似C語言中的值傳遞,在函數(shù)內(nèi)部修改變量的值,只是修改另一個復制的對象,不會影響其本身??勺冾愋皖愃朴贑語言中的引用傳遞,將真正的變量傳過去,修改后函數(shù)外部的變量也會受影響?!纠?-2.5-2至3】

3.2.5函數(shù)程序3-8傳不可變對象的應用實例defChangeInt(a):a=10b=3ChangeInt(b)print(b)輸出結果3

程序3-9傳可變對象的應用實例defChangeList(mylist):"修改傳入的列表"mylist.append([1,2,3,4])print("函數(shù)內(nèi)取值:",mylist)mylist=[10,20,30]print("更改前取值:",mylist)ChangeList(mylist)print("更改后取值:",mylist)輸出結果更改前取值:[10,20,30]函數(shù)內(nèi)取值:[10,20,30,[1,2,3,4]]更改后取值:[10,20,30,[1,2,3,4]]3.2.5函數(shù)參數(shù)分類調用函數(shù)時可以使用的正式的參數(shù)類型包括:必備參數(shù)、關鍵字參數(shù)、默認參數(shù)等。必備參數(shù)指的是在函數(shù)定義時設置的參數(shù),在函數(shù)調用階段必須按照正確的順序與數(shù)量傳入?!纠?-2.5-4】關鍵字參數(shù)指的是在傳遞參數(shù)時使用關鍵字標明對應的參數(shù),允許函數(shù)調用時參數(shù)的順序與聲明時不一致?!纠?-2.5-5】默認參數(shù)的值通常都在定義函數(shù)時指明,而默認參數(shù)也可以傳入?yún)?shù)進行更新,若默認參數(shù)的值如果沒有傳入,則被認為是默認值?!纠?-2.5-6】

3.2.5函數(shù)程序3-10必備參數(shù)傳遞的應用實例defprintme(str1,str2):"打印任何傳入的字符串"print("string1:",str1)print("string2:",str2)

#調用printme函數(shù)string1="Hello"string2="World!"printme(string1,string2)printme(string2,string1)printme()輸出結果string1:Hellostring2:World!string1:World!string2:Hello

TypeError:printme()missing2requiredpositionalarguments:'str1'and'str2'

3.2.5函數(shù)程序3-11關鍵字參數(shù)傳遞的應用實例defprintme(str1,str2):"打印任何傳入的字符串"print("string1:",str1)print("string2:",str2)

string1="Hello"string2="World!"printme(string2,string1)printme(str2=string2,str1=string1)輸出結果string1:World!string2:Hellostring1:Hellostring2:World!

3.2.5函數(shù)程序3-12默認參數(shù)傳遞的應用實例defprintme(str1="oh",str2="hello",str3="world"):"打印任何傳入的字符串"print("string1:",str1)print("string2:",str2)print("string3:",str3)

string2="Hello"string3="World"printme(str2=string2,str3=string3)輸出結果string1:ohstring2:Hellostring3:World

3.2.5函數(shù)匿名函數(shù)Python使用lambda來創(chuàng)建匿名函數(shù)。lambda只是一個表達式,函數(shù)體比def簡單很多,它的主體是一個表達式,而不是一個代碼塊。lambda函數(shù)擁有自己的命名空間,且不能訪問自有參數(shù)列表之外或全局命名空間里的參數(shù)。通常lambda函數(shù)的語法只包含一個語句,具體的結構如下:lambda[arg1[,arg2,.....argn]]:expression程序3-13匿名函數(shù)的應用實例sum=lambdaarg1,arg2:arg1+arg2;

print("相加后的值為:",sum(10,20))print("相加后的值為:",sum(20,20))輸出結果相加后的值為:30相加后的值為:40

3.2.5函數(shù)return語句“return[表達式]”語句表示退出函數(shù),選擇性地向調用方返回一個表達式。不帶參數(shù)值的return語句返回None?!纠?-2.5-8】程序3-14return語句的應用實例defsum(arg1,arg2):

total=arg1+arg2print("相加后的值:",total)returntotal;

total=sum(10,20)print("返回的值:",total)輸出結果相加后的值:30返回的值:30

3.2.5函數(shù)變量作用域變量的作用域決定了在哪一部分程序你可以訪問哪個特定的變量名稱。兩種最基本的變量作用域是全局作用域和局部作用域,分別對應著全局變量和局部變量。定義在函數(shù)內(nèi)部的變量擁有一個局部作用域,定義在函數(shù)外的變量擁有全局作用域。局部變量只能在其被聲明的函數(shù)內(nèi)部訪問,而全局變量可以在整個程序范圍內(nèi)訪問?!纠?-2.5-9】

3.2.5函數(shù)程序3-15變量作用域的應用實例total=0defsum(arg1,arg2):total=arg1+arg2print("函數(shù)內(nèi)是局部變量:",total)returntotal

sum(10,20)print("函數(shù)外是全局變量:",total)total=sum(10,20)print("函數(shù)外是全局變量:",total)輸出結果函數(shù)內(nèi)是局部變量:30函數(shù)外是全局變量:0函數(shù)內(nèi)是局部變量:30函數(shù)外是全局變量:30

3.2.5函數(shù)課堂練習隨機生成20個學生的成績,并定義函數(shù)來判斷這20個學生成績的等級(100-90為A,80-90為B,其余為C)。其中生成1-100隨機數(shù)的語句為:score=random.randint(1,100)示例代碼importrandomdefget_level(score):if90<score<=100:return'A'elif80<score<=90:return'B'else:return'C'defmain():foriinrange(20):score=random.randint(1,100)print("成績?yōu)?s,等級為%s"%(score,get_level(score)))main()

3.2.6文件打開文件通常使用open函數(shù)打開文件,該函數(shù)將文件名作為唯一必不可少的參數(shù),并返回一個文件對象。同時函數(shù)open的第二個參數(shù),可以顯式地指定文件的打開模式。默認的打開文件編碼為UTF-8編碼,可以使用關鍵字encoding指定其他編碼

3.2.6文件文件的基本操作假設已經(jīng)獲取了一個文件對象f,使用f.read()來讀取數(shù)據(jù),使用f.write()來寫入數(shù)據(jù)。當對打開的文件進行各種操作后往往會在最后使用f.close()函數(shù)來關閉文件。In[3]f=open('newfile.txt','w')In[4]f.write('Hello,')Out[4]7In[5]f.write('World!')Out[5]6In[6]f.close()

3.2.6文件實際寫入文件的效果為:In[10]f=open('lines.txt','w')In[11]string_list=['Hello\n','World\n','Good\n','Morning\n']In[12]f.writelines(string_list)In[13]f.close()In[14]f=open('lines.txt','r')In[15]lines=f.readlines()In[16]linesOut[16]['Hello\n','World\n','Good\n','Morning\n']In[17]f.close()HelloWorldGoodMorning

3.2.7綜合實例【問題描述】用所學的Python語法實現(xiàn)一個購物車,包括以下要求:a)能夠制定商品條目b)初始啟動程序,讓用戶輸入初始金額c)用戶可選擇操作:0:退出1:查看商品列表2:加入購物車3:結算購物車4:查看余額5:清空購物車及購買歷史d)允許用戶根據(jù)商品編號購買商品e)用戶選擇結算購物車后檢測余額是否足夠,夠就直接扣款,不夠就提醒f)用戶可以一直購買商品,也可以直接退出g)用文件保存購買歷史、購物車歷史以及商品列表

3.2.7綜合實例【功能函數(shù)】1)initialize():初始化購物車2)show_item(content):展示商品3)show_operation():展示可進行的操作4)in_cart():加入購物車5)pay(money):結算購物車6)clean_history():清空購物車及購買歷史

3.2.7綜合實例

initialize()功能函數(shù)definitialize():try:f=open('shopping_cart.txt','r')a=f.read()globalshopping_cart

shopping_cart=eval(a)f.close()f=open('buy.txt','r')a=f.read()globalbuybuy=eval(a)f.close()f=open('products.txt','r')a=f.read()globalproductsproducts=eval(a)f.close()exceptFileNotFoundError:pass3.2.7綜合實例

show_item(content)功能函數(shù)defshow_item(content):print("#######")ifcontent==1:print("序號{:<10s}商品名稱{:<10s}價格{:<10s}".format("","",""))

k=0foriinproducts:print("{:<14d}{:<18s}{}".format(k,i,products[i]))k=k+1elifcontent==3:print("購物車中有如下商品:")

print("序號{:<10s}商品名稱{:<10s}價格{:<10s}數(shù)量{:<10s}".format("","","",""))k=0foriinshopping_cart:print("{:<14d}{:<18s}{:<14d}{}".format(k,i,products[i],shopping_cart[i]))k=k+13.2.7綜合實例

show_operation()功能函數(shù)defshow_operation():print("#######")print("您可進行如下操作(選擇對應序號即可)")

print("0退出")

print("1查看商品列表")

print("2加入購物車")

print("3結算購物車")

print("4查看余額")

print("5清空購物車及購買歷史")

choice=input('您選擇的操作是:')

returnchoice3.2.7綜合實例

in_cart()功能函數(shù)defin_cart():show_item(1)print("您想加入購物車的是?")

whileTrue:choice=input('請輸入所選擇商品序號:')

ifchoice.isdigit():choice=int(choice)if0<=choice<len(products):breakelse:print("無該商品!")

else:print("無該商品!")

product=list(products)[choice]ifproductinshopping_cart:shopping_cart[product]+=1else:shopping_cart[product]=1print("已幫您加入購物車")3.2.7綜合實例

pay(money)功能函數(shù)defpay(money):show_item(3)list_pay=input("您想結算的商品是?")

xlist=list_pay.split(",")xlist=[int(xlist[i])foriinrange(len(xlist))if0<=int(xlist[i])<len(shopping_cart)]c,s=np.unique(xlist,return_counts=True)total=0pay_item=[list(shopping_cart)[c[i]]foriinrange(len(c))]foriinrange(len(c)):total+=products[pay_item[i]]*s[i]iftotal<money:foriinrange(len(pay_item)):ifpay_item[i]inbuy:buy[pay_item[i]]+=s[i]3.2.7綜合實例

pay(money)功能函數(shù)else:buy[pay_item[i]]=1shopping_cart[pay_item[i]]-=1ifshopping_cart[pay_item[i]]==0:delshopping_cart[pay_item[i]]print("已經(jīng)結算清!")

returntotalelse:print("余額不足!")

return03.2.7綜合實例

clean_history()功能函數(shù)defclean_history():globalbuybuy.clear()globalshopping_cartshopping_cart.clear()3.3重要庫的使用方法與案例3.3重要庫的使用方法與案例3.3.1Numpy3.3.2Pandas3.3.3Scipy3.3.4Matplotlib

3.3.1Numpy庫Numpy概述NumPy(NumericalPython)是Python語言的一個擴展程序庫,支持大量的維度數(shù)組與矩陣運算,此外也針對數(shù)組運算提供大量的數(shù)學函數(shù)庫。NumPy通常與SciPy(ScientificPython)和Matplotlib(繪圖庫)一起使用,這種組合廣泛用于替代Matlab,是一個強大的科學計算環(huán)境,有助于我們通過Python學習數(shù)據(jù)科學或者機器學習。Numpy安裝最常用的就是使用pip命令安裝Numpy,對應的命令為:pipinstallnumpy

3.3.1Numpy庫Ndarray對象NumPy最重要的一個特點是其N維數(shù)組對象ndarray,它是一系列同類型數(shù)據(jù)的集合,以0下標為開始進行集合中元素的索引,相當于一格快速而靈活的大數(shù)據(jù)集容器,可以利用這種數(shù)據(jù)對整塊數(shù)據(jù)執(zhí)行一些數(shù)據(jù)運算。每個ndarray數(shù)組都有一個shape(一個表示各維度大小的元組)和一個dtype(一個用于說明數(shù)組數(shù)據(jù)類型的對象)。In[3]importnumpyasnpIn[4]data1=[6,7.2,8.5,0,9.1,10]In[5]a1=np.array(data1)In[6]a1Out[6]array([6.,7.2,8.5,0.,9.1,10.])

3.3.1Numpy庫In[7]data2=[[1,2,3,4],[5,6,7,8]]In[8]a2=np.array(data2)In[9]a2Out[9]array([[1,2,3,4],[5,6,7,8]])

In[10]a2.ndimOut[10]2In[11]a2.shapeOut[11](2,4)In[12]a1.dtypeOut[12]dtype('float64')In[13]a2.dtypeOut[13]dtype('int32')3.3.1Numpy庫Ndarray的數(shù)據(jù)類型dtype是個特殊的對象,它含有ndarray將一塊內(nèi)存解釋為特定數(shù)據(jù)類型所需的所有信息,他也正是NumPy如此靈活強大的原因之一。數(shù)據(jù)類型dtype的命名方式相同:一個類型名(如float或int),后面跟一個用于表示各元素位長的數(shù)字。有些類型之間可以通過astype方法進行顯式地轉換?!纠?-3.1-6】In[17]arr=np.array([1,2,3,4,5])In[18]arr.dtypeOut[18]dtype('int32')In[19]float_arr=arr.astype(np.float64)In[20]float_arr.dtypeOut[20]dtype('float64')

3.3.1Numpy庫Ndarray的數(shù)據(jù)類型NumPy所支持的全部數(shù)據(jù)類型:

3.3.1Numpy庫Ndarray的操作索引:由于選取數(shù)據(jù)自己或單個元素的方式有很多,因此numpy數(shù)組的索引內(nèi)容豐富。對于高維度數(shù)組,各索引位置上的元素不再是標量,而是維度低一階的ndarray數(shù)組。因此當想要訪問某個具體的數(shù)值時,則需要使用多維下標索引。In[21]arr=np.array([0,1,2,3,4,5,6,7,8,9])In[22]arr[5]Out[22]5In[23]arr[5:8]Out[23]array([5,6,7])

3.3.1Numpy庫In[29]arr3d=np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])In[30]arr3dOut[30]array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])In[31]arr3d[0]Out[31]array([[1,2,3],[4,5,6]])In[32]arr3d[0][1]Out[32]array([4,5,6])In[33]arr3d[0,1,2]Out[33]6

3.3.1Numpy庫切片:一維的數(shù)組切片語法跟Python列表操作差不多,對于高維度的數(shù)組,切片是沿著一個軸向選取元素?!纠?-3.1-10】

In[36]arr2d=np.array([[1,2,3],[4,5,6],[7,8,9]])In[37]arr2dOut[37]array([[1,2,3],[4,5,6],[7,8,9]])In[38]arr2d[:2]Out[38]array([[1,2,3],[4,5,6]])In[39]arr2d[:2,1:]Out[39]array([[2,3],[5,6]])3.3.1Numpy庫轉置:轉置是對數(shù)組進行反轉操作,不僅有transpose方法,還有一個特殊的T屬性。在進行矩陣計算時,經(jīng)常需要用到該操作?!纠?-3.1-11至12】

In[45]arr=np.arange(15).reshape((3,5))In[46]arrOut[46]array([[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14]])In[47]arr.TOut[47]array([[0,5,10],[1,6,11],[2,7,12],[3,8,13],[4,9,14]])3.3.2Pandas庫Pandas概述Pandas是基于Numpy構建的,它含有使數(shù)據(jù)分析工作變得更快更簡單的高級數(shù)據(jù)結構和操作工具,讓以Numpy為中心的應用變得更加簡單。Pandas安裝最常用的就是使用pip命令安裝Pandas,對應的命令為: pipinstallpandas

3.3.2Pandas庫Series數(shù)據(jù)結構Series是一種類似于一維數(shù)組的對象,它由一組數(shù)據(jù)(各種NumPy數(shù)據(jù)類型)以及一組與之相關的數(shù)據(jù)標簽(即索引)組成。僅由一組數(shù)據(jù)即可產(chǎn)生最簡單的Series。Series的字符串表現(xiàn)形式為:索引在左邊,值在右邊。In[2]obj=Series([2,5,7,-2])In[3]objOut[3]0215273-2dtype:int64

3.3.2Pandas庫可以在創(chuàng)建Series的時候指定標記的索引:

In[6]obj2=Series([2,7,-5,3],index=['d','b','a','c'])In[7]obj2Out[7]d2b7a-5c3dtype:int64In[8]obj2.indexOut[8]Index(['d','b','a','c'],dtype='object')3.3.2Pandas庫DataFrame數(shù)據(jù)結構DataFrame是一個表格型的數(shù)據(jù)結構,它含有一組有序的列,每列可以是不同的值類型(數(shù)值、字符串、布爾值等)。DataFrame既有行索引也有列索引,它可以被看作由Series組成的字典。

In[15]data={'name':['Tom','Marry','Herry'],'year':[1996,1997,1998],'grade':[86,79,93]}In[16]frame=DataFrame(data)In[17]Out[17]frame3.3.2Pandas庫Pandas操作重新索引:Pandas對象的一個重要方法是reindex,其作用是創(chuàng)建一個適應新索引的新對象。調用Series的reindex將會根據(jù)新索引進行重排。如果某個索引值當前不存在,就引入確缺失值。In[21]obj=Series([4.5,7.2,-5.3,3.6],index=['x','m','o','t'])In[22]obj.reindex(['m','o','t','x','z'])Out[22]m7.2o-5.3t3.6x4.5zNaNdtype:float64

3.3.2Pandas庫丟棄:使用drop方法可以返回一個丟棄了指定行或列中

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論