




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
大數(shù)據(jù)分析:基于Python
第1章Python語(yǔ)法基礎(chǔ)
本章知識(shí)點(diǎn)導(dǎo)圖吉多·范羅蘇姆“Python之父”指的是Python的創(chuàng)始人吉多·范羅蘇姆(GuidovanRossum)。吉多·范羅蘇姆1956年出生于荷蘭,并于1982年獲得阿姆斯特丹大學(xué)數(shù)學(xué)和計(jì)算機(jī)科學(xué)碩士學(xué)位。此后,他先后在多個(gè)研究機(jī)構(gòu)工作,包括荷蘭阿姆斯特丹的國(guó)家數(shù)學(xué)與計(jì)算機(jī)科學(xué)研究中心(CWI)等。他以創(chuàng)造Python程序設(shè)計(jì)語(yǔ)言而聞名于世,常被人們稱為“Python之父”。2020年,吉多·范羅蘇姆加入微軟公司。由于Python簡(jiǎn)潔易懂,擴(kuò)展性強(qiáng),受到很多程序員的追捧,他們編寫了很多類庫(kù),使得它的應(yīng)用越來越廣泛,越來越方便,吸引了很多領(lǐng)域內(nèi)的人在使用。尤其在近幾年,谷歌等大型互聯(lián)網(wǎng)公司使用Python語(yǔ)言來編寫Al程序,在機(jī)器學(xué)習(xí)、神經(jīng)網(wǎng)絡(luò)、模式識(shí)別、人臉識(shí)別、定理證明、大數(shù)據(jù)等各個(gè)領(lǐng)域,都產(chǎn)生了眾多可以由Python直接引用的功能模塊。當(dāng)前較流行的深度學(xué)習(xí)框架大多是用Python編寫的,如震驚了國(guó)內(nèi)的AlphaGo,其大部分程序就是Python編寫的。隨著人工智能的火爆,Python幾乎被推上了神壇,獲得了“人工智能標(biāo)配語(yǔ)言"的美譽(yù)。Python的發(fā)展經(jīng)歷了py2.X和py3.X兩個(gè)大的版本,穩(wěn)定的py2.7版本已于2020年正式停止維護(hù),僅保留了商業(yè)維護(hù),這也意味著Python2完全成為了歷史。一般的軟件系統(tǒng)都是后者兼容前者,但是Python在2.7和3.X版本之間卻沒有做到這一點(diǎn),甚至相差甚遠(yuǎn)。當(dāng)前py3.X已經(jīng)更新到了py3.12,為了代碼的穩(wěn)定性,本書采用的是穩(wěn)定版本py3.9及其以上版本。Python除了極少的事情不能做之外,基本上屬于全能,如我們常見的系統(tǒng)運(yùn)維、數(shù)據(jù)庫(kù)、可視化、數(shù)據(jù)分析、機(jī)器學(xué)習(xí)、爬蟲、網(wǎng)頁(yè)開發(fā)、圖形處理、科學(xué)計(jì)算、人工智能等等,已經(jīng)深入到所有的科學(xué)領(lǐng)域。Python語(yǔ)言特點(diǎn)“人生苦短,我用Python!”,這就表明Python語(yǔ)言的簡(jiǎn)單易學(xué),學(xué)而即用的特點(diǎn)。1、簡(jiǎn)單易學(xué)Python的設(shè)計(jì)哲學(xué)是優(yōu)雅、明確、簡(jiǎn)單。語(yǔ)法簡(jiǎn)單,注重解決實(shí)際問題,而不用關(guān)注語(yǔ)言的本身。2、免費(fèi)開源開放源碼。使用者可以自由地發(fā)布這款軟件的拷貝、不像其他軟件有版權(quán)使用限制。3、高級(jí)解釋性語(yǔ)言Python語(yǔ)言是一門高級(jí)編程語(yǔ)言,程序員在開發(fā)時(shí)無(wú)需考慮底層細(xì)節(jié),易于移植。4、可移植性Python語(yǔ)言可在Linux、Windows、Macintosh甚至Android等平臺(tái)上運(yùn)行。5、面向?qū)ο驪ython既支持像C語(yǔ)言一樣面向過程的編程,也支持如C++、JAVA語(yǔ)言一樣面向?qū)ο蟮木幊獭?、可擴(kuò)展性Python提供豐富的API、模塊和工具,以便程序員輕松使用C、C++語(yǔ)言來編寫擴(kuò)充模塊。7、可嵌入性Python程序可以嵌入到C/C++/Matlab程序,從而向用戶提供腳本。8、豐富的庫(kù)Python標(biāo)準(zhǔn)庫(kù)龐大。它可以幫助處理各種工作,有許多其他高質(zhì)量的第三方庫(kù)。9、規(guī)范的代碼Python采用強(qiáng)制縮進(jìn)的方式使得代碼具有較好的可讀性。Anaconda安裝與使用
原生編輯器Windows用戶可以訪問https://P/download,從網(wǎng)站上下載最新的版本,大小約為27MB左右。由于原生的編輯器在使用第三方庫(kù)時(shí),需要設(shè)置較多的運(yùn)行環(huán)境,費(fèi)時(shí)耗力,尤其對(duì)計(jì)算機(jī)系統(tǒng)設(shè)置不熟悉的新手來說,無(wú)所適從。于是一些“自動(dòng)化”的編輯平臺(tái)應(yīng)運(yùn)而生,Anaconda就是這樣一款編輯軟件。該軟件預(yù)裝了一些常用的庫(kù),安裝Anaconda后即可使用,真正體現(xiàn)了“注重解決實(shí)際問題,而非語(yǔ)言本身”,只是體型龐大了些,約700M上下。做數(shù)據(jù)分析大多是基于Anaconda下的Spyder或Jupyternotebook編輯器,畢竟Spyder和Jupyternotebook已成為數(shù)據(jù)分析的標(biāo)準(zhǔn)環(huán)境。Anaconda是Python的一個(gè)開源發(fā)行版本,主要面向科學(xué)計(jì)算。Anaconda中增加了condainstall命令來安裝第三方庫(kù),方法跟pip一樣。當(dāng)然在Anaconda的Prompt下也可以使用pipinstall安裝第三方工具包。Anaconda官方下載網(wǎng)址為:/download。Anaconda發(fā)展更新較快,下載時(shí)請(qǐng)拉到頁(yè)面下方,按照自己機(jī)器配置情況,下載適配的版本,下載界面如圖1-1所示。若需要下載往期版本可直接到/archive/選擇下載(本課程選擇的是Anaconda3-2023.09-0-Windows-x86_64.exe)。下載后直接雙擊安裝,可自選安裝位置。但請(qǐng)注意,安裝路徑最好不要有中文字符,防止運(yùn)行代碼時(shí)出現(xiàn)一些意想不到的錯(cuò)誤。安裝完成后,在開始菜單里可以看到如下圖所示的目錄。Python有很多成熟的編輯器,至于編輯器的好歹優(yōu)劣,編者認(rèn)為適合自己的才是最好的。本書將采用Anaconda下的Spyder和JupyterNotebook,偶爾會(huì)使用python原生編輯器。一般情況下,個(gè)人寫代碼時(shí)用Spyder比較方便,在進(jìn)行教學(xué)或者演講交流時(shí),用Jupy或許更勝一籌,畢竟它可以在演講過程中進(jìn)行代碼交互,最后還可以將演講過程導(dǎo)出保存為html或者pdf格式。安裝第三方庫(kù)Anaconda安裝第三方包很簡(jiǎn)單,只需要在開始菜單Anaconda下選定“AnacondaPrompt”單擊即可,在彈出的窗口命令行中輸入“condainstallscrapy”即可安裝scrapy。但有些時(shí)候用condainstall安裝一些第三方庫(kù)時(shí),卻被提示PackageNotFoundError,此時(shí)可改為pipinstall安裝試試。在安裝第三方庫(kù)或者模塊時(shí),很可能因?yàn)閹?kù)較大而下載速度又很慢,導(dǎo)致安裝不成功,此時(shí)可引用鏡像來安裝,常用的鏡像有清華鏡像和豆瓣鏡像,具體方法如下。清華鏡像網(wǎng)址:/simple豆瓣鏡像網(wǎng)址:/simple如使用清華鏡像安裝tensorflow,輸入如下命令行。pipinstall-i/simpletensorflow有些包和庫(kù)還需要自行下載源碼安裝包后才能安裝,不過已有“好事者”收集好了相關(guān)的資料,直接到/~gohlke/pythonlibs上下載即可。基本語(yǔ)法Python的語(yǔ)法一般是一句占一行;邏輯層級(jí)關(guān)系是靠換行后空4個(gè)空格來體現(xiàn)的;注釋符采用#表示;多行注釋采用三引號(hào),包括三單引號(hào)(''')或者三雙引號(hào)(“"")都可以。所謂注釋,就是解釋、說明此行代碼的功能、用途,但不被計(jì)算機(jī)執(zhí)行。在寫代碼的時(shí)候,要養(yǎng)成給代碼寫注釋的良好習(xí)慣。養(yǎng)成寫注釋的好習(xí)慣不僅給自己帶來方便,也給其他人理解代碼帶來了方便。s="I'manewcomer."#字符串用雙引號(hào)引起來foriins:print(i,end=';')#該行是for行的二級(jí)層次,所以行首空4個(gè)空格【例1-1】層級(jí)關(guān)系及輸出。I;';m;;a;;n;e;w;;c;o;m;e;r;.;上面的代碼輸出如下:注釋代碼有以下兩種方式:(1)在一行中,“#”后的語(yǔ)句表示注釋,不被計(jì)算機(jī)執(zhí)行,如例1-2中的第1和第9行。(2)如果要進(jìn)行大段的注釋可以使用三個(gè)單引號(hào)(''')或者雙引號(hào)(""")將注釋內(nèi)容包裹起來,如例1-2中的第3至5行的內(nèi)容,被第2行和第6行的雙三引號(hào)包裹起來了。單引號(hào)和雙引號(hào)在使用上沒有本質(zhì)的差別,但同時(shí)使用時(shí)要區(qū)別對(duì)待?!纠?-2】代碼注釋(在spyder下輸入代碼)#-*-coding:utf-8-*-"""遍歷list中的元素CreatedonFriFeb2614:17:372021@author:yubg"""lis=[1,2,3]foriinlis:#半角狀態(tài)冒號(hào)不能少,下一行注意縮進(jìn)print(i)用縮進(jìn)來表示分層
代碼程序是有結(jié)構(gòu)的,一般有順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)三種類型,所以代碼及代碼塊之間是有邏輯層級(jí)關(guān)系的。Python的代碼及代碼塊是使用代碼縮進(jìn)4個(gè)空格來表示層級(jí),當(dāng)然也可以使用一個(gè)Tab鍵來替代4個(gè)空格,但不要在代碼中混合使用Tab鍵和空格來進(jìn)行縮進(jìn),這會(huì)使程序在跨平臺(tái)時(shí)不能正常運(yùn)行,官方推薦的做法是使用四個(gè)空格表示一個(gè)層級(jí)關(guān)系。一般來說行尾遇到“:”就表示下一行縮進(jìn)的開始.變量的命名變量名的長(zhǎng)度不限,但應(yīng)力求簡(jiǎn)單易讀。變量名的第一個(gè)字符必須是英文字母、下劃線或中文;其余字符可以是英文字母、數(shù)字、下劃線或中文。不能使用Python內(nèi)置的關(guān)鍵字。不能使用特殊字符,如空格、@、%以及$等。變量名對(duì)字母大小寫敏感,必須區(qū)分大小寫字母,如“day”和“Day”是不同的兩個(gè)變量。Python的變量命名一般采用簡(jiǎn)單、易懂、盡可能短的單詞加下劃線的形式(也稱駝峰命名法),以增加代碼的可讀性,如student_name、teacher_age等。變量的名稱不能是數(shù)字開頭,也不能用已有的內(nèi)置的函數(shù)名命名,如print、if等關(guān)鍵字,否則會(huì)引起系統(tǒng)沖突出錯(cuò)。為了避免出現(xiàn)運(yùn)行異常,盡可能地少用中文命名。
在Python中關(guān)鍵字(也稱保留字)很多,常見的有type、len、id、copy、range、if、for、while、pass、False、class、finally、is、return、None、continue、lambda、try、True、def、from、nonlocal、and、del、global、not、with、as、elif、or、yield、assert、else、import、break、except、in、raise等。在python中,變量還可以用中文來命名,但不建議,如:中國(guó)='China'。一般地,標(biāo)識(shí)符以特殊符號(hào)開頭或結(jié)尾的都有其特殊的含義。單下劃線開頭的變量表示不能直接訪問的類的屬性,如_name。雙下劃線開頭的變量表示類的私有成員,如__add。雙下劃線開頭和結(jié)尾的變量表示是專用標(biāo)識(shí)符,如__init__。020:這個(gè)標(biāo)識(shí)符只有數(shù)字構(gòu)成,違反了開頭字符不能是數(shù)字的法則;3name:這個(gè)標(biāo)識(shí)符也是違反了不能以數(shù)字開頭的約定;a-1:這個(gè)標(biāo)識(shí)符中包含不合法的字符(-);id:這個(gè)標(biāo)識(shí)符是Python中的關(guān)鍵字,應(yīng)避免使用;manandwoman:這個(gè)標(biāo)識(shí)符包含非法的字符空格。下面的標(biāo)識(shí)符命名都是不正確的:
一般地,Python一條代碼語(yǔ)句占一行,在每條語(yǔ)句的結(jié)尾處不需要使用分號(hào)“;”。但在Python中也可以使用分號(hào),表示將兩條簡(jiǎn)單語(yǔ)句寫在一行。分號(hào)還有一個(gè)作用,使用在一行語(yǔ)句的末尾,表示對(duì)本行語(yǔ)句的結(jié)果不打印輸出。但如果一條語(yǔ)句較長(zhǎng)要分幾行來寫,可以在行末使用反斜杠“\”來進(jìn)行換行。語(yǔ)句斷行上面的代碼和下面的代碼在輸出效果上是一樣的。下面的代碼中第一行末尾出現(xiàn)的“\”表示此行與下一行是一個(gè)代碼語(yǔ)句行。所以反斜杠“\”在這里是續(xù)行符號(hào),目的是為了人眼的閱讀舒適而將代碼用“\”分成了兩行。a='Beautifulisbetterthanugly.Explicitisbetterthanimplicit.Simpleisbetterthancomplex.'a='Beautifulisbetterthanugly.Explicitisbetterthanimplicit.\Simpleisbetterthancomplex.'
frompandasimportDataFrame#導(dǎo)入模塊中的函數(shù),后面細(xì)講frompandasimportSeriesdf=DataFrame({'age':Series([26,85,64]),'name':Series(['Ben','Joh','Jef'])})print(df)
一般地,系統(tǒng)能夠自動(dòng)識(shí)別換行,如在一對(duì)括號(hào)中或三引號(hào)之間均可換行。例如下面代碼中的第三行較長(zhǎng),若要對(duì)其分行,則必須在括號(hào)內(nèi)進(jìn)行(包括圓括號(hào)、方括號(hào)和花括號(hào)),分行后的第二行一般空四個(gè)空格,但是為了代碼的美觀,一般還是建議分行后的第二行要空一些合適的空格,對(duì)齊代碼,以清晰地顯示出邏輯層次感。所有的計(jì)算機(jī)語(yǔ)言基本上都有這么一句開篇的代碼:print("HelloWorld")。Python當(dāng)然也不例外。在原生IDLE編輯器提示符>>>下直接輸入print("HelloWorld")并回車,觀察其效果。如果不出意外,應(yīng)該輸出如下。>>>print("HelloWorld!")HelloWorld!print()的作用print()的作用是在輸出窗口中顯示一些文本或結(jié)果,便于監(jiān)控和驗(yàn)證數(shù)據(jù)。print()函數(shù)可以帶入?yún)?shù)end,如在例1-2中對(duì)最后一行代碼進(jìn)行修改,添加參數(shù)end=';',發(fā)現(xiàn)其輸出的1、2、3不再是各占一行,而是用“;”分隔后顯示在一行上。In[1]:lis=[1,2,3]
foriinlis:#半角狀態(tài)冒號(hào)不能少,下一行注意縮進(jìn)
print(i,end=';')
1;2;3;
【例1-3】輸出參數(shù)設(shè)置。例1-1的那段代碼也可以寫成如下代碼來實(shí)現(xiàn)。s="I'manewcomer."foriinrange(len(s)):print(s[i],end=';')左邊的代碼輸出跟例1-1代碼輸出一致。I;';m;;a;;n;e;w;;c;o;m;e;r;.;這里print()函數(shù)中end參數(shù)表示打印時(shí)使用等號(hào)后的符號(hào)將他們隔開并打印在一行。也可以去掉end參數(shù),試著打印看看效果。在計(jì)算機(jī)處理程序代碼時(shí),大部分都是在做邏輯運(yùn)算和數(shù)學(xué)運(yùn)算,這就涉及到變量和表達(dá)式之間的連接符號(hào),這些符號(hào)稱之為運(yùn)算符。運(yùn)算符算術(shù)運(yùn)算符算術(shù)運(yùn)算符是處理四則運(yùn)算的符號(hào),類似于我們數(shù)學(xué)中的加減乘除,他們的優(yōu)先級(jí)關(guān)系也是先乘除后加減,有括號(hào)的先計(jì)算括號(hào)。具體的計(jì)算符號(hào)見下表1-1所示。運(yùn)算符說明實(shí)例計(jì)算結(jié)果+加:兩個(gè)對(duì)象相加1.2+34.2?減:兩個(gè)對(duì)象相減2–11*乘:兩個(gè)操作數(shù)相乘,或返回一個(gè)被重復(fù)若干次的字符串3*5'a'*315'aaa'/除:兩個(gè)操作數(shù)相除(總是浮點(diǎn)數(shù))4/22.0%取模:返回除法(/)的余數(shù)7%21//取整除(地板除):返回商的整數(shù)部分7//23**冪:返回x的y次冪,相當(dāng)于pow(x,y)2**38表1-1數(shù)值運(yùn)算符【例1-4】數(shù)值運(yùn)算。In[1]:6%3#取余Out[1]:0
In[2]:5//2#取商Out[2]:2運(yùn)算符說明實(shí)例計(jì)算結(jié)果abs(x)返回x的絕對(duì)值abs(-2)2int(x)返回x的整數(shù)值int(2.7)2float(x)返回x的浮點(diǎn)數(shù)float(3)3.0complex(re,im)定義復(fù)數(shù)complex(1,-2)(1-2j)c.conjugate()返回復(fù)數(shù)的共軛復(fù)數(shù)complex(1,-2).conjugate()(1+2j)divmod(x,y)相當(dāng)于(x//y,x%y)divmod(5,2)(2,1)pow(x,y)返回x的y次方pow(2,3)8表1-2函數(shù)運(yùn)算In[3]:int(2.7)#取整Out[3]:2
In[4]:divmod(7,3)Out[4]:(2,1)
In[5]:pow(2,3)Out[5]:8賦值運(yùn)算符運(yùn)算符示例示例說明=x=2把2賦值給x+=x+=2把x加2再賦值給x,即x=x+2?=x?=2把x減2再賦值給x,即x=x?2*=x*=2把x乘以2再賦值給x,即x=x*2/=x/=2把x除以2再賦值給x,即x=x/2%=x%=2把x除以2取模(取余數(shù))再賦值給x,即x=x%2//=x//=2把x除以2取整數(shù)再賦值給x,即x=x//2**=x**=2把x取2次冪再賦值給x,即x=x**2表1-3賦值運(yùn)算符In[1]:i=0
...:i=i+1
...:print(i)1
In[2]:i+=1#此處i值已是1
...:print(i)2【例1-5】賦值運(yùn)算。邏輯比較運(yùn)算符邏輯運(yùn)算符是針對(duì)真(True)和假(False)(布爾值)兩種情況的運(yùn)算,其運(yùn)算結(jié)果仍然是一個(gè)布爾值。Python中的邏輯運(yùn)算主要包括邏輯與and、邏輯或or、邏輯非not。運(yùn)算符說
明示例and邏輯與,左至右:當(dāng)and兩側(cè)均為True時(shí)返回True,否則返回False
xandyor邏輯或,左至右:當(dāng)or兩側(cè)有一側(cè)為True則返回True,否則返回False
xorynot邏輯非,右至左:如果右側(cè)為False返回True;否則返回Falsenotx表1-4邏輯運(yùn)算符運(yùn)算符說明示例>
大于:如果左操作數(shù)大于右操作數(shù),則為Truex>y<
小于:如果左操作數(shù)小于右操作數(shù),則為Truex<y==等于:如果兩個(gè)操作數(shù)相等,則為Truex==y!=不等于:如果兩個(gè)操作數(shù)不相等,則為Truex!=y>=大于等于:如果左操作數(shù)大于或等于右操作數(shù),則為Truex>=y<=小于等于:如果左操作數(shù)小于或等于右操作數(shù),則為Truex<=y對(duì)變量或者表達(dá)式的結(jié)果進(jìn)行大小比較的運(yùn)算符,稱之為比較運(yùn)算符或關(guān)系運(yùn)算符。比較運(yùn)算符如表1-5所示。表1-5比較運(yùn)算符【例1-6】比較運(yùn)算。In[1]:5==4or5!=4Out[1]:True5==4表示5和4是相等的,這顯然不對(duì),其計(jì)算結(jié)果為False;5!=4表示5和4是不相等的,計(jì)算結(jié)果為True,所以False和True之間的or關(guān)系是只要有一個(gè)為真即真,故結(jié)果為True。In[2]:(5==4)or(5!=4)Out[2]:True為了表達(dá)式之間的關(guān)系更明晰,上面的代碼可以寫成(5==4)or(5!=4)。成員身份運(yùn)算符成員身份運(yùn)算表示的是歸屬判斷的真假。成員運(yùn)算符表示的是該變量或表達(dá)式是否在某個(gè)指定的序列中,成員運(yùn)算符如表1-6所示。而身份運(yùn)算符是判斷和檢查兩個(gè)變量或表達(dá)式是否位于存儲(chǔ)器的同一部分,身份運(yùn)算符如表1-7所示。運(yùn)算符含義示例in如果在指定序列中找到該值或變量,則返回True,否則返回False2inxnotin如果在指定序列中沒有找到該值或變量,則返回True,否則返回False2notinx運(yùn)算符含義示例is如果操作數(shù)相同,則為True(引用同一個(gè)對(duì)象)xisyisnot如果操作數(shù)不相同,則為True(引用不同的對(duì)象)xisnoty表1-7身份運(yùn)算符表1-6成員運(yùn)算符In[1]:s="Iamateacher."
...:t="Iamold."
...:"I"insOut[1]:True
In[2]:tissOut[2]:False【例1-7】成員身份運(yùn)算。位運(yùn)算符位運(yùn)算符是把數(shù)值看成二進(jìn)制數(shù)來計(jì)算,因此在進(jìn)行位運(yùn)算時(shí),需要先進(jìn)行二進(jìn)制轉(zhuǎn)換,然后才能進(jìn)行運(yùn)算。位運(yùn)算符如表1-8所示。表1-8位運(yùn)算符運(yùn)算符含義示例&按位與(AND):參與運(yùn)算的兩個(gè)值的相應(yīng)位都為1,則該位的結(jié)果為1,否則為0x&y|按位或(OR):參與運(yùn)算的兩個(gè)值的相應(yīng)位有一個(gè)為1,則該位的結(jié)果為1,否則為0x|y~按位翻轉(zhuǎn)/取反(NOT):對(duì)數(shù)據(jù)的每個(gè)二進(jìn)制位取反,即把1變?yōu)?,把0變?yōu)?~x^按位異或(XOR):當(dāng)兩個(gè)對(duì)應(yīng)的二進(jìn)制位相異時(shí),結(jié)果為1x^y>>
按位右移:運(yùn)算數(shù)的各個(gè)二進(jìn)制位全部右移若干位x>>2<<
按位左移:運(yùn)算數(shù)的各個(gè)二進(jìn)制位全部左移若干位,高位丟棄,低位不補(bǔ)0x<<2In[1]:print("12&7的計(jì)算結(jié)果為:"+str(12&7))12&7的計(jì)算結(jié)果為:4
In[2]:print("12|7的計(jì)算結(jié)果為:"+str(12|7))12|7的計(jì)算結(jié)果為:15
In[3]:print("12^7的計(jì)算結(jié)果為:"+str(12^7))12^7的計(jì)算結(jié)果為:11
In[4]:print("~12的計(jì)算結(jié)果為:"+str(~12))~12的計(jì)算結(jié)果為:-13
【例1-8】位運(yùn)算。運(yùn)算符的優(yōu)先級(jí)是指在表達(dá)式運(yùn)算中哪一部分先計(jì)算,哪一部分后計(jì)算,類似于數(shù)學(xué)中的四則運(yùn)算。同一優(yōu)先級(jí)的運(yùn)算從左至右執(zhí)行運(yùn)算。有括號(hào)的,先執(zhí)行括號(hào)內(nèi)的運(yùn)算。具體的優(yōu)先級(jí)見表1-9所示。運(yùn)算符的優(yōu)先級(jí)表1-9運(yùn)算符的優(yōu)先級(jí)類型說明優(yōu)先級(jí)**冪由
下
至
上
依
次
遞
增~、+、-取反、正號(hào)、負(fù)號(hào)*、/、%、//算術(shù)運(yùn)算符+、-算術(shù)運(yùn)算符<<、>>位運(yùn)算符中的左移、右移&按位與^按位異或|按位或<、<=、>、>=、!=、==比較運(yùn)算符In[1]:6<5+2**(3-6%2)Out[1]:True【例1-9】運(yùn)算優(yōu)先級(jí)。大數(shù)據(jù)分析:基于Python
第2章數(shù)據(jù)類型常見的數(shù)據(jù)類型有:數(shù)值型:整數(shù)類型(int)、浮點(diǎn)數(shù)類型(float)和復(fù)數(shù)型(complex),用于處理數(shù)值計(jì)算和算術(shù)運(yùn)算。字符串類型(str):用于表示和處理文本和字符序列。列表(list)和元組(tuple):用于存儲(chǔ)和操作多個(gè)數(shù)據(jù)元素,例如有序集合。字典(dictionary):用于存儲(chǔ)和查找鍵-值對(duì),常用于構(gòu)建映射關(guān)系。集合(set):用于存儲(chǔ)唯一的元素,提供集合操作(如并集、交集等)。布爾類型(bool):用于表示真(True)或假(False)的邏輯值。2.1字符串
像a、4、%、<等單個(gè)字母、數(shù)字、符號(hào),我們稱之為字符型。字符型(str)是一種數(shù)據(jù)類型。字符型的變量可以存儲(chǔ)任何單個(gè)的字符,但該字符必須用引號(hào)引起來,單引號(hào)或者雙引號(hào)均可,如var='a',表示變量var是一個(gè)字符型。
字符串(string)表示由多個(gè)字符組成,是一串字符的序列,可以包含任何字符,如字母、數(shù)字、符號(hào)、空格等等。字符串通常用引號(hào)(單引號(hào)或雙引號(hào))引起來表示,例如“Hello,world!”,所以一個(gè)單詞、一句話、一首詩(shī)或一篇文章等,用引號(hào)引起來,它就是字符串。字符串可進(jìn)行多種操作,如拼接、截取、比較等。字符串中的字符是有順序的,從左到右按自然數(shù)(從0開始)的順序進(jìn)行編號(hào),這個(gè)順序號(hào)稱為索引(index)。如a="python",第一個(gè)字母p的編號(hào)就是0,所以p的索引就是0,依此類推,字母y的索引是1,最后一個(gè)字母n的索引是5。這個(gè)索引稱為順序索引。索引也可以從右到左,記為-1,-2,…等等,稱為逆序索引。如上a="python"的p字母的索引為-6,字母n的索引為-1。
字符串中的字符可以按照索引號(hào)提取或查找,如從a="python"中提取字符y,y的索引號(hào)為1或-5,y可用記號(hào)"python"[1]表示出來,也可表示為"python"[-5]、a[1]、a[-5]。代碼演示如下。In[1]:a="python"...:print(a[1])y
In[2]:a[-5]#可以不用print(),直接運(yùn)行Out[2]:'y'
In[3]:"python"[1]Out[3]:'y'
In[4]:"python"[-5]Out[4]:'y'所以若想從字符串中截取一個(gè)片段,需要索引號(hào)向后增加1,我們把這種截取稱為切片。格式為變量名或字符串后帶中括號(hào)[],括號(hào)內(nèi)為起止(start和stop)索引號(hào)兩個(gè)參數(shù),起止索引號(hào)間用冒號(hào)隔開,In[5]:a[2:5]Out[5]:'tho'切片的格式為:var[start:stop:step]其中:var表示字符串或字符串變量start表示起始位置的索引號(hào)stop表示結(jié)束位置的索引號(hào),不包含該索引的字符step表示步長(zhǎng),默認(rèn)步長(zhǎng)為1當(dāng)切片范圍從0開始時(shí),start可以省略不寫,同樣當(dāng)范圍到左后一個(gè)字符時(shí),stop也可以省略不寫,如var[:3]等同var[0:3],如上例中的b[0:10:2]可以寫成b[::2]。當(dāng)step取負(fù)值時(shí),表示逆序。In[9]:b[::2]Out[9]:'13579'
In[10]:a[::-1]#該方法也常用于字符串翻轉(zhuǎn)Out[10]:'nohtyp'字符串是可以相加的,如字符串a(chǎn)和b相加,表示把a(bǔ)和b連接起來。In[11]:a+bOut[11]:'python123456789'字符串也可乘以一個(gè)數(shù),表示重復(fù)。字符串a(chǎn)*2,表示將a重復(fù)2次。In[12]:a*2Out[12]:'pythonpython'
字符串還有很多獨(dú)有的方法,比如將字符串a(chǎn)中的所有字母大寫、首字母大寫,甚至可以判斷a中的字符是全為數(shù)字還是字母等。In[13]:a.upper()#將字符串中字母大寫Out[13]:'PYTHON'
In[14]:a.isalpha()#判斷字符串中字符是否全為字母,返回邏輯值Out[14]:True
In[15]:a.isdigit()#判斷字符串中的字符是否全為數(shù)字Out[15]:False
In[16]:a.isalnum()#判斷字符串是否由數(shù)字和字母組成Out[16]:True
In[17]:a.find("t")#在字符串中查找字符t,返回找到的第一個(gè)索引Out[17]:2
In[18]:a.index("t")#在字符串中查找字符t的索引,返回第一個(gè)Out[18]:2
In[19]:a.replace("o","e")#將字符串中的字符o替換成eOut[19]:'pythen'字符串的方法較多,常用的如下。str.replace(old,new):將指定的舊字符串替換為新字符串。str.strip():去掉字符串兩端的空白字符。str.split():按空格或指定的分隔符將字符串拆分為多個(gè)部分,并返回一個(gè)列表。str.startswith(prefix):檢查字符串是否以指定的前綴開頭。str.endswith(suffix):檢查字符串是否以指定的后綴結(jié)尾。str.upper():將字符串轉(zhuǎn)換為大寫形式。str.lower():將字符串轉(zhuǎn)換為小寫形式。str.capitalize():將字符串的首字母大寫。str.title():將字符串中每個(gè)單詞的首字母大寫。str.isupper():檢查字符串是否全是大寫字母。str.islower():檢查字符串是否全是小寫字母。str.join(iterable):使用字符串作為連接符,連接可迭代對(duì)象中的元素。str.find(substring):在字符串中查找指定的子字符串,并返回它的起始位置。str.isalpha():檢查字符串是否只包含字母字符。str.isdigit():檢查字符串是否只包含數(shù)字字符??捎煤瘮?shù)type()函數(shù)來測(cè)試變量的類型;測(cè)一個(gè)字符串的長(zhǎng)度(包含有多少個(gè)字符)可用函數(shù)len()。In[20]:type(a)Out[20]:str
In[21]:len(a)Out[21]:62.2列表
在Python中,列表(List)是一種有序、可變并且允許重復(fù)元素的數(shù)據(jù)類型。列表使用方括號(hào)[]表示,每個(gè)值之間用逗號(hào)分隔,這里的每個(gè)值稱為元素。如:lsi_1=[1,2,3,4,5]列表中可以包含不同數(shù)據(jù)類型的元素,如整數(shù)、浮點(diǎn)數(shù)、字符串,甚至是列表。In[1]:lsi_1=[1,2,3,4,5]
In[2]:lis_2=[1,2.5,"Hello",True,[1,2,3]]
In[3]:lis_2Out[3]:[1,2.5,'Hello',True,[1,2,3]]
列表是可變的,這意味著可以通過索引訪問和修改列表中的元素。列表的索引同字符串的索引。In[4]:q=[10,20,30,40,50]...:print(q[0])10
In[5]:print(q[-1])#逆索引訪問最后一個(gè)元素50
In[6]:q[2]=35#修改列表中索引號(hào)為2的元素...:qOut[6]:[10,20,35,40,50]修改列表中的某個(gè)元素,就是對(duì)這個(gè)位置上進(jìn)行賦值。列表還支持切片操作,可以通過指定起始索引和結(jié)束索引來獲取子列表:In[7]:lis_1=[1,2,3,4,5]...:print(lis_1[1:4])#輸出[2,3,4],獲取索引為1到3的子列表[2,3,4]
In[8]:print(lis_1[:3])#輸出[1,2,3],從頭部獲取索引為0到2的子列表[1,2,3]
In[9]:print(lis_1[2:])#輸出[3,4,5],從索引為2開始獲取到最后的子列表[3,4,5]
列表像字符串一樣,也具有許多其他常用的方法,如添加元素list.append()、合并列表list.extend()、計(jì)算列表長(zhǎng)度len(list)等等。In[10]:q.append("a")#給列表追加元素
In[11]:qOut[11]:[10,20,35,40,50,'a']
In[12]:q.extend(lis_1)#合并兩個(gè)列表
In[13]:qOut[13]:[10,20,35,40,50,'a',1,2,3,4,5]合并兩個(gè)列表除了extend()方法,也可以直接使用+法,如q+lis_1。當(dāng)需要在列表中指定的索引位置插入一個(gè)元素時(shí),可使用insert()方法。In[14]:w=[1,2,3,4]...:w.insert(2,"a")#在w中的索引為2的位置上插入元素a
In[15]:wOut[15]:[1,2,'a',3,4]使用del關(guān)鍵字可以刪除列表中指定索引位置的元素,或者刪除整個(gè)列表。In[16]:delw[2]#刪除w中的索引為2的是元素
In[17]:wOut[17]:[1,2,3,4]In[18]:w.pop(1)#刪除索引號(hào)為1的元素,并會(huì)返回被刪除的元素Out[18]:2
In[19]:wOut[19]:[1,3,4]
In[20]:w.pop()#默認(rèn)刪除列表中最后一個(gè)元素Out[20]:4
In[21]:wOut[21]:[1,3]pop()方法用于刪除指定索引位置的元素,并返回被刪除的元素,默認(rèn)刪除最后一個(gè)元素。In[22]:delw#刪除整個(gè)列表
In[23]:w#列表已經(jīng)被刪除,所以會(huì)拋出變量不存在錯(cuò)誤Traceback(mostrecentcalllast):
CellIn[36],line1w
NameError:name'w'isnotdefined
列表刪除元素也可以使用remove()方法,remove()方法用于按照給定的元素進(jìn)行刪除,刪除的是列表中的第一個(gè)匹配項(xiàng)(從左到右)。In[24]:r=[10,"a",35,40,50,'a',1,2,3,4,5]
In[25]:r.remove("a")#刪除元素a,從左到右第一個(gè)
In[26]:rOut[26]:[10,35,40,50,'a',1,2,3,4,5]
In[27]:delr[3:5]#刪除列表中的一個(gè)切片
In[28]:rOut[28]:[10,35,40,1,2,3,4,5]
列表還有一些其他的函數(shù)和方法,如測(cè)列表的長(zhǎng)度(包含元素的個(gè)數(shù))、最大值、最小值、排序、索引查詢等In[29]:len(r)Out[29]:8
In[30]:sorted(r)#利用函數(shù)排序,默認(rèn)為升序Out[30]:[1,2,3,4,5,10,35,40]
In[31]:r#利用sorted()排序不改變?cè)瘮?shù)Out[31]:[10,35,40,1,2,3,4,5]
In[32]:sorted(r,reverse=True)#添加參數(shù)reverse=False可逆序Out[32]:[40,35,10,5,4,3,2,1]
In[33]:r.sort()#利用方法排序,默認(rèn)升序,原列表被改變In[34]:rOut[34]:[1,2,3,4,5,10,35,40]
In[35]:r.sort(reverse=True)#添加參數(shù)reverse=True可逆序
In[36]:rOut[36]:[40,35,10,5,4,3,2,1]
In[37]:r.reverse()#對(duì)列表逆序
In[38]:rOut[38]:[1,2,3,4,5,10,35,40]
In[39]:max(r)#求列表中的最大值Out[39]:40
In[40]:min(r)#求列表中的最小值Out[40]:1
In[41]:r.index(35)#求列表中元素35的索引號(hào)Out[41]:6
In[42]:r.count(2)#統(tǒng)計(jì)列表中某個(gè)元素出現(xiàn)的次數(shù)Out[42]:1
也可以查找列表中出現(xiàn)次數(shù)最多的元素,利用max()函數(shù)中的參數(shù)key,key的值為列表的方法,注意省略方法后面的括號(hào)()。In[43]:nums=[2,1,3,6,5,1,2,1]...:most=max(nums,key=nums.count)#出現(xiàn)頻次最大的數(shù)...:mostOut[43]:11表示是nums列表中出現(xiàn)次數(shù)最多的元素。2.3元組Python中的元組(tuple)是一種不可變、有序的元素集合,其中每個(gè)元素可以是任意類型。
創(chuàng)建方法與列表相似,不同的是用小括號(hào)(),并且元組是不可變的,即元組是不能更改其中的元素。In[1]:t=(1,2,"a",[3,4])
In[2]:tOut[2]:(1,2,'a',[3,4])In[3]:t[3]Out[3]:[3,4]
In[4]:len(t)Out[4]:4
In[5]:type(t)Out[5]:tuple元組的索引切片方法同列表,包括一些函數(shù)如len()、type()等。
元組和列表之間可以相互轉(zhuǎn)化,將元組轉(zhuǎn)化為列表,只需使用list()函數(shù)即可,將列表轉(zhuǎn)化為元組只需使用tuple()即可。In[6]:list(t)#將t元組轉(zhuǎn)化為列表Out[6]:[1,2,'a',[3,4]]
In[7]:tuple(_)#將列表轉(zhuǎn)化為元組Out[7]:(1,2,'a',[3,4])說明:?jiǎn)蜗聞澗€“_”在這里作用是表示上一次運(yùn)算的結(jié)果。此處在執(zhí)行l(wèi)ist(t)時(shí)沒有將其賦值給某個(gè)變量,所以用“_”來表示。In[8]:t1=(1,2,3)...:t2=("a","b")
In[9]:t1+t2Out[9]:(1,2,3,'a','b')
In[10]:t2*2#元組乘以數(shù)Out[10]:('a','b','a','b')
In[11]:list(t2)*2#列表乘以數(shù)Out[11]:['a','b','a','b']元組和列表一樣,可以使用“+”和“*”,分別表示元素合并和重復(fù)。2.4字典
字典用花括號(hào)({})創(chuàng)建,字典中的每個(gè)元素是一個(gè)鍵(key)值(key)對(duì),鍵和值之間用冒號(hào)(:)隔開,而元素(多個(gè)鍵值對(duì))之間用逗號(hào)隔開,。Python中的字典(dict)是一種可變、無(wú)序的鍵值對(duì)集合,其中鍵是唯一的不可變數(shù)據(jù)類型。字典是一種非常有用的數(shù)據(jù)類型,它可以用于存儲(chǔ)、訪問和操作數(shù)據(jù),支持高效的查找、插入和刪除操作。In[1]:d={"apple":1,"banana":2,"orange":3}...:dOut[1]:{'apple':1,'banana':2,'orange':3}創(chuàng)建字典的方法比較多,也可以以二元元組、二原列表或者相互交叉等創(chuàng)建。但需要注意的是,列表數(shù)據(jù)類型是不能作為字典的鍵名。In[2]:d1=dict([(1,2),("a","b")])...:d1Out[2]:{1:2,'a':'b'}
In[3]:d2=dict(([1,2],("a","b")))...:d2Out[3]:{1:2,'a':'b'}字典的元素的值是可以修改的,由于字典是無(wú)序的,所以沒有像字符串、列表的索引,但有類似于索引的操作,把鍵名key當(dāng)作索引即可。如上面的字典變量d2,要提取元素鍵為a的值,可以用d2["a"],返回其值value為"b"。In[4]:d2["a"]Out[4]:'b'這種提取字典鍵值的方法僅限于提取的鍵名在字典中存在,否則會(huì)報(bào)錯(cuò)。為了改變這種不友好的方式,可以使用get()方法。get()方法提取的鍵值不一定在字典中存在,若存在則返回提取到對(duì)應(yīng)的值,若字典中不存在,則什么也不返回,當(dāng)然也可以使用參數(shù)給出提示信息,如“你提取的鍵名不存在”。In[5]:d2.get("a")Out[5]:'b'
In[6]:d2.get("d")#沒有d的鍵值對(duì),所以返回空
In[7]:d2.get("d","你提取的鍵名不存在!")Out[7]:'你提取的鍵名不存在!'In[8]:d2["c"]=3#增加元素,因?yàn)閐2中沒有鍵名為“c”的鍵值對(duì)...:d2Out[8]:{1:2,'a':'b','c':3}
In[9]:d2["c"]=0#修改元素的值...:d2Out[9]:{1:2,'a':'b','c':0}
字典增加元素跟修改元素的值一樣。修改元素的值,直接給這個(gè)元素的鍵賦值即可,當(dāng)要修改的元素不存在時(shí),即是添加元素。字典的合并使用update()方法,也可以使用雙*合并{**dict1,**dict2}。In[10]:d1.update(d2)#合并兩個(gè)字典,把d2合并到d1中去
In[11]:d1Out[11]:{1:2,'a':'b','c':0}
In[12]:{**d,**d2}#合并字典Out[12]:{'apple':1,'banana':2,'orange':3,1:2,'a':'b','c':0}In[13]:d1.pop("c")#按照給定的鍵名刪除字典的鍵值對(duì)Out[13]:0
In[14]:d1Out[14]:{1:2,'a':'b'}字典的刪除使用同列表相同的方法pop(),也可以使用del方法。In[15]:d2.items()#將字典轉(zhuǎn)化為“類”二元元組列表模式Out[15]:dict_items([(1,2),('a','b'),('c',0)])
In[16]:list(_)#轉(zhuǎn)化為列表Out[16]:[(1,2),('a','b'),('c',0)]字典可以轉(zhuǎn)化為二元元組或列表,使用items()方法。字典還提供了其他許多方法,用于添加、刪除、訪問和操作鍵值對(duì)。以下是一些常用的字典方法:keys():返回字典中所有的鍵。values():返回字典中所有的值。items():返回字典中所有的鍵值對(duì)。get(key,default):根據(jù)鍵獲取值,如果鍵不存在則返回默認(rèn)值。pop(key[,default]):根據(jù)鍵移除并返回值,如果鍵不存在則返回默認(rèn)值。clear():移除字典中的所有鍵值對(duì)。update(other_dict):將另一個(gè)字典的鍵值對(duì)添加到字典中。deld[key]:根據(jù)鍵刪除字典中的鍵值對(duì)。ind.keys():檢查鍵是否存在于字典中。In[17]:d2.keys()Out[17]:dict_keys([1,'a','c'])2.5集合Python中的集合(set)是一種可變、無(wú)序、唯一元素的集合。集合中的元素沒有重復(fù),因此集合可以用來進(jìn)行去重操作。集合中的元素可以是任意類型,包括數(shù)字、字符串、列表、元組等。
集合用花括號(hào){}表示,元素之間用逗號(hào)分開。注意空集合使用set()表示,{}表示空字典。In[1]:s={1,2,"a","b"}#創(chuàng)建一個(gè)集合
...:sOut[1]:{1,2,'a','b'}
In[2]:a=[1,2,3,1]
...:aa=set(a)#用列表創(chuàng)建一個(gè)集合,過濾掉重復(fù)元素
...:aaOut[2]:{1,2,3}
In[3]:type({})#{}表示空字典Out[3]:dictIn[4]:type(set())#set()表示空集合Out[4]:set集合添加元素可以使用add()方法;刪除元素使用remove()方法。從集合中刪除一個(gè)元素,也可以使用discard()方法,該方法從集合中刪除一個(gè)元素時(shí),如果元素不存在則不會(huì)報(bào)錯(cuò)。In[5]:s.add("d")#增加一個(gè)元素“d”In[6]:sOut[6]:{1,2,'a','b','d'}
In[7]:s.remove("d")#刪除元素“d”In[8]:sOut[8]:{1,2,'a','b'}
In[9]:s.remove("e")#刪除一個(gè)不存在的元素“e”會(huì)報(bào)錯(cuò)Traceback(mostrecentcalllast):CellIn[32],line1s.remove("e")KeyError:'e'In[10]:s.discard("e")#刪除一個(gè)不存在的元素不會(huì)報(bào)錯(cuò)
In[11]:sOut[11]:{1,2,'a','b'}集合數(shù)據(jù)類型用的最多的就是交、并、差。交集使用intersection()方法,獲取兩個(gè)集合的交集,也可以使用“&”運(yùn)算符。并集使用union()方法,獲取兩個(gè)集合的并集,也可以使用“|”運(yùn)算符。差集使用difference()方法,獲取兩個(gè)集合的差集,也可以使用“-”運(yùn)算符。In[12]:s1={1,2,3,"c"}...:s2={"a","b","c"}...:print("s1:",s1,"\n","s2:",s2)s1:{1,2,3,'c'}s2:{'a','b','c'}
In[13]:ersection(s2)#集合的交Out[13]:{'c'}
In[14]:s1&s2#集合的交Out[14]:{'c'}
In[15]:s1.union(s2)#集合的并Out[15]:{1,2,3,'a','b','c'}
In[16]:s1|s2#集合的并Out[16]:{1,2,3,'a','b','c'}
In[17]:s1.difference(s2)#集合的差Out[17]:{1,2,3}
In[18]:s1-s2#集合的差Out[18]:{1,2,3}練習(xí)1.已知:a=250,b=‘250’,請(qǐng)闡述a和b所引用的對(duì)象的區(qū)別。2.
將字符串“map”的字符順序倒轉(zhuǎn)為“pam”。3.請(qǐng)用代碼將字符串’abcd’轉(zhuǎn)化為列表L,再將L還原為字符串’abcd’。4.請(qǐng)?zhí)崛∽约荷矸葑C號(hào)碼中的出生年月日。5.請(qǐng)統(tǒng)計(jì)字符串“Iamateacher,youareastudent.Lifeisshort,Ineedpython.”中字符a和e出現(xiàn)的次數(shù)。6.張三和李四的電話號(hào)碼分別是6601和6602,請(qǐng)將他們的及其號(hào)碼做成一個(gè)字典類型的數(shù)據(jù),并將李四的號(hào)碼改成6603。7.集合set有個(gè)功能就是過濾重復(fù)值。請(qǐng)輸出字符串“Lifeisshort,Ineedpython”中不同的字符,并做成列表。大數(shù)據(jù)分析:基于Python
第3章流程控制3.1條件語(yǔ)句
條件語(yǔ)句也稱判斷語(yǔ)句或分支語(yǔ)句,使用if、elif和else關(guān)鍵字來執(zhí)行不同的代碼塊,根據(jù)條件的真假來選擇性地執(zhí)行特定的代碼。當(dāng)條件分支為二分類時(shí)使用if/else結(jié)構(gòu),當(dāng)多于兩個(gè)分支時(shí)使用if/elif/…/else,elif按照需要使用。語(yǔ)法格式如下: if條件1:
條件1為真時(shí)執(zhí)行代碼塊1 elif條件2:
條件2為真時(shí)執(zhí)行代碼塊2 else:
條件1、2都不為真時(shí)執(zhí)行代碼塊3
條件語(yǔ)句會(huì)按照代碼塊前后順序進(jìn)行逐一判斷,當(dāng)遇到條件為真時(shí),會(huì)執(zhí)行真條件下的代碼塊。In[1]:num=int(input("請(qǐng)輸入一個(gè)數(shù)字:"))...:...:#使用if/else分支判斷數(shù)字是奇數(shù)還是偶數(shù)
...:ifnum%2==0:...:print("您輸入的是一個(gè)偶數(shù)。")...:else:...:print("您輸入的是一個(gè)奇數(shù)。")請(qǐng)輸入一個(gè)數(shù)字:7您輸入的是一個(gè)奇數(shù)。例如判斷輸入的數(shù)的奇偶性。在這個(gè)例子中,首先通過input()函數(shù)從用戶那里獲取一個(gè)數(shù)字,并將其轉(zhuǎn)換為整數(shù)。然后,使用if/else分支來檢查這個(gè)數(shù)字是否是偶數(shù)(即當(dāng)被2除時(shí)余數(shù)為0)。如果條件為真(即數(shù)字是偶數(shù)),則執(zhí)行第一個(gè)代碼塊,打印出“您輸入的是一個(gè)偶數(shù)”。如果條件為假(即數(shù)字不是偶數(shù),也就是奇數(shù)),則執(zhí)行else后面的代碼塊,打印出“您輸入的是一個(gè)奇數(shù)”。接收變量不及格及格中良優(yōu)xx<6060≤x<7070≤x<8080≤x<9090≤x再例如,現(xiàn)有學(xué)生成績(jī)按照如下給出的檔次,判斷來自接收到的成績(jī)屬于哪個(gè)檔次。In[2]:bz=['優(yōu)','良','中','及格','差']#成績(jī)層次分類...:s=int(input('請(qǐng)輸入分?jǐn)?shù):'))#接收鍵盤輸入...:...:ifs>=90:...:print(bz[0])...:elifs>=80:...:print(bz[1])...:elifs>=70:...:print(bz[2])...:elifs>=60:...:print(bz[3])...:else:...:print(bz[4])請(qǐng)輸入分?jǐn)?shù):87良輸出結(jié)果為:
條件語(yǔ)句也可以使用在行代碼的表達(dá)式中,稱為三元表達(dá)式。三元表達(dá)式是一種簡(jiǎn)潔的條件語(yǔ)句,它使用三個(gè)操作數(shù):一個(gè)條件表達(dá)式和一個(gè)結(jié)果表達(dá)式,如果條件為真,則返回結(jié)果表達(dá)式1,否則返回結(jié)果表達(dá)式2。三元表達(dá)式的語(yǔ)法如下:value_if_trueifconditionelsevalue_if_false
其中,condition是一個(gè)條件表達(dá)式,如果它的值為True,則返回value_if_true,否則返回value_if_false。
例如,接收一個(gè)變量x,想要檢查它是否大于10,如果是,則打印“Positive”,否則打印“Negative”,實(shí)現(xiàn)代碼如下。In[3]:x=int(input("請(qǐng)輸入整數(shù):"))...:result="Positive"ifx>0else"Negative"...:print(result)請(qǐng)輸入整數(shù):-3Negative
接收到的x值為-3小于0,所以result的值為Negative。3.2循環(huán)語(yǔ)句
循環(huán)語(yǔ)句分為for和while兩種類型,for循環(huán)用于遍歷序列(如列表、元組、字符串)或其他可迭代對(duì)象;while循環(huán)在指定的條件為真時(shí),會(huì)重復(fù)執(zhí)行代碼塊。3.2.1for循環(huán)for循環(huán)主要用于遍歷一個(gè)序列(字符串、列表、元組、字典、集合等,以及一些容器內(nèi)的元素,如range()、zip()等),將序列中的每一個(gè)元素逐個(gè)取出執(zhí)行for代碼行下的代碼塊,直到取完為止。例如,將列表中的元素逐個(gè)打印出來。In[1]:fruits=['蘋果','香蕉','橙子','葡萄']...:foriinfruits:...:print(i)蘋果香蕉橙子葡萄
為了節(jié)省空間,可以將打印結(jié)果顯示在一行,使用分號(hào)進(jìn)行分割,可以使用print()函數(shù)的end參數(shù)。In[2]:fruits=['蘋果','香蕉','橙子','葡萄']...:...:foriinfruits:...:print(i,end=";")蘋果;香蕉;橙子;葡萄;再如使用for循環(huán)計(jì)算列表中所有數(shù)字的和。In[3]:numbers=[1,2,3,4,5]...:sum=0...:foriinnumbers:...:sum+=i#等價(jià)于sum=sum+i...:...:print("列表中所有數(shù)字的和是:",sum)列表中所有數(shù)字的和是:15在這個(gè)例子中,首先創(chuàng)建了一個(gè)包含五個(gè)數(shù)字的列表。然后使用一個(gè)變量sum來存儲(chǔ)列表中所有數(shù)字的和,然后使用for循環(huán)遍歷這個(gè)列表,每次迭代中,變量i會(huì)被賦予列表中的下一個(gè)元素,然后我們將這個(gè)元素加到sum中。最后,我們打印出sum的值,即列表中所有數(shù)字的和。for還可以創(chuàng)建列表、元組或者字典。如將上面的列表numbers中所有奇數(shù)做成一個(gè)新的列表。In[4]:numbers=[1,2,3,4,5]
In[5]:[iforiinnumbersifi%2!=0]Out[5]:[1,3,5]
在上面的[iforiinnumbersifi%2!=0]代碼中,首先創(chuàng)建一個(gè)列表,故外面使用[],內(nèi)部產(chǎn)生的元素用i表示(即第一個(gè)i),i來自于numbers(即foriinnumbers),當(dāng)滿足被2除余數(shù)不等于0時(shí)(即ifi%2!=0),這樣的i才被留在該列表中。3.2.2while循環(huán)while循環(huán)主要用于條件為真時(shí),會(huì)重復(fù)執(zhí)行其下的代碼塊,直到給定的條件不再滿足。while循環(huán)的基本語(yǔ)法如下:whilecondition:block
這里的condition是一個(gè)表達(dá)式,當(dāng)它的結(jié)果為True時(shí),會(huì)執(zhí)行其下的block代碼塊,一旦condition變?yōu)镕alse,循環(huán)就會(huì)停止。例如,使用while循環(huán)計(jì)算5!的值,并返回結(jié)果。In[1]:result=1...:i=1...:whilei<=5:...:result*=i...:i+=1...:print(result)120
在循環(huán)中,使用result變量來保存階乘的結(jié)果,并給出初始值1,再使用i變量來迭代從1到5。每次迭代將i乘以result來計(jì)算階乘的值,并將i增加1。最后,返回輸出階乘值。
注意,在編寫while循環(huán)時(shí),必須確保循環(huán)內(nèi)的代碼能夠改變條件表達(dá)式的值,也稱條件控制,否則可能導(dǎo)致無(wú)限循環(huán)。在無(wú)限循環(huán)中,程序會(huì)一直執(zhí)行下去,直到手動(dòng)停止。這通常不是我們想要的結(jié)果,所以在編寫while循環(huán)時(shí)要特別注意條件控制。In[2]:n=0#方法1...:whilen<5:...:n_squared=n**2...:print(n_squared,end=";")...:n+=10;1;4;9;16;
In[3]:n=0#方法1...:while(n_squared:=n**2)<25:#海象表示法...:print(n_squared,end=";")...:n+=10;1;4;9;16;下面是兩種輸出小于5的自然數(shù)的平方的方法。海象表達(dá)式使用冒號(hào)和等于號(hào)組合(:=)來表示,即使用一個(gè)變量名后跟一個(gè)冒號(hào)和等于號(hào),表示將一個(gè)表達(dá)式的值賦給這個(gè)變量。使用海象表達(dá)式可以簡(jiǎn)化代碼,使代碼更加簡(jiǎn)潔。在代碼行“while(n_squared:=n**2)<25”中,海象表達(dá)式將n**2賦值給變量n_squared,節(jié)省了計(jì)算量,使代碼變得更簡(jiǎn)潔。需要注意的是,海象表達(dá)式只能在Python3.8及以上版本中使用,如果使用較早的版本,則會(huì)出現(xiàn)語(yǔ)法錯(cuò)誤。此外,雖然海象表達(dá)式可以簡(jiǎn)化代碼,但也可能會(huì)降低代碼的可讀性。請(qǐng)?jiān)囘\(yùn)行下面的代碼,觀察輸出的結(jié)果。In[4]:rows=int(input("Enternumberofrows:"))...:k=0...:foriinrange(1,rows+1):#i控制行...:forspaceinrange(1,(rows-i)+1):#控制每行開始的空格數(shù)...:print(end="")#打印每行的*前的空格...:whilek!=(2*i-1):#控制*輸出...:print("*",end="")#同行無(wú)分隔符輸出*...:k+=1#輸出*的個(gè)數(shù)...:k=0#下一行k從0開始...:print()#換行Enternumberofrows:5*************************3.3break與continue在Python中,break和continue都是控制循環(huán)流程的關(guān)鍵字。它們的作用如下:break在循環(huán)中,一旦遇到break,無(wú)論循環(huán)條件是否繼續(xù)為真,都會(huì)立即停止當(dāng)前循環(huán)。例如,在一個(gè)for或while循環(huán)中,如果你在某個(gè)條件下調(diào)用break,那么循環(huán)將立即結(jié)束,程序流程將繼續(xù)在循環(huán)之后的下一行代碼。In[5]:foriin[0,1,2,3,4,5,6,7,8,9]:...:ifi==5:...:break...:print(i)01234
在這個(gè)例子中,當(dāng)i等于5時(shí),break語(yǔ)句將被執(zhí)行,for循環(huán)將立即停止,盡管列表中有0到9的數(shù)字。因此,這段代碼只會(huì)打印出0到4,然后終止整個(gè)循環(huán)。continue是一個(gè)控制流語(yǔ)句,用于跳過當(dāng)前循環(huán)中的剩余語(yǔ)句,并立即開始下一輪循環(huán)。這意味著,如果continue語(yǔ)句在一個(gè)循環(huán)內(nèi)部(例如for或while循環(huán)),那么該循環(huán)的剩余部分將不會(huì)被執(zhí)行,而是立即開始下一輪循環(huán)。In[6]:foriin[0,1,2,3,4,5,6,7,8,9]:...:ifi==5:...:continue...:print(i)012346789
在這個(gè)例子中,當(dāng)i等于5時(shí),continue語(yǔ)句將被執(zhí)行,這會(huì)跳過輸出語(yǔ)句,并立即開始下一輪循環(huán)。因此,這段代碼會(huì)輸出出0到9,但是跳過5。3.4異常處理異常處理是一種處理程序中特殊情況(即異常)的機(jī)制。在編程中,異常是程序運(yùn)行時(shí)發(fā)生的問題,例如運(yùn)算中出現(xiàn)除數(shù)是零,訪問無(wú)效的內(nèi)存區(qū)域等。異常處理可以幫助我們?cè)谶@些問題發(fā)生時(shí)管理程序,不讓程序崩潰。在Python中,異常處理通常使用try,except,else,finally等關(guān)鍵字,其格式如下。try:block1except:block2else:block3finally:block4try下的block1代碼塊是需要測(cè)試的代碼(即有可能會(huì)出現(xiàn)異常情況),在執(zhí)行程序時(shí),首先執(zhí)行block1,此時(shí)block1可能會(huì)發(fā)生意外錯(cuò)誤,當(dāng)block1發(fā)生錯(cuò)誤時(shí),程序?qū)⑦M(jìn)入except下的block2;若不發(fā)生錯(cuò)誤,則進(jìn)入else下的block3。except和else的順序不能顛倒,except必須在else之前,else也可以省略。finall
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 西江醫(yī)院面試考題及答案
- 讀父親讀后感
- 江蘇省常州市新北區(qū)實(shí)驗(yàn)校2023-2024學(xué)年中考沖刺卷數(shù)學(xué)試題含解析
- 銳角正切尺測(cè)試題及答案
- 長(zhǎng)沙職業(yè)技術(shù)學(xué)院《幼兒園環(huán)境創(chuàng)設(shè)與指導(dǎo)》2023-2024學(xué)年第二學(xué)期期末試卷
- 東莞職業(yè)技術(shù)學(xué)院《社會(huì)化營(yíng)銷案例研究》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年云南省昆明市數(shù)學(xué)四下期末復(fù)習(xí)檢測(cè)試題含解析
- 商丘師范學(xué)院《文化差異與跨文化交際》2023-2024學(xué)年第二學(xué)期期末試卷
- 新余學(xué)院《新聞寫作》2023-2024學(xué)年第二學(xué)期期末試卷
- 皖西學(xué)院《裝飾藝術(shù)創(chuàng)作》2023-2024學(xué)年第二學(xué)期期末試卷
- 人教版八年級(jí)信息技術(shù)下冊(cè)全冊(cè)教案
- 左肺占位術(shù)后護(hù)理查房
- 職業(yè)院校技能大賽中職組《直播電商》賽項(xiàng)樣卷
- RCA根本原因分析法在護(hù)理不良事件中的應(yīng)用課件
- 無(wú)機(jī)及分析化學(xué)I(王日為)17572課件
- 【地理】2024屆高三地理一輪復(fù)習(xí)課件《工業(yè)集聚與工業(yè)地域》
- 居民自建樁安裝告知書回執(zhí)
- 期末復(fù)習(xí)Unit+6-10+單元信息摘錄專項(xiàng)練習(xí)-人教版英語(yǔ)八年級(jí)上冊(cè)
- 1 熱工測(cè)量基礎(chǔ)知識(shí)
- 健康教育計(jì)劃執(zhí)行單模板
- TRD60ED培訓(xùn)講義精講
評(píng)論
0/150
提交評(píng)論