版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Python語言程序設(shè)計(jì)(第2版)第1章Python語言基礎(chǔ)Python語言的發(fā)展歷史Python程序的運(yùn)行開發(fā)環(huán)境常量與變量Python數(shù)據(jù)類型常用系統(tǒng)函數(shù)基本運(yùn)算1.1.1Python語言的發(fā)展歷史Python由荷蘭的GuidovanRossum設(shè)計(jì)。Python第一個(gè)版本于1991年初公開發(fā)行。Python2.0于2000年10月發(fā)布,增加了許多新的語言特性。Python3.0于2008年12月發(fā)布,此版本不完全兼容Python2.0。1.1Python語言概述1.1.2Python語言的特點(diǎn)1.Python語言的優(yōu)勢(shì)(1)語法簡潔。組成一個(gè)Python程序也沒有太多的語法細(xì)節(jié)和規(guī)則要求,“信手拈來”就可以組成一個(gè)程序。(2)程序可讀性好。通過強(qiáng)制程序縮進(jìn),Python語言確實(shí)使得程序具有很好的可讀性,同時(shí)Python的縮進(jìn)規(guī)則是也有利于程序員養(yǎng)成良好的程序設(shè)計(jì)習(xí)慣。(3)豐富的數(shù)據(jù)類型。除了基本的數(shù)值類型外,Python語言還提供了字符串、列表、元組、字典和集合等豐富的復(fù)合數(shù)據(jù)類型。(4)開源的語言。各種社區(qū)提供了成千上萬不同功能的開源函數(shù)模塊,而且還在不斷地發(fā)展,這為基于Python語言的快速開發(fā)提供了強(qiáng)大支持。(5)解釋型的語言。用Python語言編寫的程序不需要編譯成二進(jìn)制代碼,而可以直接運(yùn)行源代碼。(6)面向?qū)ο蟮恼Z言。Python語言既可以面向過程,也可以面向?qū)ο?,支持靈活的程序設(shè)計(jì)方式。2.Python語言的局限性Python程序的運(yùn)行速度比較慢。1.1.3Python語言的應(yīng)用領(lǐng)域1.系統(tǒng)維護(hù)與管理在Windows系統(tǒng)下,通過使用pywin32模塊提供的WindowsAPI函數(shù)接口,就可以編寫與Windows系統(tǒng)底層功能相關(guān)的Python程序。利用py2exe模塊可以將Python程序轉(zhuǎn)換為.exe可執(zhí)行程序,使得Python程序可以脫離Python系統(tǒng)環(huán)境來運(yùn)行。2.科學(xué)計(jì)算與數(shù)據(jù)可視化Python中用于科學(xué)計(jì)算與數(shù)據(jù)可視化的模塊有很多,例如NumPy、SciPy、SymPy、Matplotlib等,涉及的應(yīng)用領(lǐng)域包括數(shù)值計(jì)算、符號(hào)計(jì)算、二維圖表、三維數(shù)據(jù)可視化等。
3.?dāng)?shù)據(jù)庫應(yīng)用Python數(shù)據(jù)庫模塊有很多,例如,可以通過內(nèi)置的sqlite3模塊訪問SQLite數(shù)據(jù)庫,使用pywin32模塊訪問Access數(shù)據(jù)庫,使用pymysql模塊訪問MySQL數(shù)據(jù)庫,使用pywin32和pymssql模塊來訪問SQLSever數(shù)據(jù)庫。4.多媒體應(yīng)用PyMedia模塊是一個(gè)用于多媒體操作的Python模塊,可以對(duì)包括WAV、MP3、AVI等多媒體格式文件進(jìn)行編碼、解碼和播放;PyOpenGL模塊封裝了OpenGL應(yīng)用程序編程接口,通過該模塊可在Python程序中集成二維或三維圖形;PIL(PythonImagingLibrary,Python圖形庫)為Python提供了強(qiáng)大的圖像處理功能,并提供廣泛的圖像文件格式支持。5.網(wǎng)絡(luò)應(yīng)用Python語言提供了socket模塊,對(duì)Socket接口進(jìn)行了二次封裝,支持Socket接口的訪問;還提供了urllib、cookielib、httplib、scrapy等大量模塊,用于對(duì)網(wǎng)頁內(nèi)容進(jìn)行讀取和處理;可以使用Python語言編寫CGI程序,也可以把Python程序嵌入到網(wǎng)頁中運(yùn)行;Python語言還支持Web網(wǎng)站開發(fā),比較流行的開發(fā)框架有web2py、django等。6.電子游戲應(yīng)用Pygame就是用來開發(fā)電子游戲軟件的Python模塊,在SDL庫的基礎(chǔ)上開發(fā),可以支持多個(gè)操作系統(tǒng)。使用Pygame模塊,可以在Python程序中創(chuàng)建功能豐富的游戲和多媒體程序。7.?dāng)?shù)據(jù)科學(xué)和人工智能應(yīng)用Pandas是基于NumPy的數(shù)據(jù)處理和分析工具,NLTK用于自然語言處理,jieba用于中文分詞,Wordcloud可以生成詞云圖;Scikit-learn是常用的機(jī)器學(xué)習(xí)模塊;TensorFlow、PyTorch則是常見的深度學(xué)習(xí)框架;Keras是一個(gè)用Python編寫的開源人工神經(jīng)網(wǎng)絡(luò)庫。1.2.1Python系統(tǒng)的下載與安裝從Python官網(wǎng)下載Python系統(tǒng)文件。選擇基于Windows操作系統(tǒng)的當(dāng)時(shí)最新版本進(jìn)行下載。下載完成后,運(yùn)行系統(tǒng)文件,進(jìn)入Python系統(tǒng)安裝界面。選中“Addpython.exetoPATH”復(fù)選框,并使用默認(rèn)的安裝路徑。安裝完成后單擊“Close”按鈕即可。1.2Python語言的開發(fā)環(huán)境1.2.2Python程序的運(yùn)行1.啟動(dòng)Python解釋器1)命令行形式的Python解釋器在Windows系統(tǒng)桌面選擇“開始”菜單中的“Python3.11”→“Python3.11(64-bit)”命令,即啟動(dòng)命令行形式的Python解釋器。2)圖形用戶界面形式的Python解釋器在Windows系統(tǒng)桌面選擇“開始”菜單中的“Python3.11”→“IDLE(Python3.1164-bit)”命令來啟動(dòng)圖形用戶界面形式的Python解釋器。2.Python的運(yùn)行方式1)Python的命令運(yùn)行方式啟動(dòng)Python解釋器后,可以直接在其提示符(>>>)后輸入語句。>>>print("Hello,World!")Hello,World!>>>print(1+3/4)1.752)Python的程序運(yùn)行方式在圖形用戶界面形式的Python解釋器窗口中選擇“File”→“NewFile”命令,或按Ctrl+N快捷鍵,打開Python程序編輯窗口。在其中鍵入程序的全部語句,然后存盤。1.常量在程序運(yùn)行過程中,其值不能改變的數(shù)據(jù)對(duì)象稱為常量(constant)。常量按其值的表示形式區(qū)分它的類型。例如,0、435、-78是整型常量,-5.8、3.14159、1.0是實(shí)型常量(也稱作浮點(diǎn)型常量),'410083'、'Python'是字符串常量。1.3常量與變量2.變量的一般概念在高級(jí)語言中,變量(variable)可以看作是一個(gè)特定的內(nèi)存存儲(chǔ)區(qū),該存儲(chǔ)區(qū)由一定個(gè)數(shù)字節(jié)的內(nèi)存單元組成,并可以通過變量的名字來訪問。高級(jí)語言中的變量具有變量名、變量值和變量地址三個(gè)屬性。變量在它存在期間,在內(nèi)存中占據(jù)一定的存儲(chǔ)單元,以存放變量的值。3.Python變量1)變量的數(shù)據(jù)類型Python語言是一種動(dòng)態(tài)類型語言,變量的數(shù)據(jù)類型是在給變量賦值時(shí)確定,對(duì)變量的每一次賦值,都可能改變變量的類型??梢允褂肞ython內(nèi)置函數(shù)type()來查詢變量的類型。2)對(duì)象及其引用Python語言采用基于值的內(nèi)存管理方式,不同的值分配不同的內(nèi)存空間。Python變量并不是某一個(gè)固定內(nèi)存單元的標(biāo)識(shí),而是對(duì)內(nèi)存中存儲(chǔ)的某個(gè)數(shù)據(jù)的引用(reference),這個(gè)引用是可以動(dòng)態(tài)改變的。4.Python標(biāo)識(shí)符在Python中,標(biāo)識(shí)符由字母、數(shù)字和下劃線(_)組成,但不能以數(shù)字開頭,標(biāo)識(shí)符中的字母是區(qū)分大小寫的。例如,abc、a_b_c、Student_ID都是合法的標(biāo)識(shí)符,sum、Sum、SUM代表不同的標(biāo)識(shí)符。單獨(dú)的下劃線(_)是一個(gè)特殊變量,用于表示上一次運(yùn)算的結(jié)果。
5.Python關(guān)鍵字所謂關(guān)鍵字(keyword),就是Python語言中事先定義的、具有特定含義的標(biāo)識(shí)符,有時(shí)又稱保留字。關(guān)鍵字不允許另作它用,否則執(zhí)行時(shí)會(huì)出現(xiàn)語法錯(cuò)誤。可以在使用import語句導(dǎo)入keyword模塊后使用print(keyword.kwlist)語句查看所有Python關(guān)鍵字。>>>importkeyword>>>print(keyword.kwlist)1.4.1數(shù)值型1.整型數(shù)據(jù)整型數(shù)據(jù)即整數(shù),不帶小數(shù)點(diǎn),但可以有正號(hào)或負(fù)號(hào)。在Python中,整型數(shù)據(jù)的值在計(jì)算機(jī)內(nèi)的表示不是固定長度的,只要內(nèi)存許可,整數(shù)可以擴(kuò)展到任意長度,整數(shù)的取值范圍幾乎包括了全部整數(shù)(無限大),這給大數(shù)據(jù)的計(jì)算帶來便利。
1.4Python數(shù)據(jù)類型Python的整型常量有4種表示形式:(1)十進(jìn)制整數(shù)。(2)二進(jìn)制整數(shù)。它以0b或0B(數(shù)字0加字母b或B)開頭,后接數(shù)字0,1的整數(shù)。(3)八進(jìn)制整數(shù)。它是以0o或0O(數(shù)字0加小寫字母o或大寫字母O)開頭,后接數(shù)字0~7的整數(shù)。(4)十六進(jìn)制整數(shù)。它是以0x或0X開頭,后接0~9和A~F(或用小寫字母)字符的整數(shù)。2.浮點(diǎn)型數(shù)據(jù)浮點(diǎn)型數(shù)據(jù)表示一個(gè)實(shí)數(shù),有兩種表示形式:(1)十進(jìn)制小數(shù)形式。它由數(shù)字和小數(shù)點(diǎn)組成,如3.23、34.0、0.0等。浮點(diǎn)型數(shù)據(jù)允許小數(shù)點(diǎn)后面沒有任何數(shù)字,表示小數(shù)部分為0,如34.表示34.0。(2)指數(shù)形式。指數(shù)形式即用科學(xué)計(jì)數(shù)法表示的浮點(diǎn)數(shù)。例如,45e-5、45e-6、9.34e2是合法的浮點(diǎn)型常量,分別代表45×10-5、45×10-6、9.34×102。
3.復(fù)數(shù)型數(shù)據(jù)復(fù)數(shù)類型數(shù)據(jù)的形式為:a+bJ其中a是復(fù)數(shù)的實(shí)部,b是復(fù)數(shù)的虛部,J表示-1的平方根(虛數(shù)單位)。J也可以寫成小寫j,注意不是數(shù)學(xué)上的i??梢酝ㄟ^x.real和x.imag來分別獲取復(fù)數(shù)x的實(shí)部和虛部,結(jié)果都是浮點(diǎn)型。1.4.2字符串型1.Python標(biāo)準(zhǔn)字符串在Python中定義一個(gè)標(biāo)準(zhǔn)字符串可以使用單引號(hào)、雙引號(hào)和三引號(hào)(三個(gè)單引號(hào)或三個(gè)雙引號(hào)),這使得Python輸入文本更方便。例如,當(dāng)字符串的內(nèi)容中包含雙引號(hào)時(shí),就可以用單引號(hào)定義,反之亦然。用單引號(hào)或雙引號(hào)括起來的字符串必須在一行內(nèi)表示,這是最常見的表示字符串的方法。而用三引號(hào)括起來的字符串可以是多行的。2.轉(zhuǎn)義字符轉(zhuǎn)義字符以反斜杠“\”開頭,后跟一個(gè)或幾個(gè)字符。轉(zhuǎn)義字符具有特定的含義,不同于字符原有的意義,故稱轉(zhuǎn)義字符,主要用來表示那些用一般字符不便于表示的控制代碼。例如,“\n”表示以后的輸出從下一行開始;“\r”表示對(duì)當(dāng)前行作重疊輸出(只回車,不換行);字符“\t”是制表符,其作用是使當(dāng)前輸出位置橫向跳至一個(gè)輸出區(qū)的第一列。3.基本的字符串函數(shù)1)eval()函數(shù)其調(diào)用格式為:eval(字符串)eval()函數(shù)的作用是把字符串的內(nèi)容作為對(duì)應(yīng)的Python表達(dá)式來求值。2)len()函數(shù)len()函數(shù)返回字符串的長度,即字符串中所包含的字符個(gè)數(shù),其調(diào)用格式為:len(字符串)1.4.3布爾型在Python中,布爾型數(shù)據(jù)有True和False,分別代表邏輯真和邏輯假。Python的布爾表達(dá)式包括關(guān)系運(yùn)算表達(dá)式和邏輯運(yùn)算表達(dá)式,通常用來在程序中表示條件,條件滿足時(shí)結(jié)果為True,不滿足時(shí)結(jié)果為False。在Python中,邏輯值True和False實(shí)際上是分別用整型值1和0參與運(yùn)算。例如:>>>x=False>>>x+(5>4)11.4.4復(fù)合數(shù)據(jù)類型列表、元組、字典和集合類型的數(shù)據(jù)包含多個(gè)相互關(guān)聯(lián)的數(shù)據(jù)元素,所以稱它們?yōu)閺?fù)合數(shù)據(jù)類型。字符串其實(shí)也是一種復(fù)合數(shù)據(jù),其元素是單個(gè)字符。列表、元組和字符串是有順序的數(shù)據(jù)元素的集合體,稱作序列(sequence)。序列可以通過各數(shù)據(jù)元素在序列中的位置編號(hào)(索引)來訪問數(shù)據(jù)元素。字典和集合屬于無順序的數(shù)據(jù)集合體,不能通過位置編號(hào)來訪問數(shù)據(jù)元素。1.列表列表(list)是寫在中括號(hào)之間、用逗號(hào)分隔的元素序列,元素的類型可以不相同,可以是數(shù)字、單個(gè)字符、字符串甚至可以包含列表(所謂嵌套)。例如:>>>mlist=['brenden',45.3,911,'john',32]與Python字符串不同的是,列表中的元素是可以改變的。例如:>>>a=[1,2,3,4,5,6]>>>a[0]=9>>>a[9,2,3,4,5,6]2.元組元組(tuple)是寫在小括號(hào)之間、用逗號(hào)隔開的元素序列。元組中的元素類型也可以不相同。元組與列表類似,不同之處在于元組的元素不能修改,相當(dāng)于只讀列表。例如:>>>mtuple=('brenden',45.3,911,'john',32)要注意一些特殊元組的表示方法??盏膱A括號(hào)表示空元組。當(dāng)元組只有一個(gè)元素時(shí),必須以逗號(hào)結(jié)尾。任何一組以逗號(hào)分隔的對(duì)象,當(dāng)省略標(biāo)識(shí)序列的括號(hào)時(shí),默認(rèn)為元組。例如:>>>2,3,4(2,3,4)元組與字符串類似,元素不能二次賦值。其實(shí),可以把字符串看作一種特殊的元組。元組和列表有幾點(diǎn)重要的區(qū)別。列表元素用中括號(hào)[]括起來,且元素的個(gè)數(shù)及元素的值可以改變。元組元素用小括號(hào)()括起來,且不可以更改。元組可以看成是只讀的列表。3.字典字典(dictionary)是寫在大括號(hào)之間、用逗號(hào)分隔的元素集合,其元素由關(guān)鍵字(key,也稱作鍵)和關(guān)鍵字對(duì)應(yīng)的值(value)組成,通過關(guān)鍵字來存取的字典中的元素。列表和元組是有序的對(duì)象結(jié)合,字典是無序的對(duì)象集合。字典是一種映射類型(mappingtype),它是一個(gè)無序的“關(guān)鍵字:值”對(duì)集合。關(guān)鍵字必須使用不可變類型,也就是說列表和包含可變類型的元組不能做索引關(guān)鍵字。在同一個(gè)字典中,關(guān)鍵字還必須互不相同。例如:>>>dict={'name':'brenden','code':410012,'dept':'sales'}4.集合集合(set)是一個(gè)無序且包含不重復(fù)元素的數(shù)據(jù)類型。基本功能是進(jìn)行成員關(guān)系測試和消除重復(fù)元素??梢允褂么罄ㄌ?hào)或者set()函數(shù)創(chuàng)建集合類型,注意:創(chuàng)建一個(gè)空集合必須用set()而不是{},因?yàn)閧}是用來創(chuàng)建一個(gè)空字典。>>>student={'Tom','Jim','Mary','Tom','Jack','Rose'}Python的標(biāo)準(zhǔn)庫包含很多模塊,每個(gè)模塊中定義了很多有用的函數(shù),這些函數(shù)稱為系統(tǒng)函數(shù)。例如,數(shù)學(xué)庫模塊(math)提供了很多數(shù)學(xué)運(yùn)算函數(shù),復(fù)數(shù)模塊(cmath)提供了用于復(fù)數(shù)運(yùn)算的函數(shù),隨機(jī)數(shù)模塊(random)提供了用來生成隨機(jī)數(shù)的函數(shù),時(shí)間(time)和日歷(calendar)模塊提供了能處理日期和時(shí)間的函數(shù)。1.5常用系統(tǒng)函數(shù)在調(diào)用系統(tǒng)函數(shù)之前,先要使用import語句導(dǎo)入相應(yīng)的模塊,格式如下:import模塊名還有一種導(dǎo)入模塊的方法,格式如下:from模塊名import函數(shù)名如果希望導(dǎo)入模塊中的所有函數(shù)定義,則函數(shù)名用“*”。格式如下:from模塊名import*1.5.1常用模塊函數(shù)1.math模塊函數(shù)math模塊主要處理數(shù)學(xué)相關(guān)的運(yùn)算。2.cmath模塊函數(shù)cmath模塊函數(shù)跟math模塊函數(shù)基本一致,包括圓周率、自然對(duì)數(shù)的底,還有復(fù)數(shù)的冪指數(shù)、對(duì)數(shù)函數(shù)、平方根函數(shù)、三角函數(shù)等。cmath模塊函數(shù)名和math模塊函數(shù)名一樣,只是math模塊對(duì)實(shí)數(shù)運(yùn)算進(jìn)行支持,cmath模塊對(duì)復(fù)數(shù)運(yùn)算進(jìn)行支持。3.random模塊函數(shù)1)隨機(jī)數(shù)種子2)隨機(jī)挑選和排序3)生成隨機(jī)數(shù)4.time模塊函數(shù)例如,time()函數(shù)返回當(dāng)前時(shí)間的時(shí)間戳。5.calendar模塊函數(shù)日歷(calendar)模塊提供與日歷相關(guān)的功能。在默認(rèn)情況下,日歷把星期一作為一周的第一天,星期日為最后一天。要改變這種設(shè)置,可以調(diào)用setfirstweekday()函數(shù)。1.5.2常用內(nèi)置函數(shù)Python內(nèi)置函數(shù)包含在模塊builtins中,該模塊在啟動(dòng)Python解釋器時(shí)自動(dòng)裝入內(nèi)存,而其他的模塊函數(shù)都要等使用import語句導(dǎo)入時(shí)才會(huì)裝入內(nèi)存。內(nèi)置函數(shù)隨著Python解釋器的運(yùn)行而創(chuàng)建,在程序中可以隨時(shí)調(diào)用這些函數(shù)。前面用到的print()函數(shù)、type()、id()函數(shù)都是常見的內(nèi)置函數(shù)。1.range()函數(shù)range()函數(shù)的調(diào)用格式是:range([start,]end[,step])range()函數(shù)產(chǎn)生的數(shù)字序列從start開始,默認(rèn)是從0開始;序列到end結(jié)束,但不包含end;如果指定了可選的步長step,則序列按步長增加,默認(rèn)為1。例如:>>>range(2)#產(chǎn)生可迭代對(duì)象range(0,2)2.?dāng)?shù)值運(yùn)算函數(shù)Python有些內(nèi)置函數(shù)用于數(shù)值運(yùn)算。abs(x):返回x的絕對(duì)值,結(jié)果保持x的類型。x為復(fù)數(shù)時(shí)返回復(fù)數(shù)的模。pow(x,y[,z]):省略z時(shí),返回x的y次冪,結(jié)果保持x或y的類型。如果使用了參數(shù)z,其結(jié)果是x的y次方再對(duì)z求余數(shù)。round(x[,n]):用于對(duì)浮點(diǎn)數(shù)進(jìn)行四舍五入運(yùn)算,返回值為浮點(diǎn)數(shù)。它有一個(gè)可選的小數(shù)位數(shù)參數(shù)。divmod(x,y):把除法和取余運(yùn)算結(jié)合起來,返回一個(gè)包含商和余數(shù)的元組。3.Python系統(tǒng)的幫助信息查看Python幫助信息可以使用內(nèi)置函數(shù)dir()和help()。dir()函數(shù)的調(diào)用方法很簡單,只需把想要查詢的對(duì)象加到括號(hào)中就可以了,它返回一個(gè)列表,其中包含要查詢對(duì)象的所有屬性和方法。查看某個(gè)對(duì)象的幫助信息可以用help()函數(shù)。1.6.1算術(shù)運(yùn)算1.算術(shù)運(yùn)算符與算術(shù)表達(dá)式Python的算術(shù)運(yùn)算符有:+(加)、-(減)、*(乘)、/(除)、//(整除)、%(求余)、**(乘方)1.6基本運(yùn)算/、//和%運(yùn)算符都是做除法運(yùn)算,其中“/”運(yùn)算符做一般意義上的除法,其運(yùn)算結(jié)果是一個(gè)浮點(diǎn)數(shù),即使被除數(shù)和除數(shù)都是整型,也返回一個(gè)浮點(diǎn)數(shù);“//”運(yùn)算符做除法運(yùn)算后返回商的整數(shù)部分。如果分子或者分母是浮點(diǎn)型,它返回的值將會(huì)是浮點(diǎn)類型;“%”運(yùn)算符做除法運(yùn)算后返回余數(shù)?!?*”運(yùn)算符實(shí)現(xiàn)乘方運(yùn)算,其優(yōu)先級(jí)高于乘除運(yùn)算,乘除運(yùn)算優(yōu)先級(jí)高于加減運(yùn)算。Python表達(dá)式書寫練習(xí):2.浮點(diǎn)數(shù)的計(jì)算誤差Python中能表示浮點(diǎn)數(shù)的有效數(shù)字是有限的,而在實(shí)際應(yīng)用中數(shù)據(jù)的有效位數(shù)并無限制,這種矛盾,勢(shì)必帶來計(jì)算時(shí)的微小誤差。對(duì)浮點(diǎn)數(shù)判斷是否相等要慎用“==”運(yùn)算符,恰當(dāng)?shù)霓k法是判斷它們是否“約等于”,只要在允許的誤差范圍內(nèi),這種判斷仍是有意義的。所謂“約等于”是指兩個(gè)浮點(diǎn)數(shù)非常接近,即它們的差足夠?。ň唧w誤差可以根據(jù)實(shí)際情況進(jìn)行調(diào)整)。3.?dāng)?shù)據(jù)類型的轉(zhuǎn)換常用的類型轉(zhuǎn)換函數(shù)如下。int(x)將x轉(zhuǎn)換為整型。float(x)將x為轉(zhuǎn)換浮點(diǎn)型。complex(x)將x轉(zhuǎn)換為復(fù)數(shù),其中復(fù)數(shù)的實(shí)部為x和虛部為0。complex(x,y)將x和y轉(zhuǎn)換成一個(gè)復(fù)數(shù),其中實(shí)部為x和虛部y。1.6.2位運(yùn)算1.按位與運(yùn)算按位與運(yùn)算符是&,按位運(yùn)算規(guī)則為:0&0=0,0&1=0,1&0=0,1&1=12.按位或運(yùn)算按位或運(yùn)算符是|,按位運(yùn)算規(guī)則為:0|0=0,0|1=1,1|0=1,1|1=13.按位異或運(yùn)算按位異或運(yùn)算符是^,按位運(yùn)算規(guī)則為:0^0=0,0^1=1,1^0=1,1^1=04.按位取反運(yùn)算按位取反運(yùn)算符是~,按位運(yùn)算規(guī)則為:~0=1,~1=05.左移運(yùn)算左移運(yùn)算符是<<。例如:>>>3<<2126.右移運(yùn)算右移運(yùn)算符是>>。移動(dòng)對(duì)象為正數(shù)時(shí),高位補(bǔ)0。為負(fù)數(shù)時(shí),高位補(bǔ)1。例如:>>>-3>>2-1第2章順序結(jié)構(gòu)程序設(shè)計(jì)概述Python程序的書寫規(guī)則賦值語句數(shù)據(jù)輸入/輸出順序結(jié)構(gòu)程序舉例2.1.1程序設(shè)計(jì)的基本步驟分析問題,確定數(shù)學(xué)模型或方法設(shè)計(jì)算法,畫出流程圖選擇編程工具,按算法編寫程序調(diào)試程序,分析輸出結(jié)果2.1程序設(shè)計(jì)概述2.1.2算法及其描述1.算法的概念計(jì)算機(jī)解決問題的方法和步驟,就是計(jì)算機(jī)解題的算法。例2-1求例2-2輸入20個(gè)數(shù),要求找出其中最大的數(shù)。2.算法的描述1)用傳統(tǒng)流程圖描述算法例2-3用傳統(tǒng)流程圖來描述例2-1和例2-2的算法。用傳統(tǒng)流程圖描述的算法分別如圖2-1和圖2-2所示。用傳統(tǒng)流程圖描述例2-1的算法
用傳統(tǒng)流程圖描述例2-2的算法2)用結(jié)構(gòu)化流程圖描述算法(1)程序的三種基本結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。
順序結(jié)構(gòu)選擇結(jié)構(gòu)
(a)當(dāng)型循環(huán)結(jié)構(gòu)
(b)直到型循環(huán)結(jié)構(gòu)三種基本程序結(jié)構(gòu)具有如下共同特點(diǎn):只有一個(gè)入口。只有一個(gè)出口。結(jié)構(gòu)中無死語句,即結(jié)構(gòu)內(nèi)的每一部分都有機(jī)會(huì)被執(zhí)行。結(jié)構(gòu)中無死循環(huán),即循環(huán)在滿足一定條件后能正常結(jié)束。(2)結(jié)構(gòu)化流程圖(N-S圖):以三種基本結(jié)構(gòu)作為構(gòu)成算法的基本元素,每一種基本結(jié)構(gòu)用一個(gè)矩形框來表示,而且取消了流程線,各基本結(jié)構(gòu)之間保持順序執(zhí)行關(guān)系。
順序結(jié)構(gòu)的N-S圖
選擇結(jié)構(gòu)的N-S圖
(a)當(dāng)型循環(huán)結(jié)構(gòu)
b)直到型循環(huán)結(jié)構(gòu)例用N-S圖描述例2-1和例2-2的算法。
用N-S圖描述例2-1的算法用N-S圖描述例2-2的算法2.2.1初識(shí)Python程序例輸入三個(gè)變量的值,然后按小到大順序輸出。x=int(input('inputx:'))#輸入x的值y=int(input('inputy:'))#輸入y的值z(mì)=int(input('inputz:'))#輸入z的值ifx>y:#如果x>y,則x和y的值互換x,y=y,xifx>z:#如果x>z,則x和z的值互換x,z=z,xify>z:#如果y>z,則y和z的值互換y,z=z,yprint(x,y,z)2.2Python程序的書寫規(guī)則例已知f(x,y)=x2+y2,輸入x,y的值,求出對(duì)應(yīng)的函數(shù)值。程序如下:deff(x,y):returnx**2+y**2print("f(3,4)=",f(3,4))第一個(gè)語句定義了一個(gè)函數(shù),然后調(diào)用該函數(shù)。前面的f(x,y)函數(shù)可以定義成lambda函數(shù)的形式。f=lambdax,y:x**2+y**2print("f(3,4)=",f(3,4))例輸出Fibonacci數(shù)列前50項(xiàng)之和。程序如下:a,b=0,1s=0foriinrange(50):#i從0變化到49s+=ba,b=b,a+bprint("s=",s)程序段一:foriinrange(0,50):s+=ba,b=b,a+b2.2.2Python語句縮進(jìn)規(guī)則Python通過語句縮進(jìn)對(duì)齊反映語句之間的邏輯關(guān)系,從而區(qū)分不同的語句塊。就一個(gè)語句塊來講,需要保持一致的縮進(jìn)量。程序段二:foriinrange(0,50):s+=ba,b=b,a+b兩種縮進(jìn)方式可用流程圖直觀表示。(a)(b)兩種縮進(jìn)方式的比較2.2.3Python語句行與注釋1.語句行在Python中,語句行從解釋器提示符后的第一列開始,前面不能有任何空格,否則會(huì)產(chǎn)生語法錯(cuò)誤。每個(gè)語句行以回車符結(jié)束。可以在同一行中使用多條語句,語句之間使用分號(hào)分隔。如果語句行太長,可以使用反斜杠將一行語句分為多行顯示。如果在語句中包含小括號(hào)、中括號(hào)或大括號(hào),則不需要使用多行續(xù)行符。2.注釋注釋對(duì)程序的執(zhí)行沒有任何影響,目的是對(duì)程序作解釋說明,以增強(qiáng)程序的可讀性。程序中的單行注釋采用#開頭,注釋可以從任意位置開始,可以在語句行末尾,也可以獨(dú)立成行。對(duì)于多行注釋,一般推薦使用多個(gè)#開頭的多行注釋,也可采用三引號(hào)(實(shí)際上是用三引號(hào)括起來的一個(gè)多行字符串,起到注釋的作用)。注意,注釋行是不能使用反斜杠續(xù)行的。2.3賦值語句Python的賦值和一般的高級(jí)語言的賦值有很大的不同,它是數(shù)據(jù)對(duì)象的一個(gè)引用。2.3.1賦值語句的一般格式一個(gè)變量通過賦值可以指向不同類型的對(duì)象。賦值語句的一般格式為:變量=表達(dá)式賦值號(hào)左邊必須是變量,右邊則是表達(dá)式。賦值的意義是先計(jì)算表達(dá)式的值,然后使該變量指向該數(shù)據(jù)對(duì)象,該變量可以理解為該數(shù)據(jù)對(duì)象的別名。Python是動(dòng)態(tài)類型語言,也就是說不需要預(yù)先定義變量類型,變量的類型和值在賦值那一刻被初始化。例如:>>>x=67.2>>>x="ABCD"Python中的賦值并不是直接將一個(gè)值賦給一個(gè)變量,而是通過引用傳遞的。在賦值時(shí),不管這個(gè)對(duì)象是新創(chuàng)建的還是一個(gè)已經(jīng)存在的,都是建立變量對(duì)該數(shù)據(jù)對(duì)象的引用(并不是值)。2.3.2復(fù)合賦值語句Python還提供了12種復(fù)合賦值運(yùn)算符:+=、-=、*=、/=、//=、%=、**=、<<=、>>=、&=、|=、^=其中,前7種是常用的算術(shù)運(yùn)算,后5種是關(guān)于位運(yùn)算的復(fù)合賦值運(yùn)算符。例如:x+=5.0x*=u+v分別等價(jià)于“x=x+5.0”和“x=x*(u+v)”。2.3.3多變量賦值1.鏈?zhǔn)劫x值鏈?zhǔn)劫x值語句的一般形式為:變量1=變量2=……=變量n=表達(dá)式例如:>>>a=b=10賦值語句執(zhí)行時(shí),創(chuàng)建一個(gè)值為10的整型對(duì)象,將對(duì)象的同一個(gè)引用賦值給a和b,即a和b均指向數(shù)據(jù)對(duì)象10。2.同步賦值同步賦值的一般形式為:變量1,變量2,……,變量n=表達(dá)式1,表達(dá)式2,……,表達(dá)式n其中賦值號(hào)左邊變量的個(gè)數(shù)與右邊表達(dá)式的個(gè)數(shù)要一致。同步賦值首先計(jì)算右邊n個(gè)表達(dá)式的值,然后同時(shí)將表達(dá)式的值賦值給左邊的n個(gè)變量,這并非等同于簡單地將多個(gè)單一賦值語句進(jìn)行組合。例如:>>>a,b,c=10,20,302.4.1標(biāo)準(zhǔn)輸入/輸出1.標(biāo)準(zhǔn)輸入Python用內(nèi)置函數(shù)input()實(shí)現(xiàn)標(biāo)準(zhǔn)輸入,其調(diào)用格式為:input([提示字符串])其中,中括號(hào)中的“提示字符串”是可選項(xiàng)。如果有“提示字符串”,則原樣顯示,提示用戶輸入數(shù)據(jù)。input()函數(shù)從標(biāo)準(zhǔn)輸入設(shè)備(鍵盤)讀取一行數(shù)據(jù),并返回一個(gè)字符串(去掉結(jié)尾的換行符)。2.4數(shù)據(jù)輸入/輸出2.標(biāo)準(zhǔn)輸出Python語言直接使用表達(dá)式可以輸出該表達(dá)式的值。常用的輸出方法是用print()函數(shù),其調(diào)用格式為:print([輸出項(xiàng)1,輸出項(xiàng)2,……,輸出項(xiàng)n][,sep=分隔符][,end=結(jié)束符])其中sep表示輸出時(shí)各輸出項(xiàng)之間的分隔符(默認(rèn)以空格分隔),end表示結(jié)束符(默認(rèn)以回車換行結(jié)束)。例如:print(10,20,sep=',',end='*')print(30)輸出結(jié)果為:10,20*302.4.2格式化輸出Python格式化輸出的基本做法是,將輸出項(xiàng)格式化,然后利用print()函數(shù)輸出。常用的實(shí)現(xiàn)方法有兩種:利用字符串的format()方法。利用格式化字符串常量(formattedstringliterals,簡稱f-string)。1.字符串的format()方法在Python中,字符串都有一個(gè)format()方法,這個(gè)方法會(huì)把格式字符串當(dāng)作一個(gè)模版,通過傳入的參數(shù)對(duì)輸出項(xiàng)進(jìn)行格式化。字符串format()方法的調(diào)用格式為:格式字符串.format(輸出項(xiàng)1,輸出項(xiàng)2,……,輸出項(xiàng)n)格式說明符使用大括號(hào)擴(kuò)起來,一般形式如下:{[序號(hào)或鍵]:格式說明符}例如:>>>'{0:.2f},{1}'.format(3.145,500)'3.15,500'2.格式化字符串常量(f-string)f-string格式化字符串與format()方法的格式字符串有相似之處,不同的是f-string格式化字符串以f或F開頭,并將各個(gè)輸出項(xiàng)直接放入字符串中的大括號(hào){}中,在程序執(zhí)行時(shí),直接在相應(yīng)位置輸出。2.5順序結(jié)構(gòu)程序舉例例已知x,y,求z的值。分析:這是一個(gè)求表達(dá)式值的問題,程序分為以下三步。求x,y的值。求z的值。輸出z的值。例從鍵盤輸入一個(gè)三位整數(shù)n,輸出其逆序數(shù)m。例如,輸入n=127,則m=721。分析:程序分為以下三步。輸入一個(gè)3位整數(shù)n。求逆序數(shù)m。輸出m。例求一元二次方程ax2
+
bx
+
c
=
0的根。分析:由于Python能進(jìn)行復(fù)數(shù)運(yùn)算,所以不需要判斷方程的判別式,而直接根據(jù)求根公式求根。調(diào)用復(fù)數(shù)運(yùn)算函數(shù)需要導(dǎo)入cmath模塊。例有一線段AB,A的坐標(biāo)為(1,1),B的坐標(biāo)為(4.5,4.5),如圖2-13所示。求AB的長度,以及黃金分隔點(diǎn)C的坐標(biāo)。黃金分割點(diǎn)在線段的0.618處。分析:A,B的坐標(biāo)可用復(fù)數(shù)表示:即A為(1+1j),B為(4.5+4.5j)。AB的長度就是(A-B)的模,可用abs函數(shù)直接求出復(fù)數(shù)的模。黃金分隔點(diǎn)C的坐標(biāo)為A+0.618×(B-A)。第3章選擇結(jié)構(gòu)條件的描述選擇結(jié)構(gòu)的實(shí)現(xiàn)條件運(yùn)算選擇結(jié)構(gòu)程序舉例3.1.1關(guān)系運(yùn)算Python的關(guān)系運(yùn)算符有:<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、==(等于)、!=(不等于)關(guān)系運(yùn)算符用于兩個(gè)量的比較判斷。由關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接起來的式子就稱為關(guān)系表達(dá)式,它用來表示條件,其一般格式為:表達(dá)式1關(guān)系運(yùn)算符表達(dá)式2例如,i+j==k,a<b+c。3.1條件的描述3.1.2邏輯運(yùn)算1.邏輯運(yùn)算符Python的邏輯運(yùn)算符有:and(邏輯與)、or(邏輯或)、not(邏輯非)其中and和or運(yùn)算符要求有兩個(gè)運(yùn)算量,用于連接兩個(gè)條件,構(gòu)成更復(fù)雜的條件。not運(yùn)算符只作用于后面的一個(gè)邏輯量。2.邏輯表達(dá)式邏輯表達(dá)式是用邏輯運(yùn)算符將邏輯量連接起來的式子。除not以外,and和or構(gòu)成的邏輯表達(dá)式一般形式為:P邏輯運(yùn)算符Q其中P,Q是兩個(gè)邏輯量。例寫出下列條件。(1)判斷年份year是否為閏年。(2)判斷ch是否為小寫字母。(3)判斷m能否被n整除。(4)判斷ch既不是字母也不是數(shù)字字符。條件1:(year%4==0andyear%100!=0)oryear%400==0條件2:ch>='a'andch<='z'條件3:m%n==0或m-m/n*n==0條件4:not((ch>='A'andch<='Z')or(ch>='a'andch<='z')or(ch>='0'andch<='9'))3.邏輯運(yùn)算的重要規(guī)則邏輯與(and)和邏輯或(or)運(yùn)算分別有如下性質(zhì):(1)aandb:當(dāng)a為False時(shí),不管b為何值,結(jié)果為False。(2)aorb:當(dāng)a為True時(shí),不管b為何值,結(jié)果為True。對(duì)于aandb,當(dāng)a的可解釋為False,則表達(dá)式值為False,否則表達(dá)式的值為b;對(duì)于aorb,如果a為False,則表達(dá)式的值為b,否則表達(dá)式值為True。3.1.3測試運(yùn)算1.成員測試in運(yùn)算符用于在指定的序列中查找某個(gè)值是否存在,存在返回True,否則返回False。該運(yùn)算符的使用格式是xiny,如果x在y序列中則返回True,否則返回False。例如:>>>3in(20,15,3,14,5)True“notin”的含義是,如果在指定的序列中沒有找到值,則返回True,否則返回False。對(duì)于xnotiny,如果x不在y序列中返回True,否則返回False。例如:>>>3notin(20,15,3,14,5)False2.身份測試身份運(yùn)算符用于測試兩個(gè)變量是否指向同一個(gè)對(duì)象。例如:>>>a=20>>>b=20>>>aisbTrue>>>aisnotbFalse3.2.1單分支選擇結(jié)構(gòu)可以用if語句實(shí)現(xiàn)單分支選擇結(jié)構(gòu),其一般格式為:if表達(dá)式:語句塊3.2選擇結(jié)構(gòu)的實(shí)現(xiàn)單分支if語句的執(zhí)行過程注意:(1)在if語句的表達(dá)式后面必須加冒號(hào)。(2)因?yàn)镻ython把非0當(dāng)作真,0當(dāng)作假,所以表示條件的表達(dá)式不一定必須是結(jié)果為True或False的關(guān)系表達(dá)式或邏輯表達(dá)式,可以是任意表達(dá)式。(3)if語句中的語句塊必須向右縮進(jìn),語句塊可以是單個(gè)語句,也可以是多個(gè)語句。當(dāng)包含兩個(gè)或兩個(gè)以上的語句時(shí),語句必須縮進(jìn)一致,即語句塊中的語句必須上下對(duì)齊。(4)如果語句塊中只有一條語句,if語句也可以寫在同一行上。例3-2輸入兩個(gè)整數(shù)a和b,先輸出較大數(shù),再輸出較小數(shù)。分析:輸入a,b,如果a<b,則交換a和b,否則不交換,最后輸出a,b。程序如下:a,b=eval(input("輸入a,b:"))ifa<b:#若a<b,交換a和b,否則不交換a,b=b,aprint(f"{a},")3.2.2雙分支選擇結(jié)構(gòu)可以用if語句實(shí)現(xiàn)雙分支選擇結(jié)構(gòu),其一般格式為:if表達(dá)式:語句塊1else:語句塊2雙分支if語句的執(zhí)行過程例輸入三角形的三個(gè)邊長,求三角形的面積。分析:設(shè)a,b,c表示三角形的三個(gè)邊長,則構(gòu)成三角形的充分必要條件是任意兩邊之和大于第三邊,即a+b>c,b+c>a,c+a>b。如果該條件滿足,則可按照海倫公式計(jì)算三角形的面積:其中p=(a+b+c)/2。frommathimport*a,b,c=eval(input("a,b,c="))ifa+b>canda+c>bandb+c>a:p=(a+b+c)/2s=sqrt(p*(p-a)*(p-b)*(p-c))print(f"a={a},b=,c={c}")print(f"area={s}")else:print(f"a={a},b=,c={c}")print("inputdataerror")例輸入x,求對(duì)應(yīng)的函數(shù)值y。分析:這是一個(gè)具有兩個(gè)分支的分段函數(shù),為了求函數(shù)值,可以采用雙分支結(jié)構(gòu)來實(shí)現(xiàn)。frommathimport*x=eval(input("x="))ifx<0:y=log(-5*x)+fabs(x)else:y=sin(x)+sqrt(x+exp(2))/(2*pi)print(f"x={x},y={y}")還可以采用兩個(gè)單分支結(jié)構(gòu)來實(shí)現(xiàn),程序如下:frommathimport*x=eval(input("x="))ifx<0:y=log(-5*x)+fabs(x)ifx>=0:y=sin(x)+sqrt(x+exp(2))/(2*pi)print(f"x={x},y={y}")第一個(gè)if語句能否不寫,并分析原因。第二個(gè)if語句能否不用,并分析原因。3.2.3多分支選擇結(jié)構(gòu)多分支if語句的一般格式為:if表達(dá)式1:
語句塊1elif表達(dá)式2:語句塊2elif表達(dá)式3:語句塊3……elif表達(dá)式m:語句塊m[else:語句塊n]多分支if選擇結(jié)構(gòu)的執(zhí)行過程例輸入學(xué)生的成績,根據(jù)成績進(jìn)行分類,85以上為優(yōu)秀,70~84為良好,60~69為及格,60以下為不及格。分析:將學(xué)生成績分為四個(gè)分?jǐn)?shù)段,然后根據(jù)各分?jǐn)?shù)段的成績,輸出不同的等級(jí)。程序分為四個(gè)分支,可以用四個(gè)單分支結(jié)構(gòu)實(shí)現(xiàn),也可以用多分支if語句實(shí)現(xiàn)。程序如下:g=float(input("請(qǐng)輸入學(xué)生成績:"))ifg<60:print("不及格")elifg<70:print("及格")elifg<85:print("良好")else:print("優(yōu)秀")語句二:if表達(dá)式1:if表達(dá)式2:語句塊1else:語句塊23.2.4選擇結(jié)構(gòu)的嵌套if語句中可以再嵌套if語句,例如,有以下不同形式的嵌套結(jié)構(gòu)。語句一:if表達(dá)式1:if表達(dá)式2:語句塊1else:語句塊2Python的條件運(yùn)算有三個(gè)運(yùn)算量,其一般格式為:表達(dá)式1if表達(dá)式else表達(dá)式2條件運(yùn)算的運(yùn)算規(guī)則是,先求if后面表達(dá)式的值,如果其值為True,則求表達(dá)式1,并以表達(dá)式1的值為條件運(yùn)算的結(jié)果。如果if后面表達(dá)式的值為False,則求表達(dá)式2,并以表達(dá)式2的值為條件運(yùn)算的結(jié)果。例如,z=xifx>yelsey。3.3條件運(yùn)算例生成3個(gè)兩位隨機(jī)整數(shù),輸出其中最大的數(shù)。這里用條件運(yùn)算表達(dá)式來實(shí)現(xiàn),程序如下:importrandomx=random.randint(10,99)y=random.randint(10,99)z=random.randint(10,99)max=xifx>yelseymax=maxifmax>zelsezprint(f"x={x},y={y},z={z}".format(x,y,z))print(f"max={max}")例輸入一個(gè)整數(shù),判斷它是否為水仙花數(shù)。所謂水仙花數(shù),是指這樣的一些三位整數(shù):各位數(shù)字的立方和等于該數(shù)本身,例如153=13+53+33,因此153是水仙花數(shù)。分析:關(guān)鍵的一步是先分別求三位整數(shù)個(gè)位、十位、百位數(shù)字,再根據(jù)條件判斷該數(shù)是否為水仙花數(shù)。3.4選擇結(jié)構(gòu)程序舉例例輸入一個(gè)時(shí)間(小時(shí):分鐘:秒),輸出該時(shí)間經(jīng)過5分30秒后的時(shí)間。例硅谷公司員工的工資計(jì)算方法如下:(1)工作時(shí)數(shù)超過120小時(shí)者,超過部分加發(fā)15%。(2)工作時(shí)數(shù)低于60小時(shí)者,扣發(fā)700元。(3)其余按每小時(shí)84元計(jì)發(fā)。輸入員工的工號(hào)和該員工的工作時(shí)數(shù),計(jì)算應(yīng)發(fā)工資。分析:為了計(jì)算應(yīng)發(fā)工資,首先分兩種情況,即工時(shí)數(shù)小于等于120小時(shí)和大于120小時(shí)。工時(shí)數(shù)超過120小時(shí)時(shí),實(shí)發(fā)工資有規(guī)定的計(jì)算方法。而工時(shí)數(shù)小于等于120小時(shí)時(shí),又分為大于60和小于等于60兩種情況,分別有不同的計(jì)算方法。所以程序分為3個(gè)分支,即工時(shí)數(shù)>120、60<工時(shí)數(shù)≤120和工時(shí)數(shù)≤60,可以用多分支if結(jié)構(gòu)實(shí)現(xiàn),也可以用if的嵌套實(shí)現(xiàn)。例輸入年月,求該月的天數(shù)。分析:用year、month分別表示年和月,day表示每月的天數(shù)??紤]到以下兩點(diǎn)。(1)每年的1、3、5、7、8、10、12月,每月有31天;4、6、9、11月,每月有30天;閏年2月有29天,平年2月有28天。(2)年份能被4整除,但不能被100整除,或者能被400整除的年均是閏年。第4章循環(huán)結(jié)構(gòu)while循環(huán)結(jié)構(gòu)for循環(huán)結(jié)構(gòu)循環(huán)控制語句循環(huán)三維嵌套循環(huán)結(jié)構(gòu)程序舉例Python科學(xué)計(jì)算庫的應(yīng)用4.1.1while語句1.while語句的一般格式while語句的一般格式為:while表達(dá)式:語句塊while語句中的表達(dá)式表示循環(huán)條件,可以是結(jié)果能解釋為True或False的任何表達(dá)式,常用的是關(guān)系表達(dá)式和邏輯表達(dá)式。表達(dá)式后面必須加冒號(hào)。語句塊是重復(fù)執(zhí)行的部分,稱作循環(huán)體。4.1while循環(huán)結(jié)構(gòu)while語法的執(zhí)行過程注意:(1)當(dāng)循環(huán)體由多個(gè)語句構(gòu)成時(shí),必須用縮進(jìn)對(duì)齊的方式組成一個(gè)語句塊,否則會(huì)產(chǎn)生錯(cuò)誤。(2)與if語句的語法類似,如果while循環(huán)體中只有一條語句,可以將該語句與while寫在同一行中。(3)如果表達(dá)式永遠(yuǎn)為True,循環(huán)將會(huì)無限地執(zhí)行下去(俗稱“死”循環(huán))。在循環(huán)體內(nèi)必須有修改表達(dá)式值的語句,使其值趨向False,讓循環(huán)趨于結(jié)束,避免無限循環(huán)。2.在while語句中使用else子句在Python中,可以在循環(huán)語句中使用else子句,else中的語句會(huì)在循環(huán)正常執(zhí)行完的情況下執(zhí)行(不管是否執(zhí)行循環(huán)體)。例如:count=int(input())whilecount<5:print(count,"islesshan5")count=count+1else:print(count,"isnotlessthan5")程序的一次運(yùn)行結(jié)果如下:8↙8isnotlessthan54.1.2while循環(huán)的應(yīng)用例計(jì)算1+2+3+……+100的值。分析:累加問題可用遞推式來描述:si=si-1+ni(s0=0,n1=1),從循環(huán)的角度看即本次循環(huán)的累加和s等于上次循環(huán)的累加和加上本次的累加項(xiàng)n,可用賦值語句“s+=n”來實(shí)現(xiàn)。此例的累加項(xiàng)n的遞推式為:ni=ni-1+1(n1=1),可用賦值語句“n+=1”來實(shí)現(xiàn)(n=1,2,3,……,100)。循環(huán)體要實(shí)現(xiàn)兩種操作:s+=n和n+=1,并置s的初值為0,n的初值為1。例
求sinx近似值,直到最后一項(xiàng)的絕對(duì)值小于10-6時(shí)停止計(jì)算。其中x為弧度,但從鍵盤輸入時(shí)以角度為單位。分析:這是一個(gè)累加求和問題。關(guān)鍵是如何求累加項(xiàng),較好的辦法是利用前一項(xiàng)來求后一項(xiàng),即用遞推的辦法來求累加項(xiàng)。第i項(xiàng)與第i-1項(xiàng)之間的遞推關(guān)系為:
a1=x求sinx值的算法例輸入一個(gè)整數(shù),輸出其位數(shù)。分析:輸入的整數(shù)存入變量n中,用變量k來統(tǒng)計(jì)n的位數(shù),基本思路是每循環(huán)一次就去掉n的最低位數(shù)字(用Python的整除運(yùn)算符實(shí)現(xiàn)),直到n為0。4.2.1for語句1.for語句的一般格式for語句的一般格式為:for目標(biāo)變量in序列對(duì)象:語句塊for語句的首行定義了目標(biāo)變量和遍歷的序列對(duì)象,后面是需要重復(fù)執(zhí)行的語句塊。語句塊中的語句要向右縮進(jìn),且縮進(jìn)量要一致。4.2for循環(huán)結(jié)構(gòu)for語句執(zhí)行過程注意:(1)for語句是通過遍歷任意序列的元素進(jìn)行來建立循環(huán)的,針對(duì)序列的每一個(gè)元素執(zhí)行一次循環(huán)體。(2)for循環(huán)的循環(huán)次數(shù)顯然就是序列中元素的個(gè)數(shù),即序列的長度??梢岳眯蛄虚L度來控制循環(huán)次數(shù)。(3)目標(biāo)變量的作用是存儲(chǔ)每次循環(huán)所引用的序列元素的值,在循環(huán)體中也可以引用目標(biāo)變量的值。(4)可以在for循環(huán)體中修改目標(biāo)變量的值,但當(dāng)程序執(zhí)行流程再次回到循環(huán)開始時(shí),就會(huì)自動(dòng)被設(shè)成序列的下一個(gè)元素。退出循環(huán)之后,該變量的值就是循環(huán)中最后的值。(5)for語句也支持一個(gè)可選的else塊,它的功能就像在while循環(huán)中一樣,如果循環(huán)離開時(shí)沒有碰到break語句,就會(huì)執(zhí)行else塊。2.rang對(duì)象在for循環(huán)中的應(yīng)用在Python3.x中,range()函數(shù)返回的是可迭代對(duì)象。Python專門為for語句設(shè)計(jì)了迭代器的處理方法。例如:foriinrange(5):print(i,end='')程序輸出結(jié)果如下:01234首先Python對(duì)關(guān)鍵字in后的對(duì)象調(diào)用iter()函數(shù)獲得迭代器,然后調(diào)用next()函數(shù)獲得迭代器的元素,直到拋出StopIteration異常。4.2.2for循環(huán)的應(yīng)用例輸入20個(gè)數(shù),求出其中的最大數(shù)與最小數(shù)。分析:先假設(shè)第一個(gè)數(shù)就是最大數(shù)或最小數(shù),再將剩下的19個(gè)數(shù)與到目前為止的最大數(shù)、最小數(shù)進(jìn)行比較,比完19次后即可找出20個(gè)數(shù)中的最大數(shù)與最小數(shù)。例求Fibonacci數(shù)列的前30項(xiàng)。分析:設(shè)待求項(xiàng)(即fn)為f,待求項(xiàng)前面的第一項(xiàng)(即fn-1)為f1,待求項(xiàng)前面的第二項(xiàng)(即fn-2)為f2。首先根據(jù)f1和f2推出f,再將f1作為f2,f作為f1,為求下一項(xiàng)作準(zhǔn)備。如此一直遞推下去。
1 1 2 3 5第一次:f2+ f1→f
↓↓第二次:f2+f1→f
↓↓第三次:f2+f1→ f例4-6輸入一個(gè)整數(shù)m,判斷是否為素?cái)?shù)。分析:素?cái)?shù)是大于1,且除了1和它本身以外,不能被其他任何整數(shù)所整除的整數(shù)。為了判斷整數(shù)M是否為素?cái)?shù),一個(gè)最簡單的辦法用2、3、4、5、……、M-1這些數(shù)逐個(gè)去除M,看能否整除,如果全都不能整除,則M是素?cái)?shù),否則,只要其中一個(gè)數(shù)能整除,則M不是素?cái)?shù)。當(dāng)M較大時(shí),用這種方法,除的次數(shù)太多,可以有許多改進(jìn)辦法,以減少除的次數(shù),提高運(yùn)行效率??梢栽O(shè)一個(gè)變量來作為是否素?cái)?shù)的標(biāo)志,用for語句實(shí)現(xiàn)程序。4.3.1break語句break語句用在循環(huán)體內(nèi),迫使所在循環(huán)立即終止,即跳出所在循環(huán)體,繼續(xù)執(zhí)行循環(huán)結(jié)構(gòu)后面的語句。4.3循環(huán)控制語句例求兩個(gè)整數(shù)a與b的最大公約數(shù)。分析:找出a與b中較小的一個(gè),則最大公約數(shù)必在1與較小整數(shù)的范圍內(nèi)。使用for語句,循環(huán)變量i從較小整數(shù)變化到1。一旦循環(huán)控制變量i同時(shí)整除a與b,則i就是最大公約數(shù),然后使用break語句強(qiáng)制退出循環(huán)。4.3.2continue語句當(dāng)在循環(huán)結(jié)構(gòu)中執(zhí)行continue語句時(shí),立即結(jié)束本次循環(huán),重新開始下一輪循環(huán)。例求1~100之間的全部奇數(shù)之和。x=y=0whileTrue:x+=1ifnot(x%2):continue#x為偶數(shù)直接進(jìn)行下一次循環(huán)elifx>100:break #x>100時(shí)退出循環(huán)else:y+=x#實(shí)現(xiàn)累加print("y=",y)4.3.3pass語句pass語句是一個(gè)空語句,它不做任何操作,代表一個(gè)空操作??聪旅娴难h(huán)語句。forxinrange(10):pass該語句的確會(huì)循環(huán)10次,但是除了循環(huán)本身之外,它什么也沒做。4.4循環(huán)的嵌套如果一個(gè)循環(huán)結(jié)構(gòu)的循環(huán)體又包括一個(gè)循環(huán)結(jié)構(gòu),就稱為循環(huán)的嵌套,或稱為多重循環(huán)結(jié)構(gòu)。例輸入n,求表達(dá)式的值。分析:這是求n項(xiàng)之和的問題。先求累加項(xiàng)a,再用語句“s=s+a”實(shí)現(xiàn)累加,共有n項(xiàng),所以共循環(huán)n次。求累加項(xiàng)a時(shí),分母又是求和問題,也可以用一個(gè)循環(huán)來實(shí)現(xiàn)。因此整個(gè)程序構(gòu)成一個(gè)二重循環(huán)結(jié)構(gòu)。例4輸出[100,1000]以內(nèi)的全部素?cái)?shù)。分析:可分為以下兩步。(1)判斷一個(gè)數(shù)是否為素?cái)?shù)。(2)將判斷一個(gè)數(shù)是否為素?cái)?shù)的程序段,對(duì)指定范圍內(nèi)的每一個(gè)數(shù)都執(zhí)行一遍,即可求出某個(gè)范圍內(nèi)的全部素?cái)?shù)。這種方法稱為窮舉法,也叫枚舉法4.5循環(huán)結(jié)構(gòu)程序舉例例已知y,求:(1)y<3時(shí)的最大n值。(2)與(1)的n值對(duì)應(yīng)的y值。分析:這是一個(gè)累加求和問題,循環(huán)條件是累加和y≥3,用N-S圖表示算法如圖所示。當(dāng)退出循環(huán)時(shí),y的值已超過3,因此要減去最后一項(xiàng),n的值相應(yīng)也要減去1。又由于最后一項(xiàng)累加到y(tǒng)后,n又增加了1,故n還要減去1,即累加的項(xiàng)數(shù)是n-2。求y值的算法思考:(1)求y≥3時(shí)的最小n,如何修改程序?(2)求y的值,直到累加項(xiàng)小于10-6為止,如何修改程序?(3)n取100,求y的值,如何修改程序?例求f(x)在[a,b]上的定積分分析:為了求得圖形面積,先將區(qū)間[a,b]分成n等分,每個(gè)區(qū)間的寬度為h=(b-a)/n,對(duì)應(yīng)地將圖形分成n等分,每個(gè)小部分近似一個(gè)小曲邊梯形。近似求出每個(gè)小曲邊梯形面積,然后將n個(gè)小曲邊梯形的面積相加,就得到總面積,即定積分的近似值。n越大,近似程度越高。這就是函數(shù)的數(shù)值積分方法。近似求每個(gè)小曲邊梯形的面積,常用的方法有:(1)用小矩形代替小曲邊梯形,求出各個(gè)小矩形面積,然后累加。此種方法稱為矩形法。(2)用小梯形代替小曲邊梯形,此種方法稱為梯形法。(3)用拋物線代替該區(qū)間的f(x),然后求出拋物線與x=a+(i-1)h,x=a+ih,y=0圍成的小曲邊梯形面積,此種方法稱為辛普生法。以梯形法為例,求解方法如圖所示。第一個(gè)小梯形的面積為:第二個(gè)小梯形的面積為:……第n個(gè)小梯形的面積為:例用牛頓迭代法求方程f(x)=2x3-4x2+3x-7=0在x=2.5附近的實(shí)根,直到滿足|xn-xn-1|≤10-6為止。分析:迭代法的關(guān)鍵是確定迭代公式、迭代的初始值和精度要求。牛頓切線法是一種高效的迭代法,它的實(shí)質(zhì)是以切線與x軸的交點(diǎn)作為曲線與x軸交點(diǎn)的近似值以逐步逼近解,如圖所示。牛頓迭代法牛頓迭代公式為:
4.6Python科學(xué)計(jì)算庫的應(yīng)用4.6.1NumPy庫的應(yīng)用1.第三方庫的安裝pipinstall第三方庫的名字以安裝NumPy庫為例,安裝界面如圖所示。第三方庫安裝好了以后,需要導(dǎo)入才能使用,導(dǎo)入方法和標(biāo)準(zhǔn)模塊導(dǎo)入方法一樣。通常用以下方式導(dǎo)入NumPy庫,其中np是numpy的別名,在后續(xù)命令中np就代表numpy。>>>importnumpyasnp。2.NumPy數(shù)組的操作NumPy庫中基礎(chǔ)的數(shù)據(jù)類型是同類型元素構(gòu)成的數(shù)組,稱為ndarray多維數(shù)組對(duì)象。(1)創(chuàng)建NumPy數(shù)組。創(chuàng)建NumPy數(shù)組的方法有很多。例如,可以使用array()函數(shù)由Python的序列對(duì)象創(chuàng)建NumPy數(shù)組,NumPy數(shù)組可以直接參與各種運(yùn)算,運(yùn)算結(jié)果也是數(shù)組。(2)創(chuàng)建一維數(shù)組的兩個(gè)常用函數(shù)。NumPy庫中的arange()函數(shù)和linspac()函數(shù)可以創(chuàng)建一維數(shù)組,一般調(diào)用格式為:arange([start,]end[,step])linspace(start,end[,num=50][,endpoint=True])(3)數(shù)據(jù)統(tǒng)計(jì)函數(shù)。NumPy庫還提供了許多數(shù)據(jù)統(tǒng)計(jì)函數(shù),例如求和sum()、求平均值函數(shù)mean()、求積函數(shù)prod()、求最大值函數(shù)max()、求最小值函數(shù)min(),等等。。3.利用NumPy求定積分求定積分的問題就是求n個(gè)面積之和的問題,所以可以利用NumPy的數(shù)組計(jì)算功能來求定積分。此外,NumPy還提供了trapz()函數(shù)來求定積分。該函數(shù)對(duì)離散數(shù)據(jù)形式的函數(shù)關(guān)系用梯形法來計(jì)算定積分,基本的調(diào)用格式為:trapz(y,x)其中,x為自變量向量,y為對(duì)應(yīng)的函數(shù)值向量。x省略時(shí),采用均勻間隔。例求定積分。分析:采用梯形積分法,步驟如下。(1)產(chǎn)生積分區(qū)間范圍內(nèi)的一個(gè)具有n個(gè)元素的一維數(shù)組,并求個(gè)點(diǎn)的被積函數(shù)值。(2)構(gòu)造求n個(gè)梯形面積的表達(dá)式(這一步是關(guān)鍵)。(3)求n個(gè)梯形面積之和。。4.6.2SciPy庫的應(yīng)用1.利用SciPy求定積分可以利用egrate模塊中的quad()函數(shù)來求一元函數(shù)的定積分。其基本調(diào)用格式為:quad(func,a,b)其中func是一個(gè)函數(shù)名,代表被積函數(shù),a是積分下限,b是積分上限。quad函數(shù)返回兩個(gè)值,其中第1個(gè)值是定積分值,第2個(gè)值是積分值中絕對(duì)誤差的估計(jì)值。egrate模塊還提供二重積分函數(shù)dblquad()、三重積分函數(shù)tplquad(),以及其他積分函數(shù)。。例用SciPy求定積分。分析:quad()函數(shù)的第一個(gè)參數(shù)代表被積函數(shù),這里用匿名函數(shù)來定義(詳見第8章)。2.利用SciPy求一元方程的根scipy.optimiz模塊的fsolve()函數(shù)和root()函數(shù)都可以用來求一元函數(shù)的根,它們的基本調(diào)用格式為:fsolve(func,x0)root(func,x0)其中func代表方程對(duì)應(yīng)的函數(shù)表達(dá)式,x0為初值。fsolve()函數(shù)返回一個(gè)n維數(shù)組(對(duì)于一元方程當(dāng)然只有一個(gè)元素);root()函數(shù)返回一個(gè)“OptimizeResult”對(duì)象,最重要的屬性是解數(shù)組x。例利用SciPy求f(x)=2x3-4x2+3x-7=0在x=2.5附近的根。分析:分別用fsolve函數(shù)和root函數(shù)對(duì)方程進(jìn)行求解。第5章字符串與文本分析字符串編碼字符串的索引與分片字符串的操作字節(jié)類型正則表達(dá)式字符串應(yīng)用舉例文本分析1.Unicode碼Unicode編碼標(biāo)準(zhǔn)為表達(dá)全世界所有語言的任意字符而設(shè)計(jì),它使用4字節(jié)的數(shù)字編碼來表達(dá)每個(gè)字母、符號(hào)或文字。每個(gè)數(shù)字編碼代表唯一的至少在某種語言中使用的符號(hào),被幾種語言共用的字符通常使用相同的數(shù)字來編碼,每個(gè)字符對(duì)應(yīng)一個(gè)數(shù)字編碼,每個(gè)數(shù)字編碼對(duì)應(yīng)一個(gè)字符,即不存在二義性。5.1字符串編碼2.UTF-8碼UTF-8是一種為Unicode字符設(shè)計(jì)的變長編碼系統(tǒng),即不同的字符可使用不同數(shù)量的字節(jié)編碼。對(duì)于ASCII字符,UTF-8僅使用1個(gè)字節(jié)來編碼。UTF-8支持中英文編碼,英文系統(tǒng)也可以顯示中文。Python支持UTF-8編碼,中文字符、希臘字母均可以作為標(biāo)識(shí)符使用。例如:>>>π=3.14159>>>國家='中國'3.Unicode碼與UTF-8碼的轉(zhuǎn)換在Python中,可以通過字符串的encode()方法從Unicode編碼為指定編碼方式。decode()方法從指定編碼方式解碼為Unicode方式。例如:>>>s='漢字ABC'>>>k=s.encode('utf-8')>>>kb'\xe6\xb1\x89\xe5\xad\x97ABC'>>>k.decode('utf-8')'漢字ABC'5.2.1字符串的索引為了實(shí)現(xiàn)索引,需要對(duì)字符串中的字符進(jìn)行編號(hào),最左邊字符編號(hào)為0,最右邊字符的編號(hào)比字符串的長度小1。Python還支持在字符串中使用負(fù)數(shù)從右向左進(jìn)行編號(hào),最右邊的字符(即倒數(shù)第1個(gè)字符)的編號(hào)為-1。字符串變量名后接用中括號(hào)括起來的編號(hào)即可實(shí)現(xiàn)字符串的索引。5.2字符串的索引與分片例如:>>>s="Hello"字符串s中各個(gè)字符的索引編號(hào)如圖所示。例5-1將一個(gè)字符串中的字符按逆序打印出來。分析:先輸出字符串的最后一個(gè)字符,且不換行,然后輸出倒數(shù)第2個(gè)字符,同樣不換行,一直到第1個(gè)字符。利用for循環(huán)控制字符索引編號(hào),循環(huán)賦值目標(biāo)變量從0變化到字符串的長度。取字符串的長度可以利用len()函數(shù)。程序如下:s1=input("Pleaseenterastring:")foriinrange(0,len(s1)):print(s1[len(s1)-1-i],end='')5.2.2字符串的分片字符串的分片就是從給定的字符串中分離出部分字符,這時(shí)可以使用以下形式的字符串索引編號(hào)。i:j:k其中i是索引起始位置,j是索引結(jié)束位置但不包括j位置上的字符,索引編號(hào)每次增加的步長為k。例如:>>>s="HelloWorld!">>>print(s[0:5:2])Hlo>>>s='abcdefg'>>>s[5:1:-1]'fedc'>>>s[-len(s):-1]'abcdef'例5-2利用字符串分片方法將一個(gè)字符串中的字符按逆序打印出來。程序如下:s1=input("Pleaseenterastring:")s2=s1[::-1]print(s2)5.3.1字符串連接操作1.基本連接操作字符串表達(dá)式是指用“連接”運(yùn)算符把字符串常量、字符串變量等字符串?dāng)?shù)據(jù)連接起來的有意義的式子,它的一般格式是:s1+s2+……+sn其中s1,s2,……,sn均是一個(gè)字符串,表達(dá)式的值也是一個(gè)字符串。例如:>>>"Sub"+"string"'Substring'5.3字符串的操作2.重復(fù)連接操作Python提供乘法運(yùn)算符(*),構(gòu)建一個(gè)由其自身字符串重復(fù)連接而成的字符串。字符串重復(fù)連接的一般格式是:s*n或n*s其中s是一個(gè)字符串;n是一個(gè)正整數(shù),代表重復(fù)的次數(shù)。例如:>>>"ABCD"*2'ABCDABCD'例5-3從鍵盤輸入5個(gè)字符串,將它們連接成一個(gè)字符串后輸出。s=''foriinrange(0,5):c=input("Pleaseenterastring:")s+=cprint(s)3.連接操作的其他實(shí)現(xiàn)對(duì)于連接操作,可以用格式化操作符或join()函數(shù)取代,這樣只會(huì)有一次內(nèi)存的申請(qǐng),以提高操作效率。例如:>>>'{:s}{:s}{:s}'.format('Python','','Program')'PythonProgram'>>>''.join(['Python','','Program'])'PythonProgram'5.3.2字符串邏輯操作1.關(guān)系操作在進(jìn)行字符串?dāng)?shù)據(jù)的比較時(shí),遵循以下規(guī)則。(1)單個(gè)字符比較,按字符ASCII碼大小進(jìn)行比較。(2)兩個(gè)相同長度的字符串的比較是將字符串中的字符從左向右逐個(gè)比較,如果所有字符都相等,則兩個(gè)字符串相等,如果兩個(gè)字符串中有不同的字符,以最左邊的第1對(duì)不同字符的比較結(jié)果為準(zhǔn)。(3)若兩個(gè)字符串中字符個(gè)數(shù)不等時(shí),則將較短的字符串后面補(bǔ)足空格后再比較。例5-4從鍵盤輸入10個(gè)英文單詞,輸出其中以元音字母開頭的單詞。分析:輸入一個(gè)英文單詞,并進(jìn)行判斷,用for循環(huán)控制重復(fù)執(zhí)行10次??梢詫⑺性糇帜笜?gòu)成一個(gè)字符串,遍歷該字符串中的各個(gè)字符,并判斷單詞的首字母。2.成員關(guān)系操作字符串的成員關(guān)系操作包括in和notin操作,一般格式為:字符串1[not]in字符串2該操作用于判斷字符串1是否屬于字符串2,其返回值為True或False.例如:>>>'a'in'abc'True5.3.3字符串的常用方法函數(shù)可以通過函數(shù)名直接調(diào)用,如ord('A'),而對(duì)象中的方法則要通過對(duì)象名和方法名來調(diào)用,一般形式為:對(duì)象名.方法名(參數(shù))在Python中,字符串類型(String)可以看成是一個(gè)類(Class),而一個(gè)具體的字符串可以看成是一個(gè)對(duì)象,該對(duì)象具有很多方法,這些方法是通過類的成員函數(shù)來實(shí)現(xiàn)的。1.字母大小寫轉(zhuǎn)換s.upper():全部轉(zhuǎn)換為大寫字母。s.lower():全部轉(zhuǎn)換為小寫字母。s.swapcase():字母大小寫互換。s.capitalize():首字母大寫,其余小寫。s.title():首字母大寫。例5-5字母大小寫轉(zhuǎn)換函數(shù)使用示例。程序如下:s='PythonProgram'print('{:s}lower={:s}'.format(s,s.lower()))print('{:s}upper={:s}'.format(s,s.upper()))print('{:s}swapcase={:s}'.format(s,s.swapcase()))print('{:s}capitalize={:s}'.format(s,s.capitalize()))print('{:s}title={:s}'.format(s,s.title()))2.字符串對(duì)齊處理s.ljust(width,[fillchar]):輸出width個(gè)字符,s左對(duì)齊,右邊不足部分用fillchar填充,默認(rèn)用空格填充。s.rjust(width,[fillchar]):輸出width個(gè)字符,s右對(duì)齊,左邊不足部分用fillchar填充,默認(rèn)用空格填充。s.center(width,[fillchar])輸出width個(gè)字符,s中間對(duì)齊,兩邊不足部分用fillchar填充,默認(rèn)用空格填充。s.zfill(width):把s變成width長,并且右對(duì)齊,左邊不足部分用0補(bǔ)齊。例5-6字符串對(duì)齊處理函數(shù)使用示例。程序如下:s='PythonProgram'print('{:s}ljust={:s}'.format(s,s.ljust(20)))print('{:s}rjust={:s}'.format(s,s.rjust(20)))print('{:s}center={:s}'.format(s,s.center(20)))print('{:s}zfill={:s}'.format(s,s.zfill(20)))3.字符串搜索s.find(substr,[start,[end]]):返回s中出現(xiàn)substr的第1個(gè)字符的編號(hào),如果s中沒有substr則返回-1。start和end作用就相當(dāng)于在s[start:end]中搜索。s.index(substr,[start,[end]]):與find()相同,只是在s中沒有substr時(shí),會(huì)返回一個(gè)運(yùn)行時(shí)錯(cuò)誤。s.rfind(substr,[start,[end]]):返回s中最后出現(xiàn)的substr的第1個(gè)字符的編號(hào),如果s中沒有substr則返回-1,也就是說從右邊算起的第1次出現(xiàn)的substr的首字符編號(hào)。3.字符串搜索s.rindex(substr,[start,[end]]):與rfind()相同,只是在s中沒有substr時(shí),會(huì)返回一個(gè)運(yùn)行時(shí)錯(cuò)誤。s.count(substr,[start,[end]]):計(jì)算substr在s中出現(xiàn)的次數(shù)。s.startswith(prefix[,start[,end]]):是否以prefix開頭,若是返回True,否則返回False。s.endswith(suffix[,start[,end]]):以suffix結(jié)尾,若是返回True,否則返回False。例5-7字符串搜索函數(shù)使用示例。程序如下:s='PythonProgram'print('{:s}findnono={:d}'.format(s,s.find('nono')))print('{:s}findt={:d}'.format(s,s.find('t')))print('{:s}findtfrom{:d}={:d}'.format(s,1,s.find('t',1)))print('{:s}findtfrom{:d}to{:d}={:d}'.format(s,1,2,s.find('t',1,2)))print('{:s}rfindt={:d}'.format(s,s.rfind('t')))print('{:s}countt={:d}'.format(s,s.count('t')))4.字符串替換s.replace(oldstr,newstr,[count]):把s中的oldstar替換為newstr,count為替換次數(shù)。這是替換的通用形式,還有一些函數(shù)進(jìn)行特殊字符的替換。s.strip([chars]):把s中前后chars中有的字符全部去掉,可以理解為把s前后chars替換為None。默認(rèn)去掉前后空格。s.lstrip([chars]):把s左邊chars中有的字符全部去掉。默認(rèn)去掉左邊空格。s.rstrip([chars]):把s右邊chars中有的字符全部去掉。默認(rèn)去掉右邊空格。s.expandtabs([tabsize]):把s中的tab字符替換為空格,每個(gè)tab替換為tabsize個(gè)空格,默認(rèn)是8個(gè)。例5-8字符串替換函數(shù)使用示例。程序如下:s='PythonProgram'print('{:s}replacetto*={:s}'.format(s,s.replace('t','*')))print('{:s}replacetto*={:s}'.format(s,s.replace('t','*',1)))print('{:s}strip={:s}'.format(s,s.strip
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024高考地理一輪復(fù)習(xí)專練55可持續(xù)發(fā)展的內(nèi)涵和實(shí)現(xiàn)途徑含解析新人教版
- 外墻保溫營造做法
- 《費(fèi)孝通-鄉(xiāng)土中國》差序格局
- 初三八班踐行弟子規(guī)主題班會(huì)課件
- 2024年海南軟件職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測驗(yàn)歷年參考題庫(頻考版)含答案解析
- 論交際性操練在漢語詞匯教學(xué)中的實(shí)際運(yùn)用
- 鈣鈦礦電池發(fā)展?jié)摿Ψ治鰣?bào)告
- 2024年浙江旅游職業(yè)學(xué)院高職單招語文歷年參考題庫含答案解析
- 2024年泉州華光職業(yè)學(xué)院高職單招語文歷年參考題庫含答案解析
- 2024年防城港市人民醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點(diǎn)附帶答案
- 《沙盤技術(shù)》教學(xué)大綱
- (主城一診)重慶市2025年高2025屆高三學(xué)業(yè)質(zhì)量調(diào)研抽測 (第一次)地理試卷(含答案)
- (新版)多旋翼無人機(jī)超視距駕駛員執(zhí)照參考試題庫(含答案)
- 哈利波特中英文全集
- DLT5210.1-電力建設(shè)施工質(zhì)量驗(yàn)收及評(píng)價(jià)規(guī)程全套驗(yàn)評(píng)表格之歐陽法創(chuàng)編
- (2024)湖北省公務(wù)員考試《行測》真題及答案解析
- 500句漢語日常對(duì)話
- 《抽搐的鑒別與處理》課件
- 自來水廠建設(shè)項(xiàng)目可行性研究報(bào)告
- 承諾保證協(xié)議
- 土地成片開發(fā)運(yùn)營模式與案例
評(píng)論
0/150
提交評(píng)論