Python程序設(shè)計語言筆記_第1頁
Python程序設(shè)計語言筆記_第2頁
Python程序設(shè)計語言筆記_第3頁
Python程序設(shè)計語言筆記_第4頁
Python程序設(shè)計語言筆記_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、文檔來源為 :從網(wǎng)絡(luò)收集整理.word 版本可編輯 .歡迎下載支持.Python 程序設(shè)計語言筆記第一周基本程序設(shè)計1.1 程序設(shè)計的基本方法 IPO (輸入、輸出、處理(算法)(1)理解問題的計算部分:抽象問題 使用 IPO 從多種方法中選擇一種解決問題2)程序編寫步驟:分析問題:分析問題的計算部分 確定問題:將計算部分劃分為IPO 三部分 設(shè)計算法 編寫程序 調(diào)試測試 升級維護(hù)例:溫度轉(zhuǎn)換問題【問題描述】對于攝氏度和華氏度,存在以下轉(zhuǎn)換:攝氏度1 標(biāo)準(zhǔn)大氣壓0 度100 度華氏度1 標(biāo)準(zhǔn)大氣壓0 度212 度請利用 python 程序完成以上轉(zhuǎn)換?!窘忸}步驟】分析問題的計算部分簡化為三個步

2、驟:確定功能,利用 IPO 方法進(jìn)一步分析:確定 IPO輸入:華氏度( F) / 攝氏度( C) 編寫程序處理:溫度轉(zhuǎn)化公式調(diào)試程序輸出:攝氏度( C) / 華氏度( F)設(shè)計算法編寫程序測試調(diào)試升級維護(hù)1.2 python程序元素分析程序 1:# TempConvert.pyval = input(請輸入帶溫度表示符號的溫度值( 例如 : 32C): )if val-1 in C,c:# in判斷左側(cè)內(nèi)容是否在右側(cè)集合中f = 1.8 * float(val0:-1) + 32# float()將括號中的字符串轉(zhuǎn)換為浮點數(shù)print(轉(zhuǎn)換后的溫度為: %.2fF%f)# .2表示輸出的浮點數(shù)

3、f 有兩位小數(shù)elif val-1 in F, f:c = (float(val0:-1) - 32) / 1.8print(轉(zhuǎn)換后的溫度為: %.2fC%c)else:print(輸入有誤 )1文檔來源為 :從網(wǎng)絡(luò)收集整理.word 版本可編輯 .歡迎下載支持.1)縮進(jìn):標(biāo)明代碼層次關(guān)系、表明程序框架2)注釋:輔助說明,不被執(zhí)行也不受語法約束,可以寫入任何內(nèi)容,用以提高可讀性注釋方法:單行注釋: #開頭;多行注釋: 開頭和結(jié)尾;3)變量:能夠表示值的一個名稱,值可以變化命名:給自定義元素關(guān)聯(lián)名字的過程(唯一性)命名規(guī)則: 大小寫字母、數(shù)字、下劃線(大小寫不統(tǒng)一)首字母只能是大小寫字母或下劃線

4、, 不能使用空格中文等非字母符號也可以作為名字 不能與 python 定義的保留字相同4)表達(dá)式:產(chǎn)生 / 計算數(shù)據(jù)值的一行代碼(通過保留字和操作符)5)空格的使用: 表示每行縮進(jìn)關(guān)系的空格不能改變空格不能分割命名6) input() 函數(shù):從控制臺獲得用戶的輸入。使用方法為: = input()獲得的用戶輸入以字符串的形式保存在 中如果 val =“28C”,則 val-1=“C”,val0:2 =“28”表示從區(qū)間 0,2)的一個子字符串可以通過val0:-1來獲取除了最后一個字符以外的字符串(7)分支語句:根據(jù)判斷條件,執(zhí)行不同的路徑。使用方法:If表達(dá)式組 1elif表達(dá)式組 2eli

5、f表達(dá)式組 N-1 else: 8)賦值:同步賦值:同時給多個變量賦值。使用方法:變量 1, ,=, ,例:若要使變量x 和 y 的值實現(xiàn)交換,則只需一行代碼:x, y = y, x(9) print()函數(shù):用來輸出字符信息,或以字符的形式輸出變量的值,通過%選擇要輸出的變量(10)循環(huán)語句:控制程序循環(huán)運行的語句,根據(jù)判斷/ 計數(shù)條件確定循環(huán)次數(shù)。使用方法:for I in range():2文檔來源為 :從網(wǎng)絡(luò)收集整理.word 版本可編輯 .歡迎下載支持.函數(shù)編寫模板(1) inputprint模板:( 2)initial print模板: 用戶輸入: input() 初始變量:運算需

6、要的初始值 運算部分:算法實現(xiàn)運算部分:算法實現(xiàn) 結(jié)果輸出: print() 結(jié)果輸出: print()1.3 python蟒蛇程序的實現(xiàn)分析:程序 2:import turtle# (烏龜)軌跡描繪函數(shù)庫def drawSnake(rad,angle,len,neckrad):# 繪制蟒蛇函數(shù)for i in range(len):turtle.circle(rad,angle)# 圓形軌跡函數(shù),參數(shù)rad 描述圓形半徑的位置turtle.circle(-rad,angle)#rad為負(fù)值,半徑在烏龜右側(cè)turtle.circle(rad,angle/2)#參數(shù) angle表示烏龜沿圓形爬行

7、的弧度值turtle.fd(rad)# 也稱為 turtle.forward()函數(shù)# 表示軌跡直線移動,參數(shù)表示移動距離turtle.circle(neckrad+1,180)turtle.fd(rad*2/3)def main():turtle.setup(1300,800,0,0)# 啟動圖形窗口,參數(shù)分別為窗口的寬度、高度# 窗口左上角點的橫、縱坐標(biāo)位置pythonsize = 30turtle.pensize(pythonsize)#軌跡的寬度,參數(shù)為像素大小,這里為30turtle.pencolor(blue)# 軌跡顏色,參數(shù)為字符串(英文或16 進(jìn)制顏色代碼)turtle.se

8、th(-40)# 軌跡運動方向,參數(shù)為角度(逆時針,以正東方向為0 度)drawSnake(40,80,5,pythonsize/2)# 繪制蟒蛇函數(shù),用以繪制python蟒蛇main()def 定義函數(shù):函數(shù)是一組代碼的集合,用以完成特定的功能,這組代碼的名字就叫函數(shù)名 def所定義的函數(shù),必須要通過函數(shù)名對函數(shù)進(jìn)行調(diào)用才能執(zhí)行函數(shù)庫的引用:方式一: import 如: import turtle方式二: from import from import*調(diào)用函數(shù)時不需要使用庫名,直接使用如: from turtle *fd(100)注意:方式一可調(diào)用不同庫中的同名函數(shù),方式二則不可3文檔來源

9、為 :從網(wǎng)絡(luò)收集整理.word 版本可編輯 .歡迎下載支持.第二周類型及應(yīng)用2.1 類型 編程語言對數(shù)據(jù)的劃分?jǐn)?shù)字類型、字符串類型、元組類型列表類型、文件類型、字典類型(1)數(shù)字類型:數(shù)字類型對python 語言中的數(shù)字的表示和使用進(jìn)行了定義和規(guī)范分類: 整數(shù)類型 浮點數(shù)類型 復(fù)數(shù)類型 整數(shù)類型概念與數(shù)學(xué)一致,沒有取值范圍限制例:1010(十進(jìn)制數(shù)),0 x9a(十六進(jìn)制數(shù), 以 0 x/0X 開頭),0b010(二進(jìn)制數(shù), 以 0b/0B 開頭) 0o123(八進(jìn)制數(shù),以0o/0O 開頭) 浮點數(shù)類型是帶有小數(shù)點及小數(shù)的數(shù)字,數(shù)值范圍和小數(shù)精度有一定限制,因系統(tǒng)而異例: 0.0 (與整數(shù)0

10、不同), 96e4(科學(xué)計數(shù)法,e/E 代表 10 的次冪, e/E 后的數(shù)字為指數(shù)) 復(fù)數(shù)類型概念與數(shù)學(xué)一致,z=a+bj ( j/J代表虛數(shù)部分)例:12.3+4j對于一個復(fù)數(shù),如z = 1.1+9j,可以使用z.real和 z.imag 來獲得復(fù)數(shù)的實部和虛部2 數(shù)字類型的關(guān)系:特例特例整數(shù) 浮點數(shù) 復(fù)數(shù)(范圍逐漸擴(kuò)大)整數(shù)浮點數(shù)浮點數(shù)因此這三種數(shù)字類型可以進(jìn)行混合運算,生成結(jié)果為最寬類型例: 3+4.2 = 7.23類型轉(zhuǎn)換:利用int(), float()和 complex() 三個函數(shù)實現(xiàn)例: int(4.5) = 4; float(4) = 4.0; complex(4) = 4

11、 + 0j;【注意】不能將復(fù)數(shù)轉(zhuǎn)成整數(shù)和浮點數(shù)! (但可以間接利用取實部虛部的方法實現(xiàn)) 4 數(shù)字類型的判斷 type(x); 例: type(4.5) 得到 數(shù)字類型的運算:x+yx 與 y 之和x-yx 與 y 之差x*yx 與 y 之積x/yx 與 y 之商x/y不大于 x 和 y 之商的最大整數(shù)x%yx 與 y 之商的余數(shù)+xx-xx 的負(fù)值x*yx 的 y 次冪abs(x)x 的絕對值divmod(x,y)(x/y,x%y)pow(x,y)x 的 y 次冪2)字符串類型 用雙引號“”或單引號 括起來的一個或多個字符 可以保存在變量中,也可以單獨存在4文檔來源為 :從網(wǎng)絡(luò)收集整理.wo

12、rd 版本可編輯 .歡迎下載支持.1 判斷字符串類型:輸入:type(str1) 輸出: 可以使用 轉(zhuǎn)義字符輸出“”或 之類的字符也可以用同樣的方法 輸出轉(zhuǎn)義字符, n 輸出換行符等例: print(“ ” 大家好” );輸出: ” 大家好 ”3字符串是一個字符序列,字符串最左端位置標(biāo)示為0,向右遞增,字符串中字符位置的標(biāo)示稱為“索引” ,例如:0123456789可以使用單個索引訪問字符串的特定位置。格式如下:其中索引可以為常量和表達(dá)式4 python中字符串(設(shè)長度為L)索引從 0 開始,最后一個字符索引為L-1同時也允許使用負(fù)數(shù),對字符串從右至左進(jìn)行反向檢索,最右索引值為-1可以通過兩個

13、索引值來確定一個范圍,從而返回這個范圍內(nèi)的子字符串。格式如下:,其中 start和 end 都為整型,索引范圍為start,end)程序?qū)嵗骸绢}目描述】輸入一個月份數(shù)字,返回對應(yīng)月份名稱的縮寫【分析】 IPO 模式: 輸入:輸入一個表示月份的數(shù)字(1-12 ) 處理:利用字符串基本操作實現(xiàn)功能 輸出:輸出數(shù)字對應(yīng)月份名稱縮寫【解答】程序 3:month.pymonths=JanFebMarAprMayJunJulAugSepOctNovDec n=input( 請輸入月份數(shù) (1-12):)pos=(int(n)-1) * 3 monthAbbrev=monthspos:pos+3 prin

14、t( 月份簡寫是 +monthAbbrev+.)輸入:輸出:7 月份簡寫是Jul.3)元組類型( Tuple ) 包含 0 個至多個元素的類型,元素之間用逗號分割例: t1 = 123, 45.6,“ hello ” ; t2 = (); t3 = 12;元組外部可以使用或不使用括號1 元組類型的三個特點:元組中的元素可以是不同類型 的,可以 嵌套 (用括號區(qū)分)5文檔來源為 :從網(wǎng)絡(luò)收集整理.word 版本可編輯 .歡迎下載支持. 元組中的各個元素存在先后關(guān)系,可以通過索引 來訪問元組中的元素例: t10; 元組定義后 不能更改和刪除安全與字符串類型類似,可以通過 索引區(qū)間 來訪問元組中的部

15、分元素也可以對元組進(jìn)行 +和 * 的運算 例: t21:;(4)列表類型 ( List ) 有序的元素集合1與元組類似,列表的每個元素類型可以不同,可以通過索引訪問列表的單個元素例:a = 0,1,2 print(a)輸出: 0,1,22與元組不同,列表的大小沒有限制,可以隨時修改(5)小結(jié):序列(字符串、元組、列表)類型的操作:序列操作符操作的含義 + 連接兩個序列 + 對序列進(jìn)行整數(shù)次重復(fù)索引序列中的元素:取序列的一個子序列l(wèi)en()序列中元素個數(shù)for in 對序列進(jìn)行循環(huán)列舉 in 成員檢查,判斷 是否在序列中方法,格式如下:.func() 字符串方法:字符串方法含義.upper()字

16、符串中字母大寫.lower()字符串中字母小寫.strip()去掉兩邊空格和指定字符.split()按指定字符分割字符串為數(shù)組.join()連接兩個字符串序列.find()搜索指定字符串.replace()字符串替換 列表方法:列表方法含義.append(x)將元素 x 增加到列表最后.sort()將列表元素排序6文檔來源為 :從網(wǎng)絡(luò)收集整理.word 版本可編輯 .歡迎下載支持.reverse()將列表元素反轉(zhuǎn).index(x)返回第一次出現(xiàn)元素 x 的索引值.insert(i,x)在位置 i 處插入新元素 x.count(x)返回元素 x 在列表中的數(shù)量.remove(x)刪除列表中第一次

17、出現(xiàn)的元素x.pop(i)取出列表中位置 i 的元素并刪除2.2 math庫和 random 庫的使用及實例:1) math 庫:圓周率 pi的近似值, 15 位小數(shù)自然常數(shù) eee 的近似值, 15 位小數(shù)ceil(x)? x?對浮點數(shù)向上取整floor(x)? x?對浮點數(shù)向下取整pow(x,y)?x 的 y 次冪?log(x)lnx以 e 為底的對數(shù)log10(x)log 10 ?以 10 為底的對數(shù)sqrt(x)?平方根exp(x)?e 的 x 次冪?degrees(x)弧度轉(zhuǎn)角度radians(x)角度轉(zhuǎn)弧度sin(x)sinxx 的正弦值cos(x)cosxx 的余弦值tan(x)

18、tanxx 的正切值asin(x)arcsinxx 的反正弦值acos(x)arccosxx 的反余弦值atan(x)arctanxx 的反正切值x -1.0, 1.02) random 庫:seed(x)給隨機(jī)數(shù)一個種子值,默認(rèn)隨機(jī)種子是系統(tǒng)時鐘random()生成一個 0, 1.0 之間的隨機(jī)小數(shù)uniform(a,b)生成一個 a 到 b 之間的隨機(jī)小數(shù)randint(a,b)生成一個 a 到 b 之間的隨機(jī)整數(shù)randrange(a,b,c)隨機(jī)生成一個從 a 開始到 b 以 c 遞增的數(shù)choice()從列表中隨機(jī)返回一個元素7文檔來源為 :從網(wǎng)絡(luò)收集整理.word 版本可編輯 .歡

19、迎下載支持.shuffle()將列表中元素隨機(jī)打亂sample(,k)從指定列表隨機(jī)獲取k 個元素【注意】 seed() 函數(shù)用來設(shè)置隨機(jī)種子,隨機(jī)種子相同,隨機(jī)序列相同 偽隨機(jī)數(shù)實例: 的計算 蒙特卡洛方法(隨機(jī)抽樣/ 統(tǒng)計實驗方法) 先構(gòu)造單位正方形和1/4 圓 向正方形內(nèi)拋灑大量點 統(tǒng)計落入圓內(nèi)的點占所有點的比例【分析】 IPO:輸入:拋點的數(shù)量 處理:對于每個拋灑點,計算點到圓心的距離通過判斷該點在圓內(nèi)或圓外。統(tǒng)計圓內(nèi)點的數(shù)量 輸出: 值程序 4:# pi.pyfrom random import randomfrom math import sqrtfrom time import

20、clockDARTS = 1200hits = 0clock()for i in range(1,DARTS):#拋灑 DARTS次x, y = random(), random()#給出隨機(jī)坐標(biāo)(x , y )dist = sqrt(x*2 + y*2)#計算拋點到原點的距離if dist 75打印空氣污染警告9文檔來源為 :從網(wǎng)絡(luò)收集整理.word 版本可編輯 .歡迎下載支持.If PM2.5值 75:print(Unhealthy. Be careful!)if PM 35:print(Good. Go running!)main()【運行結(jié)果】輸出:輸入:What is todays

21、PM2.5?90Unhealthy. Be careful!( 1)If語句格式:If :【注】 是條件表達(dá)式, 是一個或多個語句序列先判斷 條件,若true ,則執(zhí)行 ,再轉(zhuǎn)向下一條語句;若 false ,則直接跳過 ,轉(zhuǎn)向下一條語句( 2)簡單條件構(gòu)造簡單條件基本形式 是關(guān)系操作符, =, , != 使用“ =”表示賦值語句,使用“=”表示等于除數(shù)字外,字符或字符串也可以按照字典順序用于條件比較 是布爾表達(dá)式,為 bool 類型布爾值的真假以 True 和 False 表示3)二分支語法結(jié)構(gòu)If :else:10文檔來源為 :從網(wǎng)絡(luò)收集整理.word 版本可編輯 .歡迎下載支持.程序 6:

22、quadratic.py計算二次方程的實數(shù)根程序import mathdef main():print(This program finds the real solutions to a quadraticn)a,b,c = eval(input(Please enter the coefficients(a,b,c): )delta = b*b - 4*a*cif delta = 0:discRoot = math.sqrt(delta)root1 = (-b + discRoot) / (2*a)root2 = (-b - discRoot) / (2*a)print(nThe solu

23、tions are:, root1, root2)else:print(The equation has no real roots!)main()【運行結(jié)果】輸出:This program finds the real solutions to a quadratic輸入:Please enter the coefficients(a,b,c): 1,2,3The equation has no real roots!3.3多分支(1)多分支決策要解決雙根問題,就需要對delta等于 0 的情況進(jìn)行處理。語句的結(jié)構(gòu)上要引入嵌套結(jié)構(gòu): 當(dāng) delta 0,處理雙根情況一種方案是在程序中使用兩個

24、if-else語句。把一個復(fù)合語句放到另一個語句的結(jié)構(gòu)之中稱為嵌套。多分支決策是解決復(fù)雜問題的重要手段之一一個三分之決策可以由兩個二分支結(jié)構(gòu)嵌套實現(xiàn)使用 if-else 描述多分支決策時,實現(xiàn)更多分支需要更多嵌套,影響程序易讀性Python 使用 if-elif-else描述多分支決策,簡化分支結(jié)構(gòu)的嵌套問題。格式如下:11文檔來源為 :從網(wǎng)絡(luò)收集整理.word 版本可編輯 .歡迎下載支持.If :elif :elif :else:例:程序7 :quadratic.py import math def main():print(This program finds the real solut

25、ions to a quadraticn)a,b,c = eval(input(Please enter the coefficients(a,b,c): )delta = b*b - 4*a*cif a = 0:x = -b/cprint(nThere is an solution, x)elif delta 0:print(nThe equation has no real roots!)elif dalta = 0:x = -b/(2*a)print(nTheere is a double root at, x)else:discRoot = math.sqrt(delta)root1

26、= (-b + discRoot) / (2*a)root2 = (-b - discRoot) / (2*a)print(nThe solutions are:, root1, root2)main()3.4異常處理異常處理語句Python 使用 try except ,可使程序不因運行錯誤而崩潰Python 的異常處理語句還可以使用else和 finally關(guān)鍵字(可選項,若使用則else 必須在finally之前 )格式如下:try:12文檔來源為 :從網(wǎng)絡(luò)收集整理.word 版本可編輯 .歡迎下載支持.except :except :except:else:finally:try ex

27、cept可以捕捉任何類型的錯誤對于二次方程,還會有其他可能的錯誤如:輸入非數(shù)值類型(NameError )輸入無效的表達(dá)式(SyntaxError)等此時可以用一個try語句配多個except來實現(xiàn)程序 8:異常處理測試def main():try:number1,number2 = eval(input(Enter two numbers,separated by a comma:)result = number1/number2except ZeroDivisionError:print(Division by zero!)except SyntaxError:print(A comma

28、may be missing in the input)else:print(No exceptions, the result is, result)finally:print(executing the final clause)main()【運行結(jié)果】輸出:輸入:Enter two numbers, separated by a comma: 1 2A comma may be missing in the inputexecuting the final clause13文檔來源為 :從網(wǎng)絡(luò)收集整理.word 版本可編輯 .歡迎下載支持.Enter two numbers, separ

29、ated by a comma: 3,2No exceptions, the result is 1.5executing the final clauseEnter two numbers, separated by a comma:3,0Division by zero!executing the final clause【實例】三者最大值IPO】輸入:三個數(shù)值處理:三者最大算法輸出:打印最大值【算法比較】通盤比較 將每一個值與其他所有值比較以確定最大值三個值的情況比較簡單,如果是五值比較復(fù)雜,而且效率低(因為表達(dá)式?jīng)]有被充分利用) 決策樹 避免冗余比較結(jié)構(gòu)更加復(fù)雜! 順序處理 逐個掃描每

30、個值,保留最大者【程序】程序9:program: maxn.py尋找一組數(shù)中的最大值def main():n = eval(input(How many numbers are there?)將第一個值賦值給 maxmax = eval(input(Enter a number )14文檔來源為 :從網(wǎng)絡(luò)收集整理.word 版本可編輯 .歡迎下載支持.連續(xù)與后面 n-1 值進(jìn)行比較for i in range(n-1):x = eval(input(Enter a number )if x max:max = xprint(The largest value is, max)main()【運行

31、結(jié)果】輸出:輸入:How many numbers are there?5Enter a number 9Enter a number 6Enter a number 3Enter a number 10Enter a number 20The largest value is 20 使用 Python內(nèi)置函數(shù) max()3.5基本循環(huán)結(jié)構(gòu)1) for 循環(huán) Python 可以使用 for 語句循環(huán)遍歷整個序列的值格式如下:for in :在 for循環(huán)中, 循環(huán)變量var 遍歷了隊列中的每一個值,循環(huán)變量var 遍歷了隊列中的每一個值,循環(huán)語句體為每個值執(zhí)行一次例: for 循環(huán)求平均數(shù)IP

32、O:輸入:待輸入數(shù)字個數(shù),數(shù)字處理:平均數(shù)算法輸出:平均數(shù)通用設(shè)計方案: 輸入數(shù)字的個數(shù)n 將 sum 初始化為0 循環(huán) n 次:輸入數(shù)字 x將 x 加入 sum中 將 sum/n 作為平均數(shù)輸出出來程序 10:#average1.pyn = eval(input(How many numbers?)15文檔來源為 :從網(wǎng)絡(luò)收集整理.word 版本可編輯 .歡迎下載支持.sum = 0.0for i in range(n):x = eval(input(Enter a number )sum = sum + xprint(nThe average is, sum/n)【運行結(jié)果】輸出:輸入:H

33、ow many numbers?3Enter a number 5Enter a number 7Enter a number 6The average is 6.0for循環(huán)的缺點:程序開始時必須提供輸入數(shù)字總數(shù)以提供固定循環(huán)次數(shù)大規(guī)模數(shù)字則需要用戶數(shù)清楚個數(shù)為此, Python 提供了另一種循環(huán)模式即無限循環(huán),不需要提前知道循環(huán)次數(shù)(2) while循環(huán),語句格式:while 條件總是在循環(huán)體執(zhí)行之前被判斷,這種結(jié)構(gòu)又被稱為前測循環(huán)(當(dāng)型循環(huán))如果循環(huán)體沒有對i 初始化或循環(huán)體沒有累加,條件判斷一直為真,循環(huán)體將一直執(zhí)行,即為死循環(huán)程序,這時通常使用+C 來終止一個程序3) break 退

34、出循環(huán)例:程序 11 :#TestBreak.pysum = 0number = 0while number 100:breakprint(The number is, number)print(The sum is, sum)【運行結(jié)果】The number is 14The sum is 105( 4) continue 用于結(jié)束本次循環(huán),即跳出循環(huán)體中下面尚未執(zhí)行的語句,16文檔來源為 :從網(wǎng)絡(luò)收集整理.word 版本可編輯 .歡迎下載支持.對于 while循環(huán),繼續(xù)求解循環(huán)條件;對于for循環(huán),繼續(xù)遍歷循環(huán)列表continue語句和 break 語句的區(qū)別: continue語句只結(jié)束

35、本次循環(huán),而不終止整個循環(huán)的執(zhí)行,而 break 語句則是直接結(jié)束整個循環(huán)流程,不再判斷循環(huán)條件是否成立(5)循環(huán)語句中的else 當(dāng)不滿足循環(huán)條件時,執(zhí)行該語句3.6通用循環(huán)構(gòu)造方法1)交互式循環(huán):交互式循環(huán)是無限循環(huán)的一種,允許用戶通過交互的方式重復(fù)程序特定部分2)哨兵循環(huán):執(zhí)行循環(huán)直到遇到特定的值,循環(huán)語句才終止執(zhí)行的循環(huán)結(jié)構(gòu)設(shè)計方法: 設(shè)定一個哨兵值作為循環(huán)終止的標(biāo)志 任何值都可以做哨兵,但要與實際數(shù)據(jù)有所區(qū)別3)文件循環(huán):面向文件的方法是數(shù)據(jù)處理的典型應(yīng)用,可以事先將數(shù)據(jù)錄入到文件,便于編輯修改,python 中采用 readline()方法中的end of file循環(huán)模式4)循環(huán)

36、嵌套:決策和循環(huán)互相嵌套可以實現(xiàn)復(fù)雜算法,假設(shè)數(shù)字以逗號分隔出現(xiàn)在文件的同一行上3)(4)整合程序如圖:3.7死循環(huán)和循環(huán)嵌套17文檔來源為 :從網(wǎng)絡(luò)收集整理.word 版本可編輯 .歡迎下載支持.(1)死循環(huán) 無法靠自身的控制中止的循環(huán)死循環(huán)的使用:通過死循環(huán)可以一直檢測捕捉特定異常( 2)后測循環(huán)(直到型循環(huán)):先接受輸入,再判斷循環(huán)條件是否滿足。在Python 中沒有后測循環(huán)語句,但可以通過while和 break 語句間接實現(xiàn), 如:( 3)半路循環(huán) 循環(huán)判斷條件在循環(huán)體的中部,例:3.8布爾表達(dá)式條件語句和循環(huán)語句都使用布爾表達(dá)式作為條件布爾值為真(True )或假( Flase )

37、1)布爾操作符: and,or , notand 和 or 用于組合兩個布爾表達(dá)式,并產(chǎn)生一個布爾結(jié)果 and or not 運算符計算一個布爾表達(dá)式的反值not ( 2)布爾操作符的優(yōu)先級:not and or18文檔來源為 :從網(wǎng)絡(luò)收集整理.word 版本可編輯 .歡迎下載支持.例:壁球比賽計分:假設(shè) scoreA 和 scoreB 代表兩個壁球選手的分?jǐn)?shù)規(guī)則 1:只要一個選手達(dá)到了15 分,本場比賽就結(jié)束即: scoreA = 15or scoreB = 15在程序中構(gòu)造一種循環(huán)條件, 對游戲結(jié)束條件取反, 只要比賽還沒有結(jié)束游戲就一直進(jìn)行下去即: whilenot (scoreA =

38、15or scoreB = 15) #比賽繼續(xù)規(guī)則 2:如果一方打了七分而另一方一分未得時,比賽也結(jié)束即: scoreA = 15or scoreB = 15or (a = 7and b = 0)or (b = 7and a = 0)需要一個團(tuán)隊贏得至少兩分才算贏,即其中一個隊已經(jīng)達(dá)到了15 分,且分?jǐn)?shù)差異至少為2 時比賽結(jié)束(排球)即: (a = 15or b = 15)andabs(a-b)=23)布爾代數(shù):布爾表達(dá)式遵循特定的代數(shù)定律,這些規(guī)律被稱為布爾邏輯或布爾代數(shù)a*0 = 0a and false = falsea*1=aa and true = aa+0=0a or false

39、= a 任何數(shù)據(jù)和true進(jìn)行 or 操作都是真and 和 or 操作符都符合分配率 not 操作符可負(fù)負(fù)抵消 德摩根定律: not 放進(jìn)表達(dá)式后, and 和 or 發(fā)生變化如: not(a or b) = (not a) and (not b) not(a and b) = (not a) or (not b)布爾代數(shù)的應(yīng)用 用德摩根定律分析和簡化表達(dá)式(4)布爾表達(dá)式作為決策 判斷退出循環(huán)條件 對于數(shù)字(整數(shù)和浮點數(shù))的零值被認(rèn)為是false ,任何非零值都是true bool類型是特殊的整數(shù) 布爾表達(dá)式具有短路求值的特性19文檔來源為 :從網(wǎng)絡(luò)收集整理.word 版本可編輯 .歡迎下載

40、支持.第四周函數(shù)4.1函數(shù)的定義、調(diào)用與返回(1)函數(shù)定義 def語句,格式如下:def():【說明】函數(shù)名:任何有效的Python 標(biāo)識符參數(shù)列表 :調(diào)用函數(shù)時傳遞給函數(shù)的值(個數(shù) =0 ,多個參數(shù)用”,”分隔)形式參數(shù)(形參) :定義函數(shù)時給函數(shù)傳遞的參數(shù)形參只在函數(shù)內(nèi)部有效實際參數(shù)(實參) :調(diào)用函數(shù)時給函數(shù)傳遞的參數(shù)(可以是實數(shù),變量,函數(shù);必須要初始化)函數(shù)體 :函數(shù)被調(diào)用時執(zhí)行的代碼,由一至多個語句組成函數(shù)調(diào)用的一般形式:()函數(shù)返回:return語句 結(jié)束函數(shù)調(diào)用并返回結(jié)果return 語句是可選的,可以出現(xiàn)在函數(shù)體的任意位置 若無 return 語句,函數(shù)結(jié)束后將控制權(quán)返回給調(diào)

41、用方函數(shù)接口 返回值和參數(shù)函數(shù)傳遞信息的主要途徑: 通過函數(shù)返回值的方式傳遞信息通過參數(shù)傳遞信息例:打印生日快樂歌歌詞程序def happy():print(Happy birthday to you!)def sing(person):happy()happy()print(Happy birthday to, person + !)def main():sing(Mike)print()main()【運行結(jié)果】Happy birthday to you!Happy birthday to you!Happy birthday to Mike!20文檔來源為 :從網(wǎng)絡(luò)收集整理.word 版本

42、可編輯 .歡迎下載支持.2)函數(shù)的調(diào)用和返回值 調(diào)用過程: 函數(shù)的返回值:函數(shù)的返回值可以是變量或表達(dá)式三種形式 無返回值,單值和多值(用逗號分隔)無返回值等價于 return NoneNone 是表示沒有任何東西的特殊類型)例:設(shè)計兩點距離函數(shù),求三角形周長程序import mathdef square(x):return x*xdef distance(x1,y1,x2,y2):dist = math.sqrt(square(x1 - x2) + square(y1 - y2)return distdef isTriangle(x1,y1,x2,y2,x3,y3):flag = (x1 -

43、 x2) * (y3 - y2) - (x3 - x2) * (y1 - y2) != 0return flagdef main():print(Please enter (x,y) of three points in turn:)#獲取用戶輸入的三個坐標(biāo)點x1, y1 = eval(input(Point1: (x, y) = )x2, y2 = eval(input(Point2: (x, y) = )x3,y3 = eval(input(Point3: (x, y) = )判斷三個點是否構(gòu)成三角形if (isTriangle(x1,y1,x2,y2,x3,y3):計算三角形周長peri

44、m = distance(x1,y1,x2,y2) + distance(x2,y2,x3,y3) + distance(x1,y1,x3,y3)print(The perimeter of the triangle is : 0:0.2f.format(perim)else:print(Kidding me? This is not a triangle!)main()【運行結(jié)果】Please enter (x,y) of three points in turn:Point1: (x, y) = 1,321文檔來源為 :從網(wǎng)絡(luò)收集整理.word 版本可編輯 .歡迎下載支持.Point2:

45、(x, y) = 2,2Point3: (x, y) = 3,4The perimeter of the triangle is : 5.893)改變參數(shù)值的函數(shù):函數(shù)的形參只接受了實參的值,給形參賦值并不影響實參 Python 的參數(shù)是通過值來傳遞的(賦值) 如果變量時可變對象(如列表)返回到調(diào)用程序后,該對象會呈現(xiàn)被修改后的狀態(tài)4.2函數(shù)與程序結(jié)構(gòu) / 遞歸1)函數(shù)和程序結(jié)構(gòu):函數(shù)可以簡化程序,使程序模塊化函數(shù)可將較長程序分割成短小程序段,提高可讀性2)遞歸函數(shù): 遞歸 函數(shù)定義中使用函數(shù)自身的方法。例:階乘 遞歸的定義特征:1.有一或多個基例是不需要再次遞歸的所有的遞歸鏈都要以一個基例結(jié)

46、尾注意: 1. 遞歸每次調(diào)用都會引起新函數(shù)的開始遞歸有本地值的副本,包括該值的參數(shù)階乘遞歸函數(shù)中:每次函數(shù)調(diào)用中的相關(guān)n 值在中途的遞歸鏈暫時存儲,并在函數(shù)返回時使用【例 1】計算 5!程序def fact(n):if n = 0:return 1else:return n * fact(n-1)【例 2】字符串反轉(zhuǎn)Python 列表有反轉(zhuǎn)的內(nèi)置方法方法 1:字符轉(zhuǎn)換為字符列表,反轉(zhuǎn)列表,列表轉(zhuǎn)換回字符串方法 2:遞歸IPO】輸入:字符串處理:用遞歸的方法反轉(zhuǎn)字符串輸出:反轉(zhuǎn)后的字符串【注意】構(gòu)造遞歸函數(shù),需要基例 基例不進(jìn)行遞歸,否則遞歸就會無限循環(huán)執(zhí)行程序def reverse(s):22

47、文檔來源為 :從網(wǎng)絡(luò)收集整理.word 版本可編輯 .歡迎下載支持.if s =“”:return selse:return reverse(s1:) + s04.3函數(shù)實例分析【例】繪制如下圖的“二叉樹”【思路】( 1)首先學(xué)習(xí)簡單圖形繪制的指令2)其次為樹的繪制設(shè)計算法1) Turtle 庫:turtle.forward(15) # 烏龜沿直線前行15 個單位長度(默認(rèn)繪制方向為 x 軸正半軸)turtle.left(90)# 烏龜角度逆時針旋轉(zhuǎn)90 度(順時針為right )turtle.penup()#烏龜提筆(落筆為pendown )turtle.goto(x,y)#烏龜?shù)竭_(dá)指定坐標(biāo)

48、位置turtle.home()#烏龜返回初始坐標(biāo)turtle.circle(r)#烏龜以 r 為半徑畫圓turtle.speed(x)#設(shè)置烏龜速度turtle.pensize(x)#設(shè)置畫筆粗細(xì)turtle.pencolor(str1,str2)#設(shè)置畫筆線條顏色和填充色turtle.begin_fill()#開始填充顏色(完成填充用end_fill )【例】繪制并填充五角星程序from turtle import Turtlep = Turtle()p.speed(3)p.pensize(5)p.color(black, yellow)p.begin_fill()for i in rang

49、e(5):p.forward(200)p.right(144)p.end_fill()(2)代碼如下:23文檔來源為 :從網(wǎng)絡(luò)收集整理.word 版本可編輯 .歡迎下載支持.程序# drawtree.pyfrom turtle import Turtle, mainloopdef tree(plist, l, a, f):if l 5:lst = for p in plist:p.forward(l)# 沿著當(dāng)前的方向畫畫q = p.clone()p.left(a)q.right(a)lst.append(p)# 將元素增加到列表的最后lst.append(q)tree(lst, l*f, a

50、, f)def main():p = Turtle()p.color(green)p.pensize(5)p.hideturtle()p.speed(100)p.left(90)# 調(diào)整畫筆p.penup()p.goto(0,-200)p.pendown()#這三條語句是一個組合相當(dāng)于先把筆收起來再移動到指定位置,再把筆放下開始畫否則 turtle 一移動就會自動的把線畫出來 t = tree(p, 200, 65, 0.6375)main()【運行結(jié)果】24文檔來源為 :從網(wǎng)絡(luò)收集整理.word 版本可編輯 .歡迎下載支持.第五周文件與字典5.1文件的基礎(chǔ)1) Python 中的字符串類型未

51、編碼 使用 encode() 編碼, decode() 解碼2)多行文本:【注意】如果在shell中直接輸入帶有換行符n 的字符串,則保持原樣輸出3)二進(jìn)制文件:照片、音樂、視頻、計算機(jī)程序等優(yōu)點: 更加節(jié)省空間; 采用二進(jìn)制無格式存儲更精確; 編碼是變長的,靈活利用率高不同的二進(jìn)制文件,解碼方式不同5.2文件的基本處理(1)打開文件 open() 建立磁盤上的文件與程序中的對象相關(guān)聯(lián)通過相關(guān)的文件對象獲得 = open(, )磁盤文件名打開模式r只讀。如果文件不存在,則輸出錯誤只寫(如果文件不存在,則自動創(chuàng)建文件)a附加到文件末尾rb只讀二進(jìn)制文件,如果文件不存在,則輸出錯誤wb只寫二進(jìn)制文

52、件,如果文件不存在,則自動創(chuàng)建文件ab附加到二進(jìn)制文件末尾r+讀寫例:打開“ numbers.dat ”文本文件:infile = open( “ numbers.dat ” , “ r ”) 打開“ music.mp3 ”的音頻文件(二進(jìn)制文件) : infle = open(“ music.mp3 ” , ” rb ”)2)文件操作:讀取、寫入、定位、追加、計算文件讀?。簉ead()返回值為包含整個文件內(nèi)容的一個字符串readline()返回值為文件下一行內(nèi)容的字符串readlines()返回值為整個文件內(nèi)容的列表每項是以換行為結(jié)尾的一行字符串例:程序 5.2.1def main():fn

53、ame = input(“ Enter filename:”)infile = open(fname.“ r ”)data = infile.read()25文檔來源為 :從網(wǎng)絡(luò)收集整理.word 版本可編輯 .歡迎下載支持.print(data)for i in range(5):line = infile.readline()print(line:-1)main() 文件寫入:write()把含有本文數(shù)據(jù)或二進(jìn)制數(shù)據(jù)塊的字符串寫入文件中writelines()針對列表操作,接受一個字符串列表作為參數(shù)將它們寫入文件,并且行結(jié)束符不會被自動加入例: outfile = open(“outfil

54、e.txt”, ”w”) outfile.writelines(“ Hello ” ,” ,” world ” ) outfile.close() infile = open(“ outfile.txt” ,“ r ”) infile.read() Hello world 文件遍歷:如:拷貝文件,根據(jù)數(shù)據(jù)文件定義行走路徑將文件由一種編碼轉(zhuǎn)換為另外一種編碼通用代碼框架:file = open(someFile,簡化 ” r ”)for line in file.readlines(): for line in file:#處理一行文件內(nèi)容file.close()例:文件拷貝程序def main(

55、):用戶輸入文件名f1 = input(Enter a souce file:).strip()f2 = input(Enter a souce file:).strip()打開文件infile = open(f1,r)outfile = open(f2,w)拷貝數(shù)據(jù)countLines = countChars = 0for line in infile:countLines += 126文檔來源為 :從網(wǎng)絡(luò)收集整理.word 版本可編輯 .歡迎下載支持.countChars += len(line)outfile.write(line)print(countLines,lines and,

56、countChars,chars copied)infile.close()outfile.close()main()【運行結(jié)果】Enter a souce file:s.txtEnter a souce file:q.txt1 lines and 15 chars copied3)關(guān)閉文件 close()切斷文件與程序的聯(lián)系寫入磁盤,并釋放文件緩沖區(qū)5.3文件實例【實例一】根據(jù)文件date.txt中的數(shù)據(jù),使用turtle庫來動態(tài)繪制圖形路徑元素 1:路徑前進(jìn)像素數(shù)元素 2:轉(zhuǎn)動方向, 0 為左, 1 為右元素 3:轉(zhuǎn)動角度元素 4-6 :繪制顏色的RGB值例:第一行 繪制路徑前進(jìn)300 個

57、像素向左轉(zhuǎn)動144 度,路徑線段顏色為紅色I(xiàn)PO】輸入:數(shù)據(jù)文件處理:讀取數(shù)據(jù)文件,并根據(jù)數(shù)據(jù)內(nèi)容和要求繪制路徑輸出:構(gòu)建窗口,并輸出圖形【程序?qū)崿F(xiàn)】程序根據(jù)數(shù)據(jù)文件在窗口中動態(tài)路徑繪制import turtledef main():設(shè)置窗口信息turtle.title( 數(shù)據(jù)驅(qū)動的動態(tài)路徑繪制)turtle.setup(800,800,0,0)設(shè)置畫筆pen = turtle.Turtle()pen.color(red)pen.width(5)27文檔來源為 :從網(wǎng)絡(luò)收集整理.word 版本可編輯 .歡迎下載支持.pen.shape(turtle)pen.speed(5)讀取文件result

58、 = file = open(data.txt,r)for line in file:result.append(list(map(float, line.split(,)print(result)for i in range(len(result):pen.color(resulti3,resulti4,resulti5)pen.fd(resulti0)if resulti1:pen.rt(resulti2)else:pen.lt(resulti2)pen.goto(0,0)if _name_ = _main_:main()【運行結(jié)果 】【文件實例二】多文件讀寫合并郵箱簿和電話簿文件IPO】

59、輸入:電話簿、郵箱地址簿文件處理:將兩個文件內(nèi)容進(jìn)行合并輸出:合并后的包含電話和郵箱地址的文件28文檔來源為 :從網(wǎng)絡(luò)收集整理.word 版本可編輯 .歡迎下載支持.【程序?qū)崿F(xiàn)】程序def main():ftele1 = open(TeleAddressBook.txt, rb)ftele2 = open(EmailAddressBook.txt, rb)ftele1.readline() #跳過第一行ftele2.readline()lines1 = ftele1.readlines()lines2 = ftele2.readlines()list1_name = list1_tele =

60、list2_name = list2_email = for line in lines1: #獲取第一個文本中的姓名和電話信息elements = line.split()list1_name.append(str(elements0.decode(gbk)list1_tele.append(str(elements1.decode(gbk)將文本讀出來的 bytes 轉(zhuǎn)換為 str 類型for line in lines2: #獲取第二個文本中的姓名和郵件信息elements = line.split()list2_name.append(str(elements0.decode(gbk)

溫馨提示

  • 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

提交評論