Python語言程序設(shè)計劉衛(wèi)國全套教案課件_第1頁
Python語言程序設(shè)計劉衛(wèi)國全套教案課件_第2頁
Python語言程序設(shè)計劉衛(wèi)國全套教案課件_第3頁
Python語言程序設(shè)計劉衛(wèi)國全套教案課件_第4頁
Python語言程序設(shè)計劉衛(wèi)國全套教案課件_第5頁
已閱讀5頁,還剩607頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Python語言程序設(shè)計第1章Python語言基礎(chǔ)Python語言的發(fā)展與特點(diǎn)Python程序的運(yùn)行環(huán)境Python數(shù)據(jù)類型各種形式Python數(shù)據(jù)的表示方法Python的基本運(yùn)算1.1.1Python語言的發(fā)展歷史Python由荷蘭的GuidovanRossum設(shè)計。Python第一個版本于1991年初公開發(fā)行。。Python2.0于2000年10月發(fā)布,增加了許多新的語言特性。Python3.0于2008年12月發(fā)布,此版本不完全兼容Python2.0,導(dǎo)致Python

2.0與Python3.0不兼容。1.1Python語言概述1.1.2Python語言的特點(diǎn)1.Python語言的優(yōu)勢(1)簡單易學(xué)。Python語言語法結(jié)構(gòu)簡單,組成一個Python程序也沒有太多的語法細(xì)節(jié)和規(guī)則要求,“信手拈來”就可以組成一個程序。(2)程序可讀性好。通過強(qiáng)制程序縮進(jìn),Python語言確實(shí)使得程序具有很好的可讀性,同時Python的縮進(jìn)規(guī)則是也有利于程序員養(yǎng)成良好的程序設(shè)計習(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è)計方式。2.Python語言的局限性Python程序的運(yùn)行速度比較慢。Python用代碼縮進(jìn)來區(qū)分語法邏輯的方式可能給初學(xué)者帶來困惑,最常見的情況是Tab和空格的混用會導(dǎo)致錯誤,而這是用肉眼無法分別的。1.1.3Python語言的應(yīng)用領(lǐng)域1.Windows系統(tǒng)編程

在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é)計算與數(shù)據(jù)可視化

Python中用于科學(xué)計算與數(shù)據(jù)可視化的模塊有很多,例如NumPy、SciPy、SymPy、Matplotlib、Traits、TraitsUI、Chaco、TVTK、Mayavi、VPython、OpenCV等,涉及的應(yīng)用領(lǐng)域包括數(shù)值計算、符號計算、二維圖表、三維數(shù)據(jù)可視化、三維動畫演示、圖像處理以及界面設(shè)計等。

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模塊是一個用于多媒體操作的Python模塊,可以對包括WAV、MP3、AVI等多媒體格式文件進(jìn)行編碼、解碼和播放;PyOpenGL模塊封裝了OpenGL應(yīng)用程序編程接口,通過該模塊可在Python程序中集成二維或三維圖形;PIL(PythonImagingLibrary,Python圖形庫)為Python提供了強(qiáng)大的圖像處理功能,并提供廣泛的圖像文件格式支持。5.網(wǎng)絡(luò)應(yīng)用

Python語言提供了socket模塊,對Socket接口進(jìn)行了二次封裝,支持Socket接口的訪問;還提供了urllib、cookielib、httplib、scrapy等大量模塊,用于對網(wǎng)頁內(nèi)容進(jìn)行讀取和處理,并結(jié)合多線程編程以及其他有關(guān)模塊可以快速開發(fā)網(wǎng)頁爬蟲之類的應(yīng)用程序;可以使用Python語言編寫CGI程序,也可以把Python程序嵌入到網(wǎng)頁中運(yùn)行;Python語言還支持Web網(wǎng)站開發(fā),比較流行的開發(fā)框架有web2py、django等。6.電子游戲應(yīng)用

Pygame就是用來開發(fā)電子游戲軟件的Python模塊,在SDL庫的基礎(chǔ)上開發(fā),可以支持多個操作系統(tǒng)。使用Pygame模塊,可以在Python程序中創(chuàng)建功能豐富的游戲和多媒體程序。1.2.1Python系統(tǒng)的下載與安裝

從Python官網(wǎng)下載Python系統(tǒng)文件,下載地址為/downloads/。選擇基于Windows操作系統(tǒng)的當(dāng)時最新版本Python3.5.1進(jìn)行下載。

下載完成后,運(yùn)行系統(tǒng)文件python-3.5.1.exe,進(jìn)入Python系統(tǒng)安裝界面。1.2Python語言的開發(fā)環(huán)境

選中“AddPython3.5toPATH”復(fù)選框,并使用默認(rèn)的安裝路徑,單擊“InstallNow”選項,這時進(jìn)入系統(tǒng)安裝過程,安裝完成后單擊close按鈕即可。如果要設(shè)置安裝路徑和其他特性,可以選擇“Customizeinstallation”選項。1.2.2系統(tǒng)環(huán)境變量的設(shè)置

如果在安裝時選中了“AddPython3.5toPATH”復(fù)選框,則會自動將安裝路徑添加到環(huán)境變量Path,否則可以在安裝完成后添加。

添加路徑的方法為:在Windows桌面右擊“計算機(jī)”圖標(biāo),在彈出的快捷菜單中選擇“屬性”命令,然后在打開的對話框中選擇“高級系統(tǒng)設(shè)置”選項,在打開的“系統(tǒng)屬性”對話框中選擇“高級”選項卡,單擊“環(huán)境變量”按鈕,打開“環(huán)境變量”對話框,在“系統(tǒng)變量”區(qū)域選擇“Path”選項,單擊“編輯”按鈕,將安裝路徑添加到Path中,最后單擊“確定”按鈕逐級返回。1.2.3Python程序的運(yùn)行1.命令行形式的Python解釋器(1)在Windows系統(tǒng)的桌面,選擇“開始”→“所有程序”→“Python3.5”→“Python3.5(32-bit)”命令。(2)在Windows桌面單擊“開始”按鈕,選擇“運(yùn)行”選項,在彈出的“運(yùn)行”對話框中選擇Python啟動文件的路徑和文件名python.exe,單擊“確定”按鈕。(3)可以到Python的安裝文件夾下,通過雙擊運(yùn)行python.exe文件來啟動命令行的Python解釋器,或在Python圖標(biāo)上單擊右鍵,在彈出的菜單中選擇“創(chuàng)建快捷方式”命令,之后把建立的快捷方式圖標(biāo)復(fù)制到桌面上,之后通過快捷方式來啟動命令行的Python解釋器。

啟動命令行形式的Python解釋器后出現(xiàn)相應(yīng)的程序窗口,如圖所示。其中“>>>”是Python解釋器的提示符,在提示符后面輸入語句,Python解釋器將解釋執(zhí)行。還可以在Windows命令提示符(即DOS操作界面)下直接運(yùn)行python.exe文件,來啟動命令行的Python解釋器,程序窗口如圖所示。按Ctrl+Z及Enter鍵,或輸入quit()命令,或單擊Python命令行窗口的關(guān)閉按鈕,均可退出Python解釋器。2.圖形用戶界面形式的Python解釋器在Windows系統(tǒng)的桌面,選擇“開始”→“所有程序”→“Python3.5”→“IDLE(Python3.532-bit”來啟動圖形用戶界面形式的Python解釋器,其窗口如圖所示。

在Python解釋器圖形用戶界面窗口,選擇“File”→“Exit”命令,或按Ctrl+Q鍵,或輸入quit()命令,或單擊Python圖形用戶界面窗口的關(guān)閉按鈕,均可退出Python解釋器圖形用戶界面窗口。3.Python的命令執(zhí)行方式

啟動Python解釋器后,可以直接在其提示符(>>>)后輸入語句。例如,先在提示符>>>后輸入一個輸出語句,下一行將接著輸出結(jié)果。>>>print("Hello,World!")Hello,World!>>>print(1+3/4)1.754.Python的程序方式(1)在Python解釋器的程序編輯窗口執(zhí)行Python程序。在Python解釋器圖形用戶界面窗口,選擇“File”→“NewFile”命令,或按Ctrl+N鍵,打開程序編輯窗口,如圖所示。

在程序編輯窗口輸入程序的全部語句,例如輸入語句:print("Hello,World!")

語句輸入完成后,在Python程序編輯窗口選擇“File”→“Save”命令,確定保存文件位置和文件名,例如e:\mypython\hello.py。

在Python程序的編輯窗口選擇“Run”→“RunModule”命令,或按F5鍵,運(yùn)行程序并在Python解釋器圖形用戶界面窗口中輸出運(yùn)行結(jié)果。(2)在Python解釋器提示符下運(yùn)行Python程序在Python解釋器(命令行或圖形用戶界面)的提示符下執(zhí)行import語句來導(dǎo)入程序文件。import語句的作用是將Python程序文件從磁盤加載到內(nèi)存,在加載的同時執(zhí)行程序。例如,運(yùn)行hello.py,可以使用下面的語句。>>>importhello注意,模塊文件名不加擴(kuò)展名“.py”。(3)Windows命令提示符下運(yùn)行Python程序在Windows命令提示符下切換到Python程序文件所在文件夾,因為程序文件位于e:\mypython文件夾下,所以可以先選擇e:盤并設(shè)置其當(dāng)前文件夾為e:\mypython。然后,在Windows命令提示符下輸入python,后跟要執(zhí)行的程序文件名即可,如圖所示。1.常量

在程序運(yùn)行過程中,其值不能改變的數(shù)據(jù)對象稱為常量(constant)。常量按其值的表示形式區(qū)分它的類型。例如,0、435、-78是整型常量,-5.8、3.14159、1.0是實(shí)型常量(也稱作浮點(diǎn)型常量),'410083'、'Python'是字符串常量。1.3常量與變量2.變量的一般概念

在高級語言中,變量(variable)可以看作是一個特定的內(nèi)存存儲區(qū),該存儲區(qū)由一定個數(shù)字節(jié)的內(nèi)存單元組成,并可以通過變量的名字來訪問。

高級語言中的變量具有變量名、變量值和變量地址三個屬性。

變量在它存在期間,在內(nèi)存中占據(jù)一定的存儲單元,以存放變量的值。3.Python變量(1)變量的數(shù)據(jù)類型

Python語言是一種動態(tài)類型語言,變量的數(shù)據(jù)類型是在給變量賦值時確定,對變量的每一次賦值,都可能改變變量的類型。例如:可以使用Python內(nèi)置函數(shù)type()來查詢變量的類型。例如:(2)變量與地址的關(guān)系

Python語言采用基于值的內(nèi)存管理方式,不同的值分配不同的內(nèi)存空間。這可理解為,Python變量并不是某一個固定內(nèi)存單元的標(biāo)識,而是對內(nèi)存中存儲的某個數(shù)據(jù)的引用(reference),這個引用是可以動態(tài)改變的。4.Python標(biāo)識符

在Python中,標(biāo)識符由字母、數(shù)字和下劃線(_)組成,但不能以數(shù)字開頭,標(biāo)識符中的字母是區(qū)分大小寫的。例如,abc、a_b_c、Student_ID都是合法的標(biāo)識符,sum、Sum、SUM代表不同的標(biāo)識符。單獨(dú)的下劃線(_)是一個特殊變量,用于表示上一次運(yùn)算的結(jié)果。

5.Python關(guān)鍵字

所謂關(guān)鍵字(keyword),就是Python語言中事先定義的、具有特定含義的標(biāo)識符,有時又稱保留字。關(guān)鍵字不允許另作它用,否則執(zhí)行時會出現(xiàn)語法錯誤??梢栽谑褂胕mport語句導(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),但可以有正號或負(fù)號。在Python中,整型數(shù)據(jù)的值在計算機(jī)內(nèi)的表示不是固定長度的,只要內(nèi)存許可,整數(shù)可以擴(kuò)展到任意長度,整數(shù)的取值范圍幾乎包括了全部整數(shù)(無限大),這給大數(shù)據(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ù)表示一個實(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é)計數(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中定義一個標(biāo)準(zhǔn)字符串可以使用單引號、雙引號和三引號(三個單引號或三個雙引號),這使得Python輸入文本更方便。例如,當(dāng)字符串的內(nèi)容中包含雙引號時,就可以用單引號定義,反之亦然。

用單引號或雙引號括起來的字符串必須在一行內(nèi)表示,這是最常見的表示字符串的方法。而用三引號括起來的字符串可以是多行的。2.轉(zhuǎn)義字符

轉(zhuǎn)義字符以反斜杠“\”開頭,后跟一個或幾個字符。轉(zhuǎn)義字符具有特定的含義,不同于字符原有的意義,故稱轉(zhuǎn)義字符,主要用來表示那些用一般字符不便于表示的控制代碼。例如,“\n”表示以后的輸出從下一行開始;“\r”表示對當(dāng)前行作重疊輸出(只回車,不換行);字符“\t”是制表符,其作用是使當(dāng)前輸出位置橫向跳至一個輸出區(qū)的第一列。3.基本的字符串函數(shù)(1)eval()函數(shù)

與字符串有關(guān)的一個重要函數(shù)是eval,其調(diào)用格式為:

eval(字符串)

eval()函數(shù)的作用是把字符串的內(nèi)容作為對應(yīng)的Python語句來執(zhí)行。(2)len()函數(shù)

len()函數(shù)返回字符串的長度,即字符串中所包含的字符個數(shù),其調(diào)用格式為:

len(字符串)1.4.3布爾類型

在Python中,布爾型數(shù)據(jù)有True和False,分別代表邏輯真和邏輯假。

值為真或假的表達(dá)式稱為布爾表達(dá)式,Python的布爾表達(dá)式包括關(guān)系運(yùn)算表達(dá)式和邏輯運(yùn)算表達(dá)式,它們通常用來在程序中表示條件,條件滿足時結(jié)果為True,不滿足時結(jié)果為False。

在Python中,邏輯值True和False實(shí)際上是分別用整型值1和0參與運(yùn)算。例如:>>>x=False>>>x+(5>4)11.4.4復(fù)合數(shù)據(jù)類型

列表、元組、字典和集合類型的數(shù)據(jù)包含多個相互關(guān)聯(lián)的數(shù)據(jù)元素,所以稱它們?yōu)閺?fù)合數(shù)據(jù)類型。字符串其實(shí)也是一種復(fù)合數(shù)據(jù),其元素是單個字符。

列表、元組和字符串是有順序的數(shù)據(jù)元素的集合體,稱作序列(sequence)。序列可以通過各數(shù)據(jù)元素在序列中的位置編號(索引)來訪問數(shù)據(jù)元素。字典和集合屬于無順序的數(shù)據(jù)集合體,不能通過位置編號來訪問數(shù)據(jù)元素。1.列表

列表(list)是寫在中括號之間、用逗號分隔的元素序列,元素的類型可以不相同,可以是數(shù)字、單個字符、字符串甚至可以包含列表(所謂嵌套)。例如:>>>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)是寫在小括號之間、用逗號隔開的元素序列。元組中的元素類型也可以不相同。元組與列表類似,不同之處在于元組的元素不能修改,相當(dāng)于只讀列表。例如:>>>mtuple=('brenden',45.3,911,'john',32)要注意一些特殊元組的表示方法??盏膱A括號表示空元組。當(dāng)元組只有一個元素時,必須以逗號結(jié)尾。任何一組以逗號分隔的對象,當(dāng)省略標(biāo)識序列的括號時,默認(rèn)為元組。例如:>>>2,3,4(2,3,4)元組與字符串類似,元素不能二次賦值。其實(shí),可以把字符串看作一種特殊的元組。元組和列表有幾點(diǎn)重要的區(qū)別。列表元素用中括號[]括起來,且元素的個數(shù)及元素的值可以改變。元組元素用小括號()括起來,且不可以更改。元組可以看成是只讀的列表。3.字典字典(dictionary)是寫在大括號之間、用逗號分隔的元素集合,其元素由關(guān)鍵字(key,也稱作鍵)和關(guān)鍵字對應(yīng)的值(value)組成,通過關(guān)鍵字來存取的字典中的元素。列表和元組是有序的對象結(jié)合,字典是無序的對象集合。字典是一種映射類型(mappingtype),它是一個無序的“關(guān)鍵字:值”對集合。關(guān)鍵字必須使用不可變類型,也就是說列表和包含可變類型的元組不能做索引關(guān)鍵字。在同一個字典中,關(guān)鍵字還必須互不相同。例如:>>>dict={'name':'brenden','code':410012,'dept':'sales'}4.集合集合(set)是一個無序且包含不重復(fù)元素的數(shù)據(jù)類型?;竟δ苁沁M(jìn)行成員關(guān)系測試和消除重復(fù)元素??梢允褂么罄ㄌ柣蛘遱et()函數(shù)創(chuàng)建集合類型,注意:創(chuàng)建一個空集合必須用set()而不是{},因為{}是用來創(chuàng)建一個空字典。>>>student={'Tom','Jim','Mary','Tom','Jack','Rose'}

Python的標(biāo)準(zhǔn)庫包含很多模塊,每個模塊中定義了很多有用的函數(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ù),時間(time)和日歷(calendar)模塊提供了能處理日期和時間的函數(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ù)基本一致,包括圓周率、自然對數(shù)的底,還有復(fù)數(shù)的冪指數(shù)、對數(shù)函數(shù)、平方根函數(shù)、三角函數(shù)等。cmath模塊函數(shù)名和math模塊函數(shù)名一樣,只是math模塊對實(shí)數(shù)運(yùn)算進(jìn)行支持,cmath模塊對復(fù)數(shù)運(yùn)算進(jìn)行支持。3.random模塊函數(shù)(1)隨機(jī)數(shù)種子(2)隨機(jī)挑選和排序(3)生成隨機(jī)數(shù)4.time模塊函數(shù)

例如,time()函數(shù)返回當(dāng)前時間的時間戳。5.calendar模塊函數(shù)

日歷(calendar)模塊提供與日歷相關(guān)的功能。在默認(rèn)情況下,日歷把星期一作為一周的第一天,星期日為最后一天。要改變這種設(shè)置,可以調(diào)用setfirstweekday()函數(shù)。1.5.2常用內(nèi)置函數(shù)

Python內(nèi)置函數(shù)包含在模塊builtins中,該模塊在啟動Python解釋器時自動裝入內(nèi)存,而其他的模塊函數(shù)都要等使用import語句導(dǎo)入時才會裝入內(nèi)存。內(nèi)置函數(shù)隨著Python解釋器的運(yùn)行而創(chuàng)建,在程序中可以隨時調(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)生可迭代對象range(0,2)2.?dāng)?shù)值運(yùn)算函數(shù)Python有些內(nèi)置函數(shù)用于數(shù)值運(yùn)算。abs(x):返回x的絕對值,結(jié)果保持x的類型。x為復(fù)數(shù)時返回復(fù)數(shù)的模。pow(x,y[,z]):省略z時,返回x的y次冪,結(jié)果保持x或y的類型。如果使用了參數(shù)z,其結(jié)果是x的y次方再對z求余數(shù)。round(x[,n]):用于對浮點(diǎn)數(shù)進(jìn)行四舍五入運(yùn)算,返回值為浮點(diǎn)數(shù)。它有一個可選的小數(shù)位數(shù)參數(shù)。divmod(x,y):把除法和取余運(yùn)算結(jié)合起來,返回一個包含商和余數(shù)的元組。3.Python系統(tǒng)的幫助信息查看Python幫助信息可以使用內(nèi)置函數(shù)dir()和help()。dir()函數(shù)的調(diào)用方法很簡單,只需把想要查詢的對象加到括號中就可以了,它返回一個列表,其中包含要查詢對象的所有屬性和方法。查看某個對象的幫助信息可以用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é)果是一個浮點(diǎn)數(shù),即使被除數(shù)和除數(shù)都是整型,也返回一個浮點(diǎn)數(shù);“//”運(yùn)算符做除法運(yùn)算后返回商的整數(shù)部分。如果分子或者分母是浮點(diǎn)型,它返回的值將會是浮點(diǎn)類型;“%”運(yùn)算符做除法運(yùn)算后返回余數(shù)。

“**”運(yùn)算符實(shí)現(xiàn)乘方運(yùn)算,其優(yōu)先級高于乘除運(yùn)算,乘除運(yùn)算優(yōu)先級高于加減運(yùn)算。Python表達(dá)式書寫練習(xí):2.浮點(diǎn)數(shù)的計算誤差

Python中能表示浮點(diǎn)數(shù)的有效數(shù)字是有限的,而在實(shí)際應(yīng)用中數(shù)據(jù)的有效位數(shù)并無限制,這種矛盾,勢必帶來計算時的微小誤差。

對浮點(diǎn)數(shù)判斷是否相等要慎用“==”運(yùn)算符,恰當(dāng)?shù)霓k法是判斷它們是否“約等于”,只要在允許的誤差范圍內(nèi),這種判斷仍是有意義的。所謂“約等于”是指兩個浮點(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)換成一個復(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=0第2章

順序結(jié)構(gòu)程序設(shè)計的基本步驟算法的概念Python程序的書寫規(guī)則賦值語句輸入輸出語句順序結(jié)構(gòu)程序設(shè)計方法2.1.1程序設(shè)計的基本步驟分析問題,確定數(shù)學(xué)模型或方法設(shè)計算法,畫出流程圖選擇編程工具,按算法編寫程序調(diào)試程序,分析輸出結(jié)果2.1程序設(shè)計概述2.1.2算法及其描述1.算法的概念計算機(jī)解決問題的方法和步驟,就是計算機(jī)解題的算法。例2-1

求例2-2

輸入20個數(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)化流程圖描述算法①程序的三種基本結(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):只有一個入口。只有一個出口。結(jié)構(gòu)中無死語句,即結(jié)構(gòu)內(nèi)的每一部分都有機(jī)會被執(zhí)行。結(jié)構(gòu)中無死循環(huán),即循環(huán)在滿足一定條件后能正常結(jié)束。②結(jié)構(gòu)化流程圖(N-S圖):以三種基本結(jié)構(gòu)作為構(gòu)成算法的基本元素,每一種基本結(jié)構(gòu)用一個矩形框來表示,而且取消了流程線,各基本結(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初識Python程序例

輸入三個變量的值,然后按小到大順序輸出。程序如下:x=int(input('inputx:'))#輸入x的值y=int(input('inputy:'))#輸入y的值z=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的值,求出對應(yīng)的函數(shù)值。程序如下:deff(x,y):returnx**2+y**2print("f(3,4)=",f(3,4))第一個語句定義了一個函數(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項之和。程序如下:a,b=0,1s=0foriinrange(50):#i從0變化到49

s+=ba,b=b,a+bprint("s=",s)程序段一:foriinrange(0,50):s+=b

a,b=b,a+b2.2.2

Python語句縮進(jìn)規(guī)則Python通過語句縮進(jìn)對齊反映語句之間的邏輯關(guān)系,從而區(qū)分不同的語句塊。就一個語句塊來講,需要保持一致的縮進(jìn)量。程序段二:foriinrange(0,50):

s+=ba,b=b,a+b兩種縮進(jìn)方式可用流程圖直觀表示。(a)(b)兩種縮進(jìn)方式的比較2.2.3Python語句行與注釋1.語句行在Python中,語句行從解釋器提示符后的第一列開始,前面不能有任何空格,否則會產(chǎn)生語法錯誤。每個語句行以回車符結(jié)束??梢栽谕恍兄惺褂枚鄺l語句,語句之間使用分號分隔。如果語句行太長,可以使用反斜杠將一行語句分為多行顯示。如果在語句中包含小括號、中括號或大括號,則不需要使用多行續(xù)行符。2.注釋注釋對程序的執(zhí)行沒有任何影響,目的是對程序作解釋說明,以增強(qiáng)程序的可讀性。程序中的單行注釋采用#開頭,注釋可以從任意位置開始,可以在語句行末尾,也可以獨(dú)立成行。對于多行注釋,一般推薦使用多個#開頭的多行注釋,也可采用三引號(實(shí)際上是用三引號括起來的一個多行字符串,起到注釋的作用)。注意,注釋行是不能使用反斜杠續(xù)行的。2.3賦值語句Python的賦值和一般的高級語言的賦值有很大的不同,它是數(shù)據(jù)對象的一個引用。2.3.1賦值語句的一般格式一個變量通過賦值可以指向不同類型的對象。賦值語句的一般格式為:變量=表達(dá)式賦值號左邊必須是變量,右邊則是表達(dá)式。賦值的意義是先計算表達(dá)式的值,然后使該變量指向該數(shù)據(jù)對象,該變量可以理解為該數(shù)據(jù)對象的別名。Python是動態(tài)類型語言,也就是說不需要預(yù)先定義變量類型,變量的類型和值在賦值那一刻被初始化。例如:>>>x=67.2>>>x="ABCD"Python中的賦值并不是直接將一個值賦給一個變量,而是通過引用傳遞的。在賦值時,不管這個對象是新創(chuàng)建的還是一個已經(jīng)存在的,都是建立變量對該數(shù)據(jù)對象的引用(并不是值)。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分別等價于“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í)行時,創(chuàng)建一個值為10的整型對象,將對象的同一個引用賦值給a和b,即a和b均指向數(shù)據(jù)對象10。2.同步賦值同步賦值的一般形式為:變量1,變量2,……,變量n=表達(dá)式1,表達(dá)式2,……,表達(dá)式n其中賦值號左邊變量的個數(shù)與右邊表達(dá)式的個數(shù)要一致。同步賦值首先計算右邊n個表達(dá)式的值,然后同時將表達(dá)式的值賦值給左邊的n個變量,這并非等同于簡單地將多個單一賦值語句進(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([提示字符串])其中,中括號中的“提示字符串”是可選項。如果有“提示字符串”,則原樣顯示,提示用戶輸入數(shù)據(jù)。input()函數(shù)從標(biāo)準(zhǔn)輸入設(shè)備(鍵盤)讀取一行數(shù)據(jù),并返回一個字符串(去掉結(jié)尾的換行符)。例如:>>>

name=input("Pleaseinputyourname:")Pleaseinputyourname:jasmine↙2.4

數(shù)據(jù)輸入輸出2.標(biāo)準(zhǔn)輸出Python語言直接使用表達(dá)式可以輸出該表達(dá)式的值。常用的輸出方法是用print()函數(shù),其調(diào)用格式為:print([輸出項1,輸出項2,……,輸出項n][,sep=分隔符][,end=結(jié)束符])其中sep表示輸出時各輸出項之間的分隔符(默認(rèn)以空格分隔),end表示結(jié)束符(默認(rèn)以回車換行結(jié)束)。例如:print(10,20,sep=',',end='*')print(30)輸出結(jié)果為:10,20*302.4.2格式化輸出Python格式化輸出的基本做法是,將輸出項格式化,然后利用print()函數(shù)輸出。具體實(shí)現(xiàn)方法有三種:利用字符串格式化運(yùn)算符%。利用format()內(nèi)置函數(shù)。利用字符串的format()方法。1.字符串格式化運(yùn)算符%在Python中,格式化輸出時,用運(yùn)算符%分隔格式字符串與輸出項,一般格式為;格式字符串%(輸出項1,輸出項2,……,輸出項n)其中,格式字符串由普通字符和格式說明符組成。普通字符原樣輸出,格式說明符決定所對應(yīng)輸出項的輸出格式。格式說明符以百分號%開頭,后接格式標(biāo)志符。例如:>>>print("%+3d,%0.2f"%(25,123.567))+25,123.572.format()內(nèi)置函數(shù)format()內(nèi)置函數(shù)可以將一個輸出項單獨(dú)進(jìn)行格式化,一般格式為:format(輸出項[,格式字符串])其中,格式字符串是可選項。當(dāng)省略格式字符串時,該函數(shù)等價于函數(shù)“str(輸出項)”的功能。format()內(nèi)置函數(shù)把輸出項按格式字符串中的格式說明符進(jìn)行格式化。>>>print(format(15,'X'),format(65,'c'),format(3.145,'f'))FA3.1450003.字符串的format()方法在Python中,字符串都有一個format()方法,這個方法會把格式字符串當(dāng)作一個模版,通過傳入的參數(shù)對輸出項進(jìn)行格式化。字符串format()方法的調(diào)用格式為:格式字符串.format(輸出項1,輸出項2,……,輸出項n)格式說明符使用大括號擴(kuò)起來,一般形式如下:{[序號或鍵]:格式說明符}例如:>>>'{0:.2f},{1}'.format(3.145,500)'3.15,500'2.5順序結(jié)構(gòu)程序舉例例已知x,y,求z的值。分析:這是一個求表達(dá)式值的問題,程序分為以下三步。求x,y的值。求z的值。輸出z的值。例

從鍵盤輸入一個三位整數(shù)n,輸出其逆序數(shù)m。例如,輸入n=127,則m=721。分析:程序分為以下三步。輸入一個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)Python中表示條件的方法if語句選擇結(jié)構(gòu)程序設(shè)計方法。3.1.1關(guān)系運(yùn)算Python的關(guān)系運(yùn)算符有:<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、==(等于)、!=(不等于)關(guān)系運(yùn)算符用于兩個量的比較判斷。由關(guān)系運(yùn)算符將兩個表達(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)算符要求有兩個運(yùn)算量,用于連接兩個條件,構(gòu)成更復(fù)雜的條件。not運(yùn)算符只作用于后面的一個邏輯量。2.邏輯表達(dá)式邏輯表達(dá)式是用邏輯運(yùn)算符將邏輯量連接起來的式子。除not以外,and和or構(gòu)成的邏輯表達(dá)式一般形式為:P邏輯運(yùn)算符Q其中P,Q是兩個邏輯量。例

寫出下列條件。(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時,不管b為何值,結(jié)果為False。(2)aorb:當(dāng)a為True時,不管b為何值,結(jié)果為True。對于aandb,當(dāng)a的可解釋為False,則表達(dá)式值為False,否則表達(dá)式的值為b;對于aorb,如果a為False,則表達(dá)式的值為b,否則表達(dá)式值為True。3.1.3測試運(yùn)算1.成員測試in運(yùn)算符用于在指定的序列中查找某個值是否存在,存在返回True,否則返回False。該運(yùn)算符的使用格式是xiny,如果x在y序列中則返回True,否則返回False。例如:>>>3in(20,15,3,14,5)True“notin”的含義是,如果在指定的序列中沒有找到值,則返回True,否則返回False。對于xnotiny,如果x不在y序列中返回True,否則返回False。例如:>>>3notin(20,15,3,14,5)False2.身份測試身份運(yùn)算符用于測試兩個變量是否指向同一個對象。例如:>>>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á)式后面必須加冒號。(2)因為Python把非0當(dāng)作真,0當(dāng)作假,所以表示條件的表達(dá)式不一定必須是結(jié)果為True或False的關(guān)系表達(dá)式或邏輯表達(dá)式,可以是任意表達(dá)式。(3)if語句中的語句塊必須向右縮進(jìn),語句塊可以是單個語句,也可以是多個語句。當(dāng)包含兩個或兩個以上的語句時,語句必須縮進(jìn)一致,即語句塊中的語句必須上下對齊。(4)如果語句塊中只有一條語句,if語句也可以寫在同一行上。例如:例3-2輸入兩個整數(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("{0},{1}".format(a,b))3.2.2雙分支選擇結(jié)構(gòu)可以用if語句實(shí)現(xiàn)雙分支選擇結(jié)構(gòu),其一般格式為:if表達(dá)式:

語句塊1else:

語句塊2雙分支if語句的執(zhí)行過程例

輸入三角形的三個邊長,求三角形的面積。分析:設(shè)a,b,c表示三角形的三個邊長,則構(gòu)成三角形的充分必要條件是任意兩邊之和大于第三邊,即a+b>c,b+c>a,c+a>b。如果該條件滿足,則可按照海倫公式計算三角形的面積:其中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("a={0},b={1},c={2}".format(a,b,c))print("area={}".format(s))else:print("a={0},b={1},c={2}".format(a,b,c))print("inputdataerror")例

輸入x,求對應(yīng)的函數(shù)值y。分析:這是一個具有兩個分支的分段函數(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("x={},y={}".format(x,y))還可以采用兩個單分支結(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("x={},y={}".format(x,y))

思考:第一個if語句能否不寫,并分析原因。第二個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é)生成績分為四個分?jǐn)?shù)段,然后根據(jù)各分?jǐn)?shù)段的成績,輸出不同的等級。程序分為四個分支,可以用四個單分支結(jié)構(gòu)實(shí)現(xiàn),也可以用多分支if語句實(shí)現(xiàn)。程序如下:g=float(input("請輸入學(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)算有三個運(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個兩位隨機(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("x={0},y={1},z={2}".format(x,y,z))print("max=",max)例

輸入一個整數(shù),判斷它是否為水仙花數(shù)。所謂水仙花數(shù),是指這樣的一些三位整數(shù):各位數(shù)字的立方和等于該數(shù)本身,例如153=13+53+33,因此153是水仙花數(shù)。分析:關(guān)鍵的一步是先分別求三位整數(shù)個位、十位、百位數(shù)字,再根據(jù)條件判斷該數(shù)是否為水仙花數(shù)。3.4選擇結(jié)構(gòu)程序舉例例

輸入一個時間(小時:分鐘:秒),輸出該時間經(jīng)過5分30秒后的時間。

hour=int(input('請輸入小時:'))minute=int(input('請輸入分鐘:'))second=int(input('請輸入秒:'))second+=30ifsecond>=60:second=second-60minute+=1minute+=5ifminute>=60:minute=minute-60hour+=1ifhour==24:hour=0print('{0:d}:{1:d}:{2:d}'.format(hour,minute,second))例

硅谷公司員工的工資計算方法如下:(1)工作時數(shù)超過120小時者,超過部分加發(fā)15%。(2)工作時數(shù)低于60小時者,扣發(fā)700元。(3)其余按每小時84元計發(fā)。輸入員工的工號和該員工的工作時數(shù),計算應(yīng)發(fā)工資。分析:為了計算應(yīng)發(fā)工資,首先分兩種情況,即工時數(shù)小于等于120小時和大于120小時。工時數(shù)超過120小時時,實(shí)發(fā)工資有規(guī)定的計算方法。而工時數(shù)小于等于120小時時,又分為大于60和小于等于60兩種情況,分別有不同的計算方法。所以程序分為3個分支,即工時數(shù)>120、60<工時數(shù)≤120和工時數(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語句for語句循環(huán)結(jié)構(gòu)程序設(shè)計方法。4.1.1while語句1.while語句的一般格式while語句的一般格式為:while表達(dá)式:

語句塊while語句中的表達(dá)式表示循環(huán)條件,可以是結(jié)果能解釋為True或False的任何表達(dá)式,常用的是關(guān)系表達(dá)式和邏輯表達(dá)式。表達(dá)式后面必須加冒號。語句塊是重復(fù)執(zhí)行的部分,稱作循環(huán)體。4.1while循環(huán)結(jié)構(gòu)while語法的執(zhí)行過程注意:(1)當(dāng)循環(huán)體由多個語句構(gòu)成時,必須用縮進(jìn)對齊的方式組成一個語句塊,否則會產(chǎn)生錯誤。(2)與if語句的語法類似,如果while循環(huán)體中只有一條語句,可以將該語句與while寫在同一行中。(3)如果表達(dá)式永遠(yuǎn)為True,循環(huán)將會無限地執(zhí)行下去(俗稱“死”循環(huán))。在循環(huán)體內(nèi)必須有修改表達(dá)式值的語句,使其值趨向False,讓循環(huán)趨于結(jié)束,避免無限循環(huán)。2.在while語句中使用else子句在Python中,可以在循環(huán)語句中使用else子句,else中的語句會在循環(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)用例

計算1+2+3+……+100的值。分析:累加問題可用遞推式來描述:si=si-1+ni(s0=0,n1=1),從循環(huán)的角度看即本次循環(huán)的累加和s等于上次循環(huán)的累加和加上本次的累加項n,可用賦值語句“s+=n”來實(shí)現(xiàn)。此例的累加項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近似值,直到最后一項的絕對值小于10-6時停止計算。其中x為弧度,但從鍵盤輸入時以角度為單位。分析:這是一個累加求和問題。關(guān)鍵是如何求累加項,較好的辦法是利用前一項來求后一項,即用遞推的辦法來求累加項。第i項與第i-1項之間的遞推關(guān)系為:

a1=x求sinx值的算法例輸入一個整數(shù),輸出其位數(shù)。分析:輸入的整數(shù)存入變量n中,用變量k來統(tǒng)計n的位數(shù),基本思路是每循環(huán)一次就去掉n的最低位數(shù)字(用Python的整除運(yùn)算符實(shí)現(xiàn)),直到n為0。4.2.1for語句1.for語句的一般格式for語句的一般格式為:for目標(biāo)變量in序列對象:

語句塊for語句的首行定義了目標(biāo)變量和遍歷的序列對象,后面是需要重復(fù)執(zhí)行的語句塊。語句塊中的語句要向右縮進(jìn),且縮進(jìn)量要一致。4.2for循環(huán)結(jié)構(gòu)for語句執(zhí)行過程注意:(1)for語句是通過遍歷任意序列的元素進(jìn)行來建立循環(huán)的,針對序列的每一個元素執(zhí)行一次循環(huán)體。列表、字符串、元組都是序列,可以利用它們來建立循環(huán)。(2)for語句也支持一個可選的else塊,它的功能就像在while循環(huán)中一樣,如果循環(huán)離開時沒有碰到break語句,就會執(zhí)行else塊。也就是序列所有元素都被訪問過了之后,執(zhí)行else塊。2.rang對象在for循環(huán)中的應(yīng)用在Python3.x中,range()函數(shù)返回的是可迭代對象。Python專門為for語句設(shè)計了迭代器的處理方法。例如:foriinrange(5):print(i,end='')程序輸出結(jié)果如下:01234首先Python對關(guān)鍵字in后的對象調(diào)用iter()函數(shù)獲得迭代器,然后調(diào)用next()函數(shù)獲得迭代器的元素,直到拋出StopIteration異常。4.2.2for循環(huán)的應(yīng)用例

輸入20個數(shù),求出其中的最大數(shù)與最小數(shù)。分析:先假設(shè)第一個數(shù)就是最大數(shù)或最小數(shù),再將剩下的19個數(shù)與到目前為止的最大數(shù)、最小數(shù)進(jìn)行比較,比完19次后即可找出20個數(shù)中的最大數(shù)與最小數(shù)。例

求Fibonacci數(shù)列的前30項。分析:設(shè)待求項(即fn)為f,待求項前面的第一項(即fn-1)為f1,待求項前面的第二項(即fn-2)為f2。首先根據(jù)f1和f2推出f,再將f1作為f2,f作為f1,為求下一項作準(zhǔn)備。如此一直遞推下去。

1 1 2 3 5第一次:f2+ f1→ f

↓ ↓第二次:f2+ f1→ f

↓ ↓第三次: f2+ f1→ f例4-6輸入一個整數(shù)m,判斷是否為素數(shù)。分析:素數(shù)是大于1,且除了1和它本身以外,不能被其他任何整數(shù)所整除的整數(shù)。為了判斷整數(shù)M是否為素數(shù),一個最簡單的辦法用2、3、4、5、……、M-1這些數(shù)逐個去除M,看能否整除,如果全都不能整除,則M是素數(shù),否則,只要其中一個數(shù)能整除,則M不是素數(shù)。當(dāng)M較大時,用這種方法,除的次數(shù)太多,可以有許多改進(jìn)辦法,以減少除的次數(shù),提高運(yùn)行效率??梢栽O(shè)一個變量來作為是否素數(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)控制語句例

求兩個整數(shù)a與b的最大公約數(shù)。分析:找出a與b中較小的一個,則最大公約數(shù)必在1與較小整數(shù)的范圍內(nèi)。使用for語句,循環(huán)變量i從較小整數(shù)變化到1。一旦循環(huán)控制變量i同時整除a與b,則i就是最大公約數(shù),然后使用break語句強(qiáng)制退出循環(huán)。4.3.2continue語句當(dāng)在循環(huán)結(jié)構(gòu)中執(zhí)行continue語句時,立即結(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時退出循環(huán)else:y+=x #實(shí)現(xiàn)累加print("y=",y)4.3.3pass語句pass語句是一個空語句,它不做任何操作,代表一個空操作??聪旅娴难h(huán)語句。forxinrange(10):pass該語句的確會循環(huán)10次,但是除了循環(huán)本身之外,它什么也沒做。4.4循環(huán)的嵌套如果一個循環(huán)結(jié)構(gòu)的循環(huán)體又包括一個循環(huán)結(jié)構(gòu),就稱為循環(huán)的嵌套,或稱為多重循環(huán)結(jié)構(gòu)。例

輸入n,求表達(dá)式的值。分析:這是求n項之和的問題。先求累加項a,再用語句“s=s+a”實(shí)現(xiàn)累加,共有n項,所以共循環(huán)n次。求累加項a時,分母又是求和問題,也可以用一個循環(huán)來實(shí)現(xiàn)。因此整個程序構(gòu)成一個二重循環(huán)結(jié)構(gòu)。例4輸出[100,1000]以內(nèi)的全部素數(shù)。分析:可分為以下兩步。(1)判斷一個數(shù)是否為素數(shù)。(2)將判斷一個數(shù)是否為素數(shù)的程序段,對指定范圍內(nèi)的每一個數(shù)都執(zhí)行一遍,即可求出某個范圍內(nèi)的全部素數(shù)。這種方法稱為窮舉法,也叫枚舉法4.5循環(huán)結(jié)構(gòu)程序舉例例4已知y,求:(1)y<3時的最大n值。(2)與(1)的n值對應(yīng)的y值。分析:這是一個累加求和問題,循環(huán)條件是累加和y≥3,用N-S圖表示算法如圖所示。當(dāng)退出循環(huán)時,y的值已超過3,因此要減去最后一項,n的值相應(yīng)也要減去1。又由于最后一項累加到y(tǒng)后,n又增加了1,故n還要減去1,即累加的項數(shù)是n-2。求y值的算法思考:(1)求y≥3時的最小n,如何修改程序?(2)求y的值,直到累加項小于10-6為止,如何修改程序?(3)n取100,求y的值,如何修改程序?例

用牛頓迭代法求方程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-13

求f(x)在[a,b]上的定積分分析:為了求得圖形面積,先將區(qū)間[a,b]分成n等分,每個區(qū)間的寬度為h=(b-a)/n,對應(yīng)地將圖形分成n等分,每個小部分近似一個小曲邊梯形。近似求出每個小曲邊梯形面積,然后將n個小曲邊梯形的面積相加,就得到總面積,即定積分的近似值。n越大,近似程度越高。這就是函數(shù)的數(shù)值積分方法。近似求每個小曲邊梯形的面積,常用的方法有:(1)用小矩形代替小曲邊梯形,求出各個小矩形面積,然后累加。此種方法稱為矩形法。(2)用小梯形代替小曲邊梯形,此種方法稱為梯形法。(3)用拋物線代替該區(qū)間的f(x),然后求出拋物線與x=a+(i-1)h,x=a+ih,y=0圍成的小曲邊梯形面積,此種方法稱為辛普生法。以梯形法為例,求解方法如圖所示。梯形法求定積分第一個小梯形的面積為:第二個小梯形的面積為:……第n個小梯形的面積為:例

驗證哥德巴赫猜想:任何大于2的偶數(shù),都可表示為兩個素數(shù)之和。分析:哥德巴赫猜想是一個古老而著名的數(shù)學(xué)難題,迄今未得出最后的理論證明。這里只是對有限范圍內(nèi)的數(shù),用計算機(jī)加以驗證,不算嚴(yán)格的證明。讀入偶數(shù)n,將它分成p和q,使n=p+q。p從2開始(每次加1),q=n-p。若p、q均為素數(shù),則輸出結(jié)果,否則將p+1再試。例

將1元錢換成1分、2分、5分的硬幣有多少種方法。分析:設(shè)x為1分硬幣數(shù),y為2分硬幣數(shù),z為5分硬幣數(shù),則有如下方程:x+2y+5z=100可以看出,這是一個不定方程,沒有唯一的解。這類問題無法使用解析法求解,只能將所有可能的x,y,z值一個一個地去試,看是否滿足上面的方程,如滿足則求得一組解。和前面介紹過的求素數(shù)問題一樣,程序也是采用窮舉法。第5章

字符串與正則表達(dá)式字符串編碼字符串的各種操作正則表達(dá)式的應(yīng)用1.Unicode碼Unicode編碼標(biāo)準(zhǔn)為表達(dá)全世界所有語言的任意字符而設(shè)計,它使用4字節(jié)的數(shù)字編碼來表達(dá)每個字母、符號或文字。每個數(shù)字編碼代表唯一的至少在某種語言中使用的符號,被幾種語言共用的字符通常使用相同的數(shù)字來編碼,每個字符對應(yīng)一個數(shù)字編碼,每個數(shù)字編碼對應(yīng)一個字符,即不存在二義性。5.1字符串編碼2.UTF-8碼UTF-8是一種為Unicode字符設(shè)計的變長編碼系統(tǒng),即不同的字符可使用不同數(shù)量的字節(jié)編碼。對于ASCII字符,UTF-8僅使用1個字節(jié)來編碼。UTF-8支持中英文編碼,英文系統(tǒng)也可以顯示中文。Python支持UTF-8編碼,中文字符、希臘字母均可以作為標(biāo)識符使用。例如:>>>π=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)索引,需要對字符串中的字符進(jìn)行編號,最左邊字符編號為0,最右邊字符的編號比字符串的長度小1。Python還支持在字符串中使用負(fù)數(shù)從右向左進(jìn)行編號,最右邊的字符(即倒數(shù)第1個字符)的編號為-1。字符串變量名后接用中括號括起來的編號即可實(shí)現(xiàn)字符串的索引。5.2字符串的索引與分片例如:>>>s="Hello"字符串s中各個字符的索引編號如圖所示。字符串中字符的索引編號例5-1將一個字符串中的字符按逆序打印出來。分析:先輸出字符串的最后一個字符,且不換行,然后輸出倒數(shù)第2個字符,同樣不換行,一直到第1個字符。利用for循環(huán)控制字符索引編號,循環(huán)賦值目標(biāo)變量從0變化到字符串的長度。取字符串的長度可以利用len()函數(shù)。程序如下:s1=input("Pleaseenterastring:")foriinrange(0,len(s1)):print(s1[len(s1)-1-i],end='')5.2.2字符串的分片字符串的分片就是從給定的字符串中分離出部分字符,這時可以使用以下形式的字符串索引編號。i:j:k其中i是索引起始位置,j是索引結(jié)束位置但不包括j位置上的字符,索引編號每次增加的步長為k。例如:>>>s="HelloWorld!">>>print(s[0:5:2])Hlo>>>s='abcdefg'>>>s[5:1:-1]'fedc'>>>s[-len(s):-1]'abcdef'例5-2利用字符串分片方法將一

溫馨提示

  • 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

提交評論