Python程序設(shè)計(jì)基礎(chǔ)及實(shí)踐(慕課版 第2版)課件 3. 循環(huán)語(yǔ)句_第1頁(yè)
Python程序設(shè)計(jì)基礎(chǔ)及實(shí)踐(慕課版 第2版)課件 3. 循環(huán)語(yǔ)句_第2頁(yè)
Python程序設(shè)計(jì)基礎(chǔ)及實(shí)踐(慕課版 第2版)課件 3. 循環(huán)語(yǔ)句_第3頁(yè)
Python程序設(shè)計(jì)基礎(chǔ)及實(shí)踐(慕課版 第2版)課件 3. 循環(huán)語(yǔ)句_第4頁(yè)
Python程序設(shè)計(jì)基礎(chǔ)及實(shí)踐(慕課版 第2版)課件 3. 循環(huán)語(yǔ)句_第5頁(yè)
已閱讀5頁(yè),還剩58頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

郭煒信息科學(xué)技術(shù)學(xué)院1

微博:/guoweiofpku

學(xué)會(huì)程序和算法,走遍天下都不怕!實(shí)用Python程序設(shè)計(jì)循環(huán)語(yǔ)句信息科學(xué)技術(shù)學(xué)院2for循環(huán)語(yǔ)句信息科學(xué)技術(shù)學(xué)院

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

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

break #跳出循環(huán)

print("site:

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

ifletter=='o':#字母為o時(shí)跳過(guò)輸出

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

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

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

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

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

forxinrange(1,n+1):

ifn%x==0:

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

n=int(input())

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

ifn%x==0:

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

15↙1553126多重循環(huán)信息科學(xué)技術(shù)學(xué)院

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

foriinrange(n):

.....

forjinrange(m):

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

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

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

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

lst=input().split()

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

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

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

ifm%(i+j)==0:

print(i,j)

total+=1

print(total)

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

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

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

break#后面的j不用再取了,直接換下一個(gè)i37多重循環(huán)中的break918↙12243645只會(huì)回到當(dāng)前那重循環(huán)的開(kāi)頭38多重循環(huán)中的continuewhile循環(huán)信息科學(xué)技術(shù)學(xué)院

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

邏輯表達(dá)式exp

:

語(yǔ)句組1else:

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

邏輯表達(dá)式exp

:

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

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

whilei<26:

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

i+=1

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

x=1

whilex<=n:

ifn%x==0:

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

x+=1

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

然后要求輸入,密碼正確則提示成功,然后結(jié)束。密碼是pkuwhile(input("請(qǐng)輸入密碼:")!="pku"): print("密碼不正確!")print("密碼輸入成功!") 請(qǐng)輸入密碼:bba↙密碼不正確!請(qǐng)輸入密碼:std↙密碼不正確!請(qǐng)輸入密碼:pku↙密碼輸入成功!46while循環(huán)語(yǔ)句示例2輸入三個(gè)整數(shù),求它們的最小公倍數(shù)解法:枚舉,一個(gè)個(gè)試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+147while循環(huán)語(yǔ)句示例2輸入三個(gè)整數(shù),求它們的最小公倍數(shù)解法:枚舉,一個(gè)個(gè)試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)48while循環(huán)語(yǔ)句示例2輸入三個(gè)整數(shù),求它們的最小公倍數(shù),改進(jìn)解法改進(jìn)之處:即便是枚舉,沒(méi)必要試的,也不要去試,這樣速度才快s=input().split()x,y,z=int(s[0]),int(s[1]),int(s[2])n=m=max(x,y,z)#從三者里面最大的開(kāi)始試whileTrue:ifn%x==0andn%y==0andn%z==0:print(n)break

n+=m#沒(méi)必要一個(gè)個(gè)試,而是每隔m個(gè)試一下(還可進(jìn)一步改進(jìn))49異常處理信息科學(xué)技術(shù)學(xué)院

郭煒錫林郭勒草原平頂山用while語(yǔ)句和異常處理進(jìn)行輸入在Openjudge做題時(shí),有些題目,輸入數(shù)據(jù)沒(méi)有結(jié)束標(biāo)志,也不告訴你有多少數(shù)據(jù)。例如:輸入若干行,每行若干整數(shù),求所有整數(shù)的最大值輸入樣例出樣例:87如何判斷輸入結(jié)束,就是需要解決的問(wèn)題51用while語(yǔ)句和異常處理進(jìn)行輸入輸入若干行,每行若干整數(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)沒(méi)有了還執(zhí)行input,會(huì)產(chǎn)生異常except:pass #pass語(yǔ)句啥都不做print(maxV)15

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

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

輸入:輸入一行,包含一個(gè)正整數(shù)k。(1<=k<=46)輸出:輸出一行,包含一個(gè)正整數(shù),表示菲波那契數(shù)列中第k個(gè)數(shù)的大小樣例輸入19樣例輸出418156解法:迭代,不停地由已知推未知k=int(input())ifk==1ork==2:print(1)else:a1=a2=1foriinrange(k-2):a1,a2=a2,a1+a2print(a2)例題1.求斐波那契數(shù)列第k項(xiàng)例題2.求階乘的和給定正整數(shù)n,求不大于n的正整數(shù)的階乘的和(即求1!+2!+3!+...+n!)輸入輸入有一行,包含一個(gè)正整數(shù)n(1<n<12)。輸出輸出有一行:階乘的和。樣例輸入5樣例輸出15358例題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)重復(fù)計(jì)算多。比如算3!時(shí)算了一遍1*2*3,算4!時(shí)又算一遍1*2*3改進(jìn):1*2*3只要算一遍就應(yīng)該記下來(lái),下次算4

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論