Python程序設計基礎及實踐(慕課版 第2版)課件 郭煒 1. Python初探 -7. 組合數(shù)據(jù)類型(3)字典和集合_第1頁
Python程序設計基礎及實踐(慕課版 第2版)課件 郭煒 1. Python初探 -7. 組合數(shù)據(jù)類型(3)字典和集合_第2頁
Python程序設計基礎及實踐(慕課版 第2版)課件 郭煒 1. Python初探 -7. 組合數(shù)據(jù)類型(3)字典和集合_第3頁
Python程序設計基礎及實踐(慕課版 第2版)課件 郭煒 1. Python初探 -7. 組合數(shù)據(jù)類型(3)字典和集合_第4頁
Python程序設計基礎及實踐(慕課版 第2版)課件 郭煒 1. Python初探 -7. 組合數(shù)據(jù)類型(3)字典和集合_第5頁
已閱讀5頁,還剩419頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

信息科學技術學院

計算概論C教材Python程序設計基礎及實踐(慕課版)郭煒編著人民郵電出版社慕課:中國大學MOOC實用Python程序設計/course/PKU-1460924165?from=searchPage信息科學技術學院福建省寧德市北岸公園程序設計語言概述常見程序設計語言Java:使用最廣泛的語言。主要用于互聯(lián)網(wǎng)服務器端應用和Android手機App開發(fā)C/C++:開發(fā)對速度要求較高的系統(tǒng)軟件,以及大型端游C#:微軟公司程序設計語言,網(wǎng)站開發(fā),桌面應用開發(fā)PHP:網(wǎng)站開發(fā)JavaScript:網(wǎng)站前端開發(fā)。在瀏覽器中運行Swift:蘋果公司語言,用于開發(fā)iPhoneApp和Mac桌面應用程序常見程序設計語言為什么學Python簡單易學有眾多的庫支持,功能強大

編程效率高

跨平臺(Windows,Linux,MacOS...)Python的歷史Python的作者,GuidovonRossum,荷蘭人。1982年,Guido從阿姆斯特丹大學(UniversityofAmsterdam)獲得了數(shù)學和計算機碩士學位。之所以選中Python(大蟒蛇的意思)作為該編程語言的名字,是因為他是一個叫MontyPython的喜劇團體的愛好者。Python的歷史

Python雛形 1991年Python1.0

1994年11月Python2.0 2000年Python2.7.13是Python2的最后版本Python3.0 2008年Python3不向后兼容Python2目前:Python3.8.6Python開發(fā)環(huán)境的安裝和使用信息科學技術學院

郭煒內(nèi)蒙古阿斯哈圖石林下載Python/downloads/MacOSX64-bit/32-bitinstallerWindowsx86-64executableinstaller 64位WindowsWindowsx86executableinstaller 32位Windows搭建Python開發(fā)環(huán)境下載并安裝Python3.x下載并安裝pycharm-community-4.0.4(非必需,但強烈推薦)/pycharm/download/#section=windows3)配置pycharm

4)在pycharm建工程5)編寫、運行python程序安裝Python1.不是下載下來就好了,還要運行下載下來的文件,進行安裝2.要勾上,否則pycharm里面找不到python以命令行方式運行python程序Windows下,Win+R

鍵,可以彈出左邊“運行”窗口,敲"cmd"確定,就能彈出右邊cmd窗口(命令行窗口)Mac上相應操作,是從launchPad里面啟動“終端”以命令行方式運行python程序Windows下,Win+R

鍵,可以彈出左邊“運行”窗口,敲"cmd"確定,就能彈出右邊cmd窗口(命令行窗口)敲cd\再敲cd\tmp(或其它文件夾名)進入存放python程序的文件夾pythonXXX.py就可以運行XXX.py用idle編輯程序并運行Python程序window鍵,然后敲idle,可找到idle,然后File|New|Run用PyCharm運行python程序File|NewProject新建一個工程(Mac電腦上,PyCharm的菜單在屏幕最上方)File|New

新建一個PythonFile

并隨意命名Run菜單運行程序。如果同時打開多個.py程序,則用Run|Run

可以選一個。以后要運行同一個文件,在右上方點4)如果程序需要輸入,則在PyCharm下方輸入,輸出結果也會出現(xiàn)在下方為project設置解釋器如果pycharm找不到pythoninterpereter,則:File|Settings|Project:XXX|Projectinterpreter,然后選解釋器。如果沒得選,就addlocal加一個,加的辦法是選python安裝的文件夾安裝Python要在命令行方式啟動python,就要在安裝的時候勾上不行就卸載重裝最簡單的Python程序print("Hello,World")程序中的符號程序中的所有字符都必須是英文(半角)字符,不能是中文(全角)字符,注意.',(,"之類的,都必須是英文字符!22輸入了中文的括號和雙引號,導致pyCharm以紅線提示錯誤!信息科學技術學院Python語言基本要素符號和注釋信息科學技術學院

郭煒瑞士布里茨恩湖程序中的符號

程序中的所有字符都必須是英文字符,不能是中文的字符,注意,:

.',("之類的,都必須是英文字符!不能是中文的!不能在輸入中文狀態(tài)下輸入!中文的標點符號看起來一般比英文的更寬。除非就是要輸出中文文字,才會在“字符串”中使用中文25注釋26并非需要執(zhí)行的指令,只是為了編程者方便理解程序之用注釋:"#"開頭a=b#讓a和b的值相同

注釋27Pycharm中,選中若干行,Ctrl+'/'可將這些行都變成注釋/都由注釋變?yōu)榉亲⑨屝畔⒖茖W技術學院福建省寧德市北岸公園變量新疆喀拉峻鱷魚灣變量29變量有名字,可以用來存儲數(shù)據(jù)。其值可變。a=12

b=a #讓b的值變得和a一樣

print(a+b)

a="hello"

print(a)輸出:24hello變量的命名辦法30變量由大小寫字母、數(shù)字和下劃線構成,中間不能有空格,長度不限,不能以數(shù)字開頭

name_doorNumx1yza2A number_of_studentsMYTYPE變量名最好能夠體現(xiàn)變量的含義多單詞的變量名,最好第一個單詞小寫,后面單詞首字母大寫dateOfBirth numOfDogs bookPrice變量的命名辦法31變量名是大小寫相關的a和A,name和Name是不同的變量。有些名字Python預留了,不可用作變量的名字 andasassertbreakclasscontinuedef delelifelseexceptexecforfinallyfrom globalifimportinislambdanotorpass printraisereturntrywhilewithyield

如果不小心用了,python會報錯信息科學技術學院新疆布爾津五彩灘賦值語句賦值語句33形式:

變量=表達式將變量的值變得和“表達式”的值一樣變量、數(shù)、字符串都是“表達式”賦值語句34a="he"

print(a) #>>he

b=3+2

a=b#a的值變得和b一樣

print(b) #>>5

print(a)#>>5

b=b+a#b的值改為原來b的值加aprint(b) #>>10b=b*3 #'*'代表乘法print(b) #>>30賦值語句35a,b="he",12print(a,b) #>>he12a,b=b,a #交換a,b的值

print(a,b)#>>12hec,a,b=a,b,aprint(a,b,c)#>>he1212a=b=c=10print(a,b,c)#>>101010

信息科學技術學院新疆塞里木湖字符串初步字符串可以且必須用單引號、雙引號或三單引號、三雙引號括起來x="Isaid:'hello'"print(x) #>>Isaid:'hello'print('Isaid:"hello"')#>>Isaid:"hello"print('''Isaid:'hesaid"hello"'.''')#>>Isaid:'hesaid"hello"'.print("this\is\good")#>>thisisgood字符串太長時,可以分行寫print(hello,word)

#錯!沒有用引號括起來37字符串字符串里面不會包含變量s=1.75print(s) #>>1.75print("Iamsmtall") #>>Iamsmtall字符串中的s就是個字符,和前面的變量s沒有關系!!!字符串必須用引號括起來,用引號括起來的就是字符串!a=4b=5print("a+b")#>>a+b不會打出9!!!!!38字符串三雙引號字符串中可以包含換行符、制表符以及其他特殊字符。para_str="""多行字符串可以使用制表符TAB(\t)。也可以使用換行符[\n]。<HTML><HEAD><TITLE>FriendsCGIDemo</TITLE></HEAD><BODY><H3>ERROR</H3><FORM><INPUTTYPE=buttonVALUE=BackONCLICK="window.history.back()"></FORM></BODY></HTML>"""print(para_str)39多行字符串可以使用制表符TAB( )。也可以使用換行符[]。<HTML><HEAD><TITLE>FriendsCGIDemo</TITLE></HEAD><BODY><H3>ERROR</H3><FORM><INPUTTYPE=buttonVALUE=BackONCLICK="window.history.back()"></FORM></BODY></HTML>字符串字符串的下標有n個字符的字符串,其中的每個字符都是長度為1的字符串:

從左到右依次編號為0,1,2...n-1

從右到左依次編號為-1,-2...-n編號就是下標a="ABCD" print(a[-1]) #>>Dprint(a[0]) #>>Aprint(a[2]) #>>C 40字符串不可修改不可以修改字符串中的字符a="ABCD" a[2]='k'#錯,字符串中的字符不能修改41字符串用"+"連接字符串a(chǎn)="ABCD"b="1234"a=a+bprint(a) #>>ABCD1234a=a+a[1] print(a) 42字符串用"+"連接字符串a(chǎn)="ABCD"b="1234"a=a+bprint(a) #>>ABCD1234a=a+a[1] print(a) #>>ABCD1234B43字符串用in,notin判斷子串a(chǎn)="Hello"b="Python"print("el"ina) #>>Trueprint("th"notinb) #>>Falseprint("lot"ina) #>>False44字符串和數(shù)

的轉換信息科學技術學院內(nèi)蒙古錫盟草原字符串和數(shù)的轉換int(x) :把字符串轉換成整數(shù) (x不會變成整數(shù),

int(x)這個表達式的值是整數(shù))float(x):把字符串x轉換成小數(shù)str(x):把x轉換成字符串eval(x):把字符串x看作一個python表達式,求其值初學者程序出現(xiàn)runtimeerror,多半是由于做了不合法的轉換,如int(x)而x為"a12"或"12.34",float(x)而x為"abc"46字符串和數(shù)的轉換a=15b="12"c=a+b#錯誤的語句,字符串和整數(shù)無法相加print(a+int(b))#>>27b沒有變成整數(shù)int(b)這個表達式的值是個整數(shù)print(str(a)+b)#>>1512c=1+float("3.5")print(c) #>>4.5print(3+eval("4.5"))#>>7.5print(eval("3+2")) #>>5print(eval("3+a")) #>>1847小數(shù)到整數(shù)的轉換int(x)x是小數(shù),則去尾取整int(3.2) #3int(3.9) #3int("4.5") #runtimeerror,字符串內(nèi)容必須是整數(shù)的形式48Python數(shù)據(jù)類型int

整數(shù) 123456899899float 小數(shù) 3.21.5E6complex 復數(shù) 1+2jstr

字符串 "hello"list 列表 [1,2,'ok',4.3]tuple 元組 (1,2,'ok',4.3)bool

布爾 TrueFalsedict

字典 {"tom":20,"jack":30}set 集合 {"tom",18,71}輸入輸出初步信息科學技術學院

郭煒新加坡金沙酒店無邊泳池輸出語句printprint(x,y,z)#也可以只輸出一項

連續(xù)輸出多項,以空格分隔,然后換行print(x,y,z,end="")

連續(xù)輸出多項,以空格分隔,不換行print(1,2,3,end="")print("ok")#>>123ok注意:做OpenJudge作業(yè)的時候,print里面慎用',',因為可能會多出不該有的空格51輸入語句input格式:x=input(y)x是變量y是字符串,或任何值為字符串的表達式輸出y,并等待輸入。敲回車后輸入的字符串被賦值給x52最簡單的能處理輸入的Python程序s=input("請輸入你的名字:")print(s+",你好!")注意:以后做OpenJudge作業(yè)的時候,input里面不要寫任何東西s=input()4)如果程序需要輸入,則在PyCharm下方輸入,輸出結果也會出現(xiàn)在下方輸入語句inputinput()每次輸入一行,如果有多行輸入,就用多次input()初學者常犯錯誤:如果輸入已經(jīng)結束(后面沒有輸入數(shù)據(jù)了),再進行input(),就會產(chǎn)生runtimeerror不要多行輸入只用一次input,也不要一行輸入用多次input55在一行輸入3個整數(shù),輸出它們的和。a,b,c=input().split()#a,b,c即為在一行中輸入的,空格分隔開的3個字符串a(chǎn)”67”b”45”c”38”同一行輸入多項數(shù)據(jù):列表初步信息科學技術學院

郭煒德國國王湖列表列表可以有0到任意多個元素,元素可以通過下標訪問empty=[]#空表list1=['Google','Runoob',1997,2000]list2=[1,2,3,4,5,6,7]print("list1[0]:",list1[0])#>>list1[0]:Googlelist1[2]=2001 #更改了列表中下標為2的元素。a=2print("更新后的第三個元素為:",list1[a])#變量也能做下標#>>更新后的第三個元素為:2001列表用in判斷列表是否包含某個元素lst=[1,2,3,"4",5]print(4inlst,3inlst,"4"inlst)#>>FalseTrueTrue實例:輸入兩個整數(shù)求和s=input()numbers=s.split()print(int(numbers[0])+int(numbers[1]))若輸入:34則:s為:"34"numbers為:["3","4"]輸出:7字符串分割成列表若x是字符串,則x.split()的值是一個列表,包含字符串x經(jīng)空格、制表符、換行符分隔得到的所有子串print("34\t\t45\n7".split())#>>['34','45','7']#\t是制表符,\n是換行符號

print("abcdhello".split())#>>['ab','cd','hello']

s="1234"

lst=s.split()

print(lst)#>>['12','34']print("abcd".split())#>>['abcd']print(input().split()[2][1])輸入為abcdef1234567輸出是:abcdef2dABD提交C單選題1分此題未設答案print(input().split()[2][1])輸入為abcdef1234567輸出是:abcdef2dABCD提交單選題1分程序頂格書寫64程序每行前面不能留空格!(例外后面講)OK!亂加空格,錯!學會看提示信息信息科學技術學院計算概論C教材Python程序設計基礎及實踐(慕課版)郭煒編著人民郵電出版社慕課:中國大學MOOC實用Python程序設計/course/PKU-1460924165?from=searchPage算術運算、邏輯運算和分支語句信息科學技術學院68算術運算信息科學技術學院寧夏中衛(wèi)沙坡頭算術運算符Python支持以下算術運算

+

加法

-

減法(雙操作數(shù)),取相反數(shù)(單操作數(shù))

*

乘法/除法

,結果是小數(shù)。即便能整除也是小數(shù) %取模(求余數(shù))

// 求商,結果取整數(shù)部分,不要余數(shù) **求冪算術表達式a=(3+2)*(6-3)/2print(a) #>>7.5print(10/8) #>>1.25print(10%8) #>>2print(15/4) #>>3.75print(15//4) #>>3print(3.4/2.2) #>>1.5454545454545452print(3.4//2.2) #>>1.0print(2**3) #>>8print(-9//4)#>>-3往小里取整算術表達式/計算的結果都是小數(shù),哪怕能整除z=10/2print(z) #>>5.0

-x

相當于0-xa=10print(-a) #>>-10print(-a*3) #>>-30等價于(–a)*3print(3+-5)#>>-2算術表達式

有小數(shù)的算術表達式,結果就是小數(shù)z=10.0-10print(z) #>>0.0z=7.5–2.5print(z) #>>5.0print(2+0*4.5) #>>2.0print(2+10/5) #>>4.0

算術運算符優(yōu)先級第一級:

**第二級: -(求相反數(shù))

第三級: *///%第四級: +-(減法)可以用()指定計算順序:(3+4)*(1+2)記不得優(yōu)先級就用()算術運算的同時賦值

+= a+=b 等價于a=a+b

-= a-=b 等價于a=a-b

*=

/=

%=//=

**=算術運算的同時賦值a=6a/=3print(a) #>>2.0a**=3print(a) #>>8.0常見問題或注意事項數(shù)學上的運算符號或代數(shù)式寫法,不是拿到程序里就能直接用的!比如|x|在程序里并不能求x的絕對值,而是沒定義,會出錯!2(x+3)(4+x)這樣的表達式也不能在程序里寫!應該寫:2*(x+3)*(4+x)乘法就一定要用'*'!2*b不能寫成2b!常見問題或注意事項/的結果一定是小數(shù)。一個算術表達式,只要有一個操作數(shù)是小數(shù),其結果就一定是小數(shù)。如果x是小數(shù)print(x)就會打出小數(shù)形式,哪怕x=4/2。如果題目要求是整數(shù),就要注意了,不要把整數(shù)當小數(shù)打出來。print(4/2)打出2.0常見問題或注意事項/是÷

,不是分數(shù)線因此a/b*c是a÷

b×c,不是a/(b*c)print(4+6/2)的結果是77.05.05ACD提交B單選題1分此題未設答案print(4+6/2)的結果是77.05.05ABCD提交單選題1分關系運算符

邏輯運算符

邏輯表達式信息科學技術學院

郭煒韓國濟州島火山口六種關系運算符用于比較大小相等

==不等

!=大于

>小于

<大于等于

>=小于等于

<=比較的結果是bool類型,成立則為True,反之為Falsebool類型數(shù)據(jù)只有兩種取值,True或False關系運算符和bool類型83print(3<5) #>>True

print(4!=7) #>>True

a=4

print(2<a<6<8) #>>True

print(2<a==4<6) #>>True

print(2<a>5) #>>False

b=a<6

print(b) #>>True

print(b==1) #>>True

print(b==2) #>>False

b=a>6

print(b==0) #>>Truea=True

print(a==1) #>>True關系運算符和bool類型84關系運算符也能比較字符串(按字典序,大小寫相關)a="k" print(a=="k") #>>True

a="abc"

print(a=="abc") #>>True

print(a=="Abc") #>>False

print("abc"<"acd") #>>True

print("abc"<"abcd") #>>Trueprint("abc">"Abc") #>>True

關系運算符和bool類型85邏輯運算符用于表達式的邏輯操作,有andornot三種,操作的結果是True或False與:exp1andexp2當且僅當exp1和exp2的值都為True(或相當于True)時,結果為True(或相當于True)n=4

n>4andn<5 #false

n>=2andn<5andn%2==0#true

print(5andFalse)#>>False

print(4andTrue)#>>True邏輯運算符和邏輯表達式86

0,""(空字符串),[](空表),None

都相當于False(但除0以外都不等于False)

非0的數(shù),非空的字符串和非空列表,都相當于True(但除1以外,都不等于True)True和1完全等價,F(xiàn)alse和0完全等價True==1 #TrueFalse==0 #True""==False #False2==True #False[]==False #False[2,3]==True #False什么相當于True或False87或:exp1orexp2當且僅當exp1和exp2的值都為False(或相當于False)時,結果為False

(或相當于False) n=4

n>4orn<5#True

n<=2orn>5#False

邏輯運算符和邏輯表達式88非:notexpexp值為True(或相當于True)時,結果為Falseexp值為False(或相當于False)時,結果為True not4<5 #False not5 #False not0 #True

not"abc" #False

not"" #True

not4<5and4>6 #False

not[] #True

not[1] #False

邏輯運算符和邏輯表達式89print(3<4or4>5and1>2) #>>True

print((3<4or4>5)and1>2) #>>Falsenot4<5and4>6即(not4<5)and(4>6)邏輯運算符的優(yōu)先級not>and>or90exp1andexp2:如果已經(jīng)算出表達式exp1為假,那么整個表達式的值肯定為假,于是表達式exp2就不需要再計算exp1orexp2:如果已經(jīng)算出exp1為真,那么整個表達式必定為真,于是exp2也不必計算邏輯運算符和邏輯表達式邏輯表達式是短路計算的,即對邏輯表達式的計算,在整個表達式的值已經(jīng)能夠斷定的時候即會停止91

算術運算符***///%+-

關系運算符<>==!=<=>=邏輯運算符 notandor記不得就勤用()print(3+2<5) #>>False

print(3+(2<5)) #>>4,因2<5相當于1

各種運算符的優(yōu)先級從高到低:92以下程序輸出幾個Trueprint([]==False)print(not[])print(0==False)print(1==True)print(not"")5432ABCD提交單選題1分條件分支語句(if語句)信息科學技術學院

郭煒美國加州太浩湖條件分支語句

有時,并非所有的程序語句都要被順序執(zhí)行到,會希望滿足某種條件就執(zhí)行這部分語句,滿足另一條件就執(zhí)行另一部分語句。這就需要“條件分支語句”95條件分支語句96if表達式1:

語句組1elif

表達式2:

語句組2

...#可以有多種個elifelif表達式n:

語句組nelse:

語句組n+1

依次計算表達式1、表達式2…只要碰到一個表達式i為真(True或相當于True),則執(zhí)行語句組i(前面為假的表達式對應的語句組不會被執(zhí)行),且后面的表達式不再計算,后面的語句組也都不會被執(zhí)行。若所有表達式都為假(False或相當于False),則執(zhí)行語句組n+1

注意,縮進的前一行末尾有'

:'可以沒有elif,也可以沒有else,也可以都沒有條件分支語句if表達式1:

語句組1else:

語句組2if表達式1:

語句組1elif

表達式2:

語句組2if表達式1:

語句組1Python程序的語句前面不能加空格或制表符,除非:1.它在if語句中的某個“語句組”里面2.在for,while等語句的語句組里面3.在函數(shù)體里面4條件分支語句的縮進98if語句中的語句組,每條語句左邊必須縮進,且縮進情況必須一樣(對齊)ifint(input())==5:

print("a",end="")

print("b")

輸入:5 輸出:ab輸入:4 無輸出條件分支語句的縮進99if語句中的語句組,每條語句左邊必須縮進,且縮進情況必須一樣(對齊)ifint(input())==5:

print("a",end="")

print("b")

輸入:4 輸出:b條件分支語句的縮進100if語句中的語句組,每條語句左邊必須縮進,且縮進情況必須一樣(對齊)ifint(input())==5:

print("a",end="")

print("b")

出錯!沒有對齊的縮進!條件分支語句的縮進101if"ok":

print(“ok”) #>>ok

if"":

print(“nullstring”) #不執(zhí)行,故無輸出

a=[4,2]

ifa:

print(a) #>>[4,2]

if20:

print(20) #>>20

if0:

print(0) #不執(zhí)行,故無輸出什么相當于True或False102例題:

寫一個判斷整數(shù)奇偶性的程序,要求輸入一個整數(shù),如果是奇數(shù),就輸出“It'sodd.”,如果是偶數(shù),就輸出“It'seven.”。ifint(input())%2==1:

print("It'sodd")

else:

print("It'seven")

if語句示例在一條if語句的某個分支(語句組)里,還可以再寫if語句。a=int(input())

ifa>0:

ifa%2:

print("good")

else:

print("bad")輸入:

4 輸出:bad

輸入:

3 輸出:good輸入:

-1 無輸出if語句嵌套在一條if語句的某個分支(語句組)里,還可以再寫if語句。a=int(input())

ifa>0:

ifa%2:

print("good")

else:

print("bad")輸入:

4 無輸出輸入:

3 輸出:good輸入:

-1 badif語句嵌套if語句實例例:輸入密碼password="python"userInput=input()#等待用戶輸入密碼ifuserInput==password:

#==判斷兩邊的表達式值是否相等print("對了!")else:print("錯了")106信息科學技術學院郭煒分支語句例題美國黃石公園大棱鏡溫泉if語句實例:溫度轉換程序tmpStr=input("請輸入帶有符號的溫度值:")#tmpStr是變量名,隨便取啥都行iftmpStr[-1]in['F','f']:#如果輸入華氏溫度

C=((float(tmpStr[0:-1]))-32)/1.8 print("轉換后的溫度是"+str(C)+"C")eliftmpStr[-1]in"Cc":#如果輸入攝氏溫度

F=1.8*eval(tmpStr[0:-1])+32 print("轉換后的溫度是"+str(F)+"F")#str將F轉字符串else: print("輸入格式錯誤")#用float替代eval也可以請輸入帶有符號的溫度值:45F轉換后的溫度是7.222222222222222C請輸入帶有符號的溫度值:8.2C轉換后的溫度是46.76F字符串切片若s是一個字符串,則:s[x:y]是s的從下標x到下標y的左邊那個字符構成的子串(切片)print("12345"[1:3]) #>>23a="abcdef"

print(a[2:-1]) #>>cdeprint(a[0:6]) #>>abcdef不要把if...else或if...elif...else寫成多個ififa>5:

print("xxx")a=3

else:print(b)常見錯誤ifa>5:

print("xxx")

a=3

ifa<=5print(b)=中可能把a的值改成了<=5。寫多個if,哪些代碼會被執(zhí)行,哪些不會被執(zhí)行,很容易搞錯。例題:請寫一個程序,該程序輸入一個年份,根據(jù)該年份是否是建國整十周年、建黨整十周年以及是否是閏年給出不同的輸出。if語句嵌套year=int(input())

ifyear<=0:

print("Illegalyear")

else:

print("Legalyear.")

ifyear>1949and(year-1949)%10==0:#建國整十

print("Lukyyear.")

elifyear>1921andnot((year-1921)%10):#建黨整十

#只是為了演示not的用法,沒必要這么寫

print("Goodyear.")

elifyear%4==0andyear%100oryear%400==0:

#year%100若不為0,則year%100就相當于True print("Leapyear")#閏年

else:

print("Commonyear.")-2↙Illegalyear.

1959↙Legalyear.Lukyyear.

1931↙Legalyear.Goodyear.

2008↙Legalyear.Leapyear.

2013↙Legalyear.Commonyear.輸出格式控制信息科學技術學院甘肅張掖七彩丹霞(航拍)輸出格式控制字符串中的格式控制符:%s表示此處要輸出一個字符串%d表示此處要輸出一個整數(shù)%f表示此處要輸出一個小數(shù)%.nf表示此處要輸出一個小數(shù),保留小數(shù)點后面n位,四舍六入,五則可能入也可能舍。注意,有'.'

格式控制符只能出現(xiàn)在字符串中!輸出格式控制h=1.746print("Mynameis%s,Iam%.2fmtall."%("tom",h))print("Myageis%d."%18)print("%d%s"%(18,"hello"))print("%.2f,%.2f"%(5.225,5.325))#>>5.22,5.33輸出:Mynameistom,Iam1.75mtall.Myageis18.18hello5.22,5.33輸出格式控制name="tom"h=1.746"Mynameis%s,Iam%.2fmtall."%("tom",h)是個字符串。比下面這個等價字符串簡潔:"Mynameis%s,"%name+"Iam%.2fmtall."%h常見問題或注意事項題目:在一行輸入兩個小數(shù)x,y,請輸出(x+y)*x的值,保留小數(shù)點后面5位錯誤解法:s=input().split()x,y=float(s[0]),float(s[1])m='%.5f'%(x+y)z=float(m)*xprint("%.5f"%z)常見問題或注意事項錯誤解法:s=input().split()x,y=float(s[0]),float(s[1])m='%.5f'%(x+y)z=float(m)*xprint("%.5f"%z)x+y本來就是小數(shù)沒有必要先轉成字符串,又轉成小數(shù)。結果要保留小數(shù)點后面5位,并非中間的計算過程也要保留小數(shù)點后面5位信息科學技術學院119

實用Python程序設計循環(huán)語句信息科學技術學院120for循環(huán)語句信息科學技術學院

郭煒內(nèi)蒙古阿斯哈圖石林循環(huán)語句有時,需要重復多次執(zhí)行一系列語句,因此需要循環(huán)語句122for循環(huán)語句for<variable>in<sequence>:<statements1>else:<statements2>依次對sequence中的每個值,執(zhí)行<statements1>然后再執(zhí)行<statements2>。通常不需要else部分sequence可以是range(..),也可以是字符串、列表、元組、字典、集合123for循環(huán)語句foriinrange(5):#[0,5)print(i)01234foriinrange(5,9):#[5,9)print(i)5678124for循環(huán)語句foriinrange(0,10,3):#步長3print(i)0369foriinrange(-10,-100,-30):print(i)-10-40-70125for循環(huán)語句foriinrange(0): print(i)無輸出foriinrange(2,2):print(i)無輸出126foriinrange(3,12,3):print(i,"",end="")輸出結果是:36936912345678910113456789101112BCD提交A單選題1分此題未設置答案,請點擊右側設置按鈕foriinrange(3,12,3):print(i,"",end="")輸出結果是:36936912345678910113456789101112ABCD提交單選題1分for循環(huán)遍歷列表–寫法1a=['Google','Baidu','IBM','Taobao','QQ']foriinrange(len(a)): #len,求列表長度(元素個數(shù))print(i,a[i])0Google1Baidu2IBM3Taobao4QQlen也可以用來求字符串長度,元組、集合、字典元素個數(shù)print(len("abc"))#>>3129for循環(huán)遍歷列表–寫法2a=['Google','Baidu','IBM','Taobao','QQ']foriina: print(i)GoogleBaiduIBMTaobaoQQ130for循環(huán)遍歷字符串forletterin'Taobao': print(letter)Taobao131break語句sites=["Baidu","Google","IBM","Taobao"]forsiteinsites:ifsite=="IBM":print("OK")print("site:

"+site)else:print("Nobreak")print("Done!")132site:Baidusite:GoogleOKsite:IBMsite:TaobaoNobreakDone!break語句sites=["Baidu","Google","IBM","Taobao"]#listforsiteinsites:#對sites中的每個值siteifsite=="IBM":print("OK")

break #跳出循環(huán)

print("site:

"+site)else:print("Nobreak")print("Done!")else子句在循環(huán)結束時會執(zhí)行,但是如果break了,則不會執(zhí)行133site:Baidusite:GoogleOKDone!continue語句forletterin'Taobao':

ifletter=='o':#字母為o時跳過輸出

continue #直接跳到下次循環(huán)print('當前字母:',letter)當前字母:T當前字母:a當前字母:b當前字母:a134連續(xù)輸出26個字母foriinrange(26):

print(chr(ord("a")+i),end="")

abcdefghijklmnopqrstuvwxyz字母的ASCII編碼是連續(xù)的135字符的編碼ord(x)求字符x的編碼(字符就是長度為1的字符串)chr(x)求編碼為x的字符可以用8個連續(xù)的0或1(即1個字節(jié))來表示一個字母、數(shù)字或標點符號,比如用“00100000”表示空格,用“01100001”表示字母“a”,用“01100010”表示字母“b”,用“01100011”表示字母“c”……。由8個0或者1的組成的串,一共有28即256種不同的組合,這就足以表示10個阿拉伯數(shù)字以及英語中用到的所有字母和標點符號了。此即為ASCII編碼方案。136連續(xù)輸出0-9foriinrange(10):print(chr(ord("0")+i),end="")0123456789'0'-'9'的ASCII編碼是連續(xù)的137print(chr(ord("A")+4))結果是10169EeABD提交C單選題1分此題未設置答案,請點擊右側設置按鈕print(chr(ord("A")+4))結果是10169EeABCD提交單選題1分for循環(huán)例題信息科學技術學院郭煒俄羅斯圣彼得堡圣以撒教堂例題1.輸入n個整數(shù)求和輸入第一行是整數(shù)n,n>=1后面有n行,每行一個整數(shù)輸出輸出后面那n個整數(shù)的和樣例輸入3128樣例輸出11

141例題1.輸入n個整數(shù)求和n=int(input())total=0foriinrange(n):#做n次 total+=int(input())#每次讀入一行print(total)

142例題2.從小到大輸出n的因子輸入一個正整數(shù)n,從小到大輸出它的所有因子n=int(input())

forxinrange(1,n+1):

ifn%x==0:

print(x,"",end="")15↙13515143例題3.從大到小輸出n的因子輸入一個正整數(shù)n,從大到小輸出它的所有因子

n=int(input())

forxinrange(n,0,-1):#步長-1

ifn%x==0:

print(x,"",end="")

15↙15531144多重循環(huán)信息科學技術學院

郭煒美國拱門國家公園多重循環(huán)循環(huán)可以嵌套,形成多重循環(huán):

foriinrange(n):

forjinrange(m):

#內(nèi)重循環(huán)的執(zhí)行次數(shù)一共是n×m次

146多重循環(huán)例題1:多次求n個數(shù)的和輸入第一行是整數(shù)m,m>=1,表示有m組數(shù)據(jù)接下來就是m組數(shù)據(jù)對于每組數(shù)據(jù):第一行是整數(shù)n,n>=1接下來是n行,每行一個整數(shù)輸出對每組數(shù)據(jù),輸出后面那n個整數(shù)的和147樣例輸入2312321020樣例輸出630多重循環(huán)例題1:多次求n個數(shù)的和m=int(input())foriinrange(m):#m組數(shù)據(jù),所以要處理m次

n=int(input())total=0foriinrange(n):#n個數(shù),每個一行,所以要inputn次

total+=int(input())print(total)148total=0foriinrange(2):forjinrange(1,3):total+=i+jprint(total)輸出結果是:681012ACD提交B單選題1分此題未設置答案,請點擊右側設置按鈕total=0foriinrange(2):forjinrange(1,3):total+=i+jprint(total)輸出結果是:681012ABCD提交單選題1分例題:給定正整數(shù)n和m,在1至n這n個數(shù)中,取出兩個不同的數(shù),使得其和是m的因子,問有多少種不同的取法。輸出這些取法。151多重循環(huán)例題2:取兩個數(shù)例題:給定正整數(shù)n和m,在1至n這n個數(shù)中,取出兩個不同的數(shù),使得其和是m的因子,問有多少種不同的取法。輸出這些取法。思路:窮舉1-n這n個數(shù)中取兩個數(shù)的所有取法,對每一種取法,判斷其和是不是m的因子152多重循環(huán)例題2:取兩個數(shù)例題:給定正整數(shù)n和m,在1至n這n個數(shù)中,取出兩個不同的數(shù),使得其和是m的因子,問有多少種不同的取法。輸出這些取法。思路:窮舉1-n這n個數(shù)中取兩個數(shù)的所有取法,對每一種取法,判斷其和是不是m的因子第一個數(shù)取1,第二個數(shù)分別取2,3,n第一個數(shù)取2,第二個數(shù)分別取3,4,n第一個數(shù)取n-2,第二個數(shù)分別取n-1,n第一個數(shù)取n-1,第二個數(shù)取n153多重循環(huán)例題3例題:給定正整數(shù)n和m,在1至n這n個數(shù)中,取出兩個不同的數(shù),使得其和是m的因子,問有多少種不同的取法。輸出這些取法。total=0#取法總數(shù)

lst=input().split()

n,m=int(lst[0]),int(lst[1])

foriinrange(1,n):#取第一個數(shù)i,共n-1種取法

forjinrange(i+1,n+1):#第二個數(shù)要比第一個數(shù)大,以免取法重復

ifm%(i+j)==0:

print(i,j)

total+=1

print(total)

154918↙121518242736457多重循環(huán)例題3只會跳出當前那重循環(huán),不會跳出多重循環(huán)例題:給定正整數(shù)n和m,在1至n這n個數(shù)中,取出兩個不同的數(shù)x,y,使得x<y且x+y是m的因子。要求輸出的數(shù)對里面,x不重復,且y盡可能小。輸出這些取法。lst=input().split()n,m=int(lst[0]),int(lst[1])foriinrange(1,n):#取第一個數(shù)i,共n-1種取法

forjinrange(i+1,n+1):#第二個數(shù)要比第一個數(shù)大,以免取法重復

ifm%(i+j)==0:print(i,j)

break#后面的j不用再取了,直接換下一個i155多重循環(huán)中的break918↙12243645只會回到當前那重循環(huán)的開頭156多重循環(huán)中的continuewhile循環(huán)信息科學技術學院

郭煒荷蘭阿姆斯特丹庫肯霍夫公園while循環(huán)語句while

邏輯表達式exp

:

語句組1else:

語句組2判斷exp是否為真,若為真,轉2),若為假,轉3)執(zhí)行語句組1,回到1)執(zhí)行語句組2繼續(xù)往下執(zhí)行158while循環(huán)語句while

邏輯表達式exp

:

語句組1判斷exp是否為真,若為真,轉2),若為假,轉3)執(zhí)行語句組1,回到1)繼續(xù)往下執(zhí)行159while循環(huán)語句count=0whilecount<5:print(count,"小于5")count=count+1else:print(count,"大于或等于5")1600小于51小于52小于53小于54小于55大于或等于5while循環(huán)語句whileTrue:

ifexp:

break

不停執(zhí)行,直到exp為真時跳出循環(huán)161連續(xù)輸出26個字母i=0

whilei<26:

print(chr(ord("a")+i),end="")

i+=1

abcdefghijklmnopqrstuvwxyz字母的ASCII編碼是連續(xù)的162while循環(huán)語句示例1例題:輸入一個正整數(shù)n,從小到大輸出它的所有因子n=int(input())

x=1

whilex<=n:

ifn%x==0:

print(x,"",end="")

x+=1

15↙13515163while循環(huán)語句示例2例題:提示用戶輸入密碼,密碼不正確則提示不正確,

然后要求輸入,密碼正確則提示成功,然后結束。密碼是pkuwhile(input("請輸入密碼:")!="pku"): print("密碼不正確!")print("密碼輸入成功!") 請輸入密碼:bba↙密碼不正確!請輸入密碼:std↙密碼不正確!請輸入密碼:pku↙密碼輸入成功!164while循環(huán)語句示例2輸入三個整數(shù),求它們的最小公倍數(shù)解法:枚舉,一個個試s=input().split()x,y,z=int(s[0]),int(s[1]),int(s[2])n=1whileTrue:ifn%x==0andn%y==0andn%z==0:print(n)

breakn=n+1165while循環(huán)語句示例2輸入三個整數(shù),求它們的最小公倍數(shù)解法:枚舉,一個個試s=input().split()x,y,z=int(s[0]),int(s[1]),int(s[2])n=1whilenot(n%x==0andn%y==0andn%z==0): n+=1print(n)166while循環(huán)語句示例2輸入三個整數(shù),求它們的最小公倍數(shù),改進解法改進之處:即便是枚舉,沒必要試的,也不要去試,這樣速度才快s=input().split()x,y,z=int(s[0]),int(s[1]),int(s[2])n=m=max(x,y,z)#從三者里面最大的開始試whileTrue:ifn%x==0andn%y==0andn%z==0:print(n)break

n+=m#沒必要一個個試,而是每隔m個試一下(還可進一步改進)167異常處理信息科學技術學院

郭煒錫林郭勒草原平頂山用while語句和異常處理進行輸入在Openjudge做題時,有些題目,輸入數(shù)據(jù)沒有結束標志,也不告訴你有多少數(shù)據(jù)。例如:輸入若干行,每行若干整數(shù),求所有整數(shù)的最大值輸入樣例出樣例:87如何判斷輸入結束,就是需要解決的問題169用while語句和異常處理進行輸入輸入若干行,每行若干整數(shù),求所有整數(shù)的最大值s=input()lst=s.split()maxV=int(lst[0])try:#異常處理whileTrue:lst=s.split()forxinlst:maxV=max(maxV,int(x))s=input()#輸入數(shù)據(jù)已經(jīng)沒有了還執(zhí)行input,會產(chǎn)生異常except:pass #pass語句啥都不做print(maxV)15

236↙531↙34↙Ctrl+Z↙23170異常處理try:<語句組1>except:<語句組2>如果在<語句組1>執(zhí)行過程中出現(xiàn)了異常(runtimeerror),程序立即從語句組1中跳出,去執(zhí)行<語句組2>,然后再繼續(xù)往下執(zhí)行。如果<語句組1>執(zhí)行正常完,則程序繼續(xù)往下執(zhí)行,不會執(zhí)行<語句組2>常見的異常有:不合適的轉換,例如int("abc")int("23.34")float("abc")輸入已經(jīng)結束(已經(jīng)沒有輸入數(shù)據(jù)了)后,還執(zhí)行input()在openjudge做題常見除法除數(shù)為0整數(shù)和字符串相加5)列表下標越界(比如3個元素的列表用到了下標4)171異常處理try:n=int(input())print("hello")a=100/nprint(a)except:print("error")print("end")1725↙hello20.0end0↙helloerrorendabc↙errorend循環(huán)綜合例題信息科學技術學院

郭煒舊金山九曲花街例題1.求斐波那契數(shù)列第k項菲波那契數(shù)列是指這樣的數(shù)列:數(shù)列的第一個和第二個數(shù)都為1,接下來每個數(shù)都等于前面2個數(shù)之和。給出一個正整數(shù)k,要求菲波那契數(shù)列中第k個數(shù)是多少。

輸入:輸入一行,包含一個正整數(shù)k。(1<=k<=46)輸出:輸出一行,包含一個正整數(shù),表示菲波那契數(shù)列中第k個數(shù)的大小樣例輸入19樣例輸出4181174解法:迭代,不停地由已知推未知k=int(input())ifk==1ork==2:print(1)else:a1=a2=1foriinrange(k-2):a1,a2=a2,a1+a2print(a2)例題1.求斐波那契數(shù)列第k項例題2.求階乘的和給定正整數(shù)n,求不大于n的正整數(shù)的階乘的和(即求1!+2!+3!+...+n!)輸入輸入有一行,包含一個正整數(shù)n(1<n<12)。輸出輸出有一行:階乘的和。樣例輸入5樣例輸出153176例題2.求階乘的和解法1:n=int(input())s=0foriinrange(1,n+1):f=1#存放i階乘

forjinrange(1,i+1):f*=j#此操作一共做1+2+3+...+n次

s+=fprint(s)重復計算多。比如算3!時算了一遍1*2*3,算4!時又算一遍1*2*3改進:1*2*3只要算一遍就應該記下來,下次算4!直接用它177例題2.求階乘的和更快的解法2:n=int(input())s,f=0,1foriinrange(1,n+1):f*=is+=fprint(s)f值變化過程:1*2,1*2*3,1*2*3*4178例題3.輸入正整數(shù)n(n>=2),求不大于n的全部質數(shù)解法1:n=int(input())foriinrange(2,n+1):#每次判斷i是否是質數(shù)

ok=True #開始假設i是質數(shù)forkinrange(2,i):ifi%k==0:ok=Falsebreakifok:print(i)179例題3.輸入正整數(shù)n(n>=2),求不大于n的全部質數(shù)解法1:n=int(input())foriinrange(2,n+1):#每次判斷i是否是質數(shù)

ok=True #開始假設i是質數(shù)forkinrange(2,i):ifi%k==0:ok=Falsebreakifok:print(i)#此解法做了沒必要的嘗試,偶數(shù),以及k大于i的平方根后就不必再試180例題3.輸入正整數(shù)n(n>=2),求不大于n的全部質數(shù)改進的解法2:n=int(input())print(2)foriinrange(3,n+1,2):#步長2,只判斷奇數(shù)

ok=Trueforkinrange(3,i,2):ifi%k==0:ok=Falsebreakifk*k>i:#大于根號i的數(shù)就不用試了breakifok:print(i)181信息科學技術學院182

實用Python程序設計函數(shù)和遞歸信息科學技術學院183函數(shù)信息科學技術學

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論