人工智能第3章Python函數(shù)及組合數(shù)據(jù)類型_第1頁
人工智能第3章Python函數(shù)及組合數(shù)據(jù)類型_第2頁
人工智能第3章Python函數(shù)及組合數(shù)據(jù)類型_第3頁
人工智能第3章Python函數(shù)及組合數(shù)據(jù)類型_第4頁
人工智能第3章Python函數(shù)及組合數(shù)據(jù)類型_第5頁
已閱讀5頁,還剩73頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Python函數(shù)及組合數(shù)據(jù)類型北京聯(lián)合大學(xué)目錄02.組合數(shù)據(jù)類型01.函數(shù)01函數(shù)函數(shù)定義與調(diào)用函數(shù)的參數(shù)傳遞方式遞歸函數(shù)的定義是一段具有特定功能的、可重用的代碼是一種功能的抽象從n個元素中不重復(fù)地選取m個元素的一個組合,計算組合數(shù)。目的:降低編程難度、代碼復(fù)用示例函數(shù)的定義函數(shù)的定義形式def<函數(shù)名>(<參數(shù)(0個或多個)>)

:

<函數(shù)體> return<返回值>函數(shù)定義后,如果不經(jīng)過調(diào)用,不會被執(zhí)行函數(shù)定義時,參數(shù)是輸入、函數(shù)體是處理、結(jié)果是輸出(IPO)函數(shù)的定義求n!例3.1函數(shù)的調(diào)用調(diào)用時要給出實(shí)際參數(shù)實(shí)際參數(shù)替換定義中的參數(shù)函數(shù)調(diào)用后得到返回值調(diào)用是運(yùn)行函數(shù)代碼的方式deffact(n)

:

s=1fori

inrange(1,n+1):

s*=ireturnsm=fact(8)print(m)函數(shù)的定義函數(shù)的調(diào)用實(shí)際參數(shù)形式參數(shù)函數(shù)的調(diào)用調(diào)用過程deffact(n)

:s=

1fori

inrange(1,

n+1):

s*=

ireturnsm=fact(8

)print(m)40320函數(shù)的參數(shù)傳遞方式、函數(shù)的返回值01函數(shù)函數(shù)的參數(shù)傳遞方式函數(shù)可以有參數(shù),也可以沒有,但必須保留括號無參數(shù)函數(shù)形式def

<函數(shù)名>():<函數(shù)體>return

<返回值>函數(shù)的參數(shù)傳遞方式函數(shù)可以有參數(shù),也可以沒有,但必須保留括號def

func():print("Thisisafunction")func()例3.2定義一個無參數(shù)函數(shù),輸出“Thisisafunction”運(yùn)行結(jié)果:

Thisisafunction

函數(shù)的參數(shù)傳遞方式可選參數(shù)傳遞函數(shù)形式def

<函數(shù)名>(<非可選參數(shù)>,

<可選參數(shù)=初始值>)

:

<函數(shù)體>return

<返回值>可選參數(shù)傳遞函數(shù)定義時可以為某些參數(shù)指定默認(rèn)值,構(gòu)成可選參數(shù)函數(shù)的參數(shù)傳遞方式a為非可選參數(shù),b和c為可選參數(shù)調(diào)用函數(shù)時,若未指定可選參數(shù)值,則采用默認(rèn)值例3.3運(yùn)行結(jié)果: 16 15定義求三個數(shù)和的函數(shù),包含3個參數(shù),其中2個是可選參數(shù),默認(rèn)值分別是3和5。指定b值為2,未指定c的值,則c為5未指定b和c的值,則b為3,c為5函數(shù)的參數(shù)傳遞方式函數(shù)定義時可以設(shè)計可變數(shù)量參數(shù),即不確定參數(shù)總數(shù)量可變參數(shù)傳遞可變參數(shù)傳遞函數(shù)形式def

<函數(shù)名>(<參數(shù)>,*b): <函數(shù)體>return<返回值>注意:帶有星號的可變參數(shù)只能出現(xiàn)在參數(shù)列表的最后函數(shù)的參數(shù)傳遞方式函數(shù)定義時可以設(shè)計可變數(shù)量參數(shù),即不確定參數(shù)總數(shù)量運(yùn)行結(jié)果:例3.4定義一個可變參數(shù)函數(shù),輸出學(xué)生的學(xué)號、姓名和喜愛的運(yùn)動項(xiàng)目。函數(shù)的返回值return保留字用來傳遞返回值return可以傳遞0個返回值,也可以傳遞任意多個返回值沒有返回值,則可以沒有return函數(shù)的返回值函數(shù)的返回值編寫函數(shù),計算1到n的總和以及平均值,并返回總和值及平均值運(yùn)行結(jié)果:例3.5return可以傳遞0個返回值,也可以傳遞任意多個返回值局部變量和全局變量、lambda函數(shù)01函數(shù)局部變量和全局變量根據(jù)變量作用范圍局部變量全局變量<語句塊1>def <函數(shù)名>(<參數(shù)>)

:<函數(shù)體>return <返回值><語句塊2>函數(shù)局部變量程序全局變量局部變量和全局變量運(yùn)行結(jié)果:n,s=8,

10print(fact(n),

s)n和s是全局變量fact()函數(shù)中的n和s是局部變量n和s是全局變量s=

1foriinrange(1,

n+1):

s*=

ireturnsdeffact(n)

:40320

10例3.6編寫函數(shù)計算n的階乘,并調(diào)用函數(shù)求8!

局部變量和全局變量局部變量是函數(shù)內(nèi)部的變量,與全局變量可能重名卻是不同的變量函數(shù)結(jié)束后,局部變量被釋放可以使用global保留字在函數(shù)內(nèi)部使用全局變量規(guī)則1:局部變量和全局變量是不同變量局部變量和全局變量n,s=8,10global

sfori

inrange(1,

n+1):

s*=

ireturnsprint(fact(n),

s)n和s是全局變量n是局部變量s是全局變量n和s是全局變量deffact(n)

:運(yùn)行結(jié)果403200403200例3.7修改例3.5,利用保留字global修飾變量s,觀察輸出的結(jié)果s有何不同。局部變量和全局變量規(guī)則2:局部變量為組合數(shù)據(jù)類型且未創(chuàng)建,等同于全局變量函數(shù)內(nèi)部的組合變量如果沒有創(chuàng)建,則視為函數(shù)外部同名變量在函數(shù)內(nèi)部的使用,即全局變量組合變量可以是

列表類型(用[]或list()創(chuàng)建)、

集合類型(用{}或set()創(chuàng)建)、

元組(用()或tuple()創(chuàng)建)等局部變量和全局變量此處ls是列表類型,未真實(shí)創(chuàng)建

則等同于全局變量通過使用[]真實(shí)創(chuàng)建了一個全局變量列表ls輸出全局變量ls運(yùn)行結(jié)果:[90,88,69,92,78]例3.8使用列表存儲一組成績數(shù)據(jù),向列表中追加一個成績,追加用函數(shù)實(shí)現(xiàn)。局部變量和全局變量運(yùn)行結(jié)果:函數(shù)內(nèi)ls為:[78]函數(shù)外ls為:[90,88,69,92]例3.9改寫例3.8,在函數(shù)內(nèi)部創(chuàng)建列表后追加。真實(shí)創(chuàng)建的列表ls是局部變量真實(shí)創(chuàng)建一個全局列表ls輸出全局變量ls局部變量和全局變量基本數(shù)據(jù)類型,無論是否重名,局部變量與全局變量不同可以通過global保留字在函數(shù)內(nèi)部聲明全局變量組合數(shù)據(jù)類型,如果局部變量未真實(shí)創(chuàng)建,則是全局變量使用規(guī)則lambda函數(shù)01函數(shù)lambda函數(shù)是一種匿名函數(shù)使用

lambda保留字定義,函數(shù)名是返回結(jié)果lambda函數(shù)用于定義簡單的、能夠在一行內(nèi)表示的函數(shù)def <函數(shù)名>(<參數(shù)>)

:<函數(shù)體>return <返回值><函數(shù)名>

=

lambda

<參數(shù)>:

<表達(dá)式>等價于形式lambda函數(shù)>>>f=lambdax,y:x**y>>>f(2,3)8>>>f=lambda:"lambda函數(shù)">>>print(f())lambda函數(shù)等價例3.10定義lambda函數(shù),計算x的y次方的值。lambda函數(shù)lambda函數(shù)主要用作一些特定函數(shù)或方法的參數(shù)lambda函數(shù)有一些固定使用方式一般情況,建議使用def定義的普通函數(shù)使用注意事項(xiàng)遞歸01函數(shù)遞歸的定義遞歸的實(shí)現(xiàn)遞歸的調(diào)用過程遞歸應(yīng)用舉例遞歸的定義函數(shù)定義中調(diào)用函數(shù)自身的方式遞歸是數(shù)學(xué)歸納法思維的編程體現(xiàn)遞歸鏈條基例計算過程存在遞歸鏈條存在一個或多個不需要再次遞歸的基例

例3.11兩個關(guān)鍵特征遞歸的實(shí)現(xiàn)遞歸本身是一個函數(shù),需要函數(shù)定義方式描述函數(shù)內(nèi)部,采用分支語句對輸入?yún)?shù)進(jìn)行判斷基例和鏈條,分別編寫對應(yīng)代碼函數(shù)+分支語句遞歸的實(shí)現(xiàn)求n!基例鏈條例3.11遞歸的調(diào)用過程遞歸應(yīng)用舉例利用遞歸方法,求斐波那契數(shù)列第10項(xiàng)。

基例鏈條數(shù)列1,1,2,3,5,8,13,21,34,55……

例3.12遞歸應(yīng)用舉例運(yùn)行結(jié)果:55序列類型、集合類型、映射類型02組合數(shù)據(jù)類型序列是具有先后關(guān)系的一組元素序列類型序列是一維元素向量,元素類型可以不同類似數(shù)學(xué)元素序列:s0,s1,…,sn元素間由序號引導(dǎo),通過下標(biāo)訪問序列的特定元素序列類型序列是一個基類類型字符串類型元組類型列表類型序列類型序號的定義正向遞增序號反向遞減序號-5-4-3-2-1"China"

3.14151024

(2,3)[95,83,100]01234序列類型通用操作符操作符及應(yīng)用描

述xin

s如果x是序列s的元素,返回True,否則返回False舉例:25in[10,25,50]結(jié)果為True

xnotins如果x是序列s的元素,返回False,否則返回True舉例:25notin[10,25,50]結(jié)果為False

s+

t連接兩個序列s和t舉例:[10,25,50]+[88]結(jié)果為[10,25,50,88]

s*n或

n*s將序列s復(fù)制n次(s為序列,n為整數(shù))舉例:[60,88]*3結(jié)果為[60,88,60,88,60,88]

s[i]索引,返回s中的第i+1個元素,i是序列的序號舉例:"python"[2]結(jié)果為't'

s[i:j]或s[i:j:

k]切片,返回序列s中第i+1到j(luò)以k為步長的元素子序列舉例:“python”[2:4]結(jié)果為'th'

“python”[0:5:2]結(jié)果為'pto'

序列類型通用函數(shù)和方法函數(shù)和方法描

述len(s)返回序列s的長度,即元素個數(shù)舉例:len((10,25,50,88))結(jié)果為4min(s)返回序列s的最小元素,s中元素需要可比較舉例:min((10,25,50,88))結(jié)果為10

max(s)返回序列s的最大元素,s中元素需要可比較舉例:max((10,25,50,88))結(jié)果為88

s.index(x)

或s.index(x,i,

j)返回序列s,序號從i到j(luò)中,第一次出現(xiàn)元素x的位置舉例:[10,25,50,88].index(25)結(jié)果為1

s.count(x)返回序列s中出現(xiàn)x的總次數(shù)舉例:[88,25,50,88].count(88)結(jié)果為2

02組合數(shù)據(jù)類型序列類型、集合類型、映射類型元組類型列表類型元組類型是一種序列類型,一旦創(chuàng)建就不能被修改使用小括號()

或tuple()創(chuàng)建,元素間用逗號,分隔可以使用或不使用小括號元組元組繼承序列類型的全部通用操作元組因?yàn)閯?chuàng)建后不能修改,因此沒有特殊操作元組類型取元素Green例3.1302組合數(shù)據(jù)類型序列類型、集合類型、映射類型元組類型列表類型列表類型是一種常用的序列類型,創(chuàng)建后可以隨意被修改使用方括號[]或list()創(chuàng)建,元素間用逗號,分隔列表中各元素類型可以不同,無長度限制列表例如:ls=[99,87,89,68,100,98,58,73,98]列表類型操作函數(shù)和方法函數(shù)或方法描

述ls[i]=

x替換列表ls第i+1個元素為x舉例:ls[5]=66結(jié)果ls變?yōu)閇10,20,30,40,50,66]

ls[i:j:k]=

lt用列表lt替換ls切片后所對應(yīng)元素子列表舉例:ls[::3]=[0,1]結(jié)果ls變?yōu)閇0,20,30,1,50,60]del

ls[i]刪除列表ls中第i+1元素舉例:dells[1]結(jié)果ls變?yōu)閇10,30,40,50,60]dells[i:j:k]刪除列表ls中序號從i到j(luò)以k為步長的元素序列舉例:dells[::2]結(jié)果ls變?yōu)閇20,40,60]ls+=

lt更新列表ls,將列表lt元素增加到列表ls中舉例:ls+=lt結(jié)果ls變?yōu)閇10,20,30,40,50,60,77]ls*=

n更新列表ls,其元素重復(fù)n次舉例:lt*=3結(jié)果lt變?yōu)閇77,77,77]

假設(shè)列表ls=[10,20,30,40,50,60] lt=[77]列表類型操作函數(shù)和方法函數(shù)或方法描

述ls.append(x)在列表ls最后增加一個元素x舉例:ls.append(77)結(jié)果ls變?yōu)閇10,20,30,77]ls.clear()刪除列表ls中所有元素ls.copy()生成一個新列表,賦值ls中所有元素ls.insert(i,x)在列表ls的第i+1位置增加元素x舉例:ls.insert(2,77)結(jié)果ls變?yōu)閇10,20,77,30]ls.pop(i)將列表ls中第i+1位置元素取出并刪除該元素ls.remove(x)將列表ls中出現(xiàn)的第一個元素x刪除ls.reverse()將列表ls中的元素反轉(zhuǎn)舉例:ls.reverse()結(jié)果ls變?yōu)閇30,20,10]ls.sort()將列表ls中的元素排序,reverse參數(shù)指定升序或降序舉例:ls.sort(reverse=True)結(jié)果ls變?yōu)閇30,20,10]假設(shè)列表ls=[10,20,30]列表類型操作函數(shù)和方法例3.14錄入6名學(xué)生的成績存入列表。運(yùn)行結(jié)果:

輸入: 78 90 89 65 80 98輸出:[78,90,89,65,80,98]例3.15刪除不合理的成績數(shù)據(jù)。運(yùn)行結(jié)果: [99,87,89,68,83,98]例3.16已知成績列表為[99,87,89,68,100,98,58,73,98],按照從高到低,輸出前三位的成績。輸出結(jié)果:[100,99,98]序列類型的應(yīng)用場景元組元組用于元素不改變的應(yīng)用場景數(shù)據(jù)保護(hù):轉(zhuǎn)換成元組類型列表用于數(shù)據(jù)可改變的場景多維列表存儲信息序列類型、集合類型、映射類型02組合數(shù)據(jù)類型集合類型集合類型與數(shù)學(xué)中的集合概念一致集合是多個元素的無序組合集合元素之間無序,每個元素唯一,不存在相同元素集合類型表示集合用大括號{}

表示,元素間用逗號分隔建立集合類型用

{}或set()建立空集合類型,必須使用set()例3.17定義集合的示例。運(yùn)行結(jié)果: {'h','y','t','n','p','o'} {'java','c++','python'} {('red','green','blue'),'bw'}集合操作四個基本操作S1|

S2并S1

S2差S1&

S2交S1^

S2補(bǔ)集合操作操作符及應(yīng)用描

述S1|

S2并,返回一個新集合,包括在集合S1和S2中的所有元素舉例:S1|S2結(jié)果為{1,2,3,4,5,6,7,8}S1-

S2差,返回一個新集合,包括在集合S1但不在S2中的元素舉例:S1-S2結(jié)果為{1,2,3}S1&

S2交,返回一個新集合,包括同時在集合S1和S2中的元素舉例:S1&S2結(jié)果為{4,5}S1^

S2補(bǔ),返回一個新集合,包括集合S1和S2中的非相同元素舉例:S1^S2結(jié)果為{1,2,3,6,7,8}S1<=S2或S1<

S2返回True/False,判斷S1和S2的子集關(guān)系舉例:S1<=S2結(jié)果為FalseS1>=S2或S1>S2返回True/False,判斷S1和S2的包含關(guān)系舉例:S1>=S2結(jié)果為False

假設(shè)集合S1={1,2,3,4,5} S2={4,5,6,7,8}集合操作4個增強(qiáng)操作符操作符及應(yīng)用描

述S1|=S2并,更新集合S1,包括在集合S1和S2中的所有元素S1-=S2差,更新集合S1,包括在集合S1但不在S2中的元素S1&=S2交,更新集合S1,包括同時在集合S1和S2中的元素S1^=S2補(bǔ),更新集合S1,包括集合S1和S2中的非相同元素常用集合操作函數(shù)或方法操作函數(shù)或方法描

述S.add(x)如果x不在集合S中,將x增加到SS.discard(x)移除S中元素x,如果x不在集合S中,不報錯S.remove(x)移除S中元素x,如果x不在集合S中,產(chǎn)生KeyError異常S.clear()移除S中所有元素S.pop()隨機(jī)返回S的一個元素并在S中刪除這個元素,更新S,若S為空產(chǎn)生KeyError異常常用集合操作函數(shù)或方法操作函數(shù)或方法描

述S.copy()返回集合S的一個副本len(S)返回集合S的元素個數(shù)xin

S判斷S中元素x,x在集合S中,返回True,否則返回Falsexnotin

S判斷S中元素x,x不在集合S中,返回True,否則返回Falseset(x)將其他類型變量x轉(zhuǎn)變?yōu)榧项愋图项愋偷膽?yīng)用場景數(shù)據(jù)去重集合中元素?zé)o重復(fù)例3.18集合的去重示例。將列表中的姓名進(jìn)行去重,重復(fù)的姓名只保留一個。輸出結(jié)果:['張飛','趙云','關(guān)羽','劉備','張飛','曹操','劉備','諸葛亮']{'曹操','諸葛亮','趙云','張飛','劉備','關(guān)羽'}序列類型、集合類型、映射類型02組合數(shù)據(jù)類型映射類型通過鍵索引數(shù)據(jù)中值的過程映射鍵是數(shù)據(jù)索引的擴(kuò)展鍵值對字典是“映射”的體現(xiàn):鍵和值一一對應(yīng)字典是鍵值對的集合,鍵值對之間無序包含0個或多個鍵值對的集合,沒有長度限制采用大括號{}和dict()創(chuàng)建,鍵值對用冒號:表示鍵不允許重復(fù)(若重復(fù),則前面失效)鍵必須是不可變類型{<鍵1>:<值1>,<鍵2>:<值2>,…,<鍵n>:<值n>}字典類型例3.19輸出結(jié)果

{'China':'Beijing','France':'Paris','US':'Washington'}<class'dict'>定義字典的示例。鍵值對是三個國家的名稱和首都。<字典變量>={<鍵1>:<值1>,…,<鍵n>:<值n>}創(chuàng)建:字典類型的引用<字典變量>[<鍵>]<字典變量>[<鍵>]=<值>例3.20引用:修改:引用字典元素值的示例。輸出結(jié)果:{'China':'Beijing','France':'Paris','US':'NewYork'}Beijing{'China':'Beijing','France':'Paris','US':'Washington'}d[“Germany”]=“Berlin”結(jié)果會怎么樣?字典常用函數(shù)或方法函數(shù)或方法描

述del

d[k]刪除字典d中鍵k對應(yīng)的數(shù)據(jù)值kin

d判斷鍵k是否在字典d中,如果在返回True,否則Falsed.keys()返回字典d中所有的鍵信息d.values()返回字典d中所有的值信息d.items()返回字典d中所有的鍵值對信息字典常用函數(shù)或方法例3.21字典常用方法和函數(shù)的示例。輸出結(jié)果:Falsedict_keys(['China',

溫馨提示

  • 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

提交評論