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

下載本文檔

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

文檔簡介

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

微博:/guoweiofpku

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

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

"+site)else:print("Nobreak")print("Done!")14site: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)結(jié)束時會執(zhí)行,但是如果break了,則不會執(zhí)行15site:Baidusite:GoogleOKDone!continue語句forletterin'Taobao':

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

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

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

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

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

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

forxinrange(1,n+1):

ifn%x==0:

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

n=int(input())

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

ifn%x==0:

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

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

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

foriinrange(n):

.....

forjinrange(m):

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

28多重循環(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ù)的和29樣例輸入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)30total=0foriinrange(2):forjinrange(1,3):total+=i+jprint(total)輸出結(jié)果是:681012ACD提交B單選題1分此題未設(shè)置答案,請點擊右側(cè)設(shè)置按鈕total=0foriinrange(2):forjinrange(1,3):total+=i+jprint(total)輸出結(jié)果是:681012ABCD提交單選題1分例題:給定正整數(shù)n和m,在1至n這n個數(shù)中,取出兩個不同的數(shù),使得其和是m的因子,問有多少種不同的取法。輸出這些取法。33多重循環(huán)例題2:取兩個數(shù)例題:給定正整數(shù)n和m,在1至n這n個數(shù)中,取出兩個不同的數(shù),使得其和是m的因子,問有多少種不同的取法。輸出這些取法。思路:窮舉1-n這n個數(shù)中取兩個數(shù)的所有取法,對每一種取法,判斷其和是不是m的因子34多重循環(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ù)取n35多重循環(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ù)大,以免取法重復(fù)

ifm%(i+j)==0:

print(i,j)

total+=1

print(total)

36918↙121518242736457多重循環(huán)例題3只會跳出當(dāng)前那重循環(huán),不會跳出多重循環(huán)例題:給定正整數(shù)n和m,在1至n這n個數(shù)中,取出兩個不同的數(shù)x,y,使得x<y且x+y是m的因子。要求輸出的數(shù)對里面,x不重復(fù),且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ù)大,以免取法重復(fù)

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

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

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

邏輯表達式exp

:

語句組1else:

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

邏輯表達式exp

:

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

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

whilei<26:

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

i+=1

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

x=1

whilex<=n:

ifn%x==0:

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

x+=1

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

然后要求輸入,密碼正確則提示成功,然后結(jié)束。密碼是pkuwhile(input("請輸入密碼:")!="pku"): print("密碼不正確!")print("密碼輸入成功!") 請輸入密碼:bba↙密碼不正確!請輸入密碼:std↙密碼不正確!請輸入密碼:pku↙密碼輸入成功!46while循環(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+147while循環(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)48while循環(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個試一下(還可進一步改進)49異常處理信息科學(xué)技術(shù)學(xué)院

郭煒錫林郭勒草原平頂山用while語句和異常處理進行輸入在Openjudge做題時,有些題目,輸入數(shù)據(jù)沒有結(jié)束標(biāo)志,也不告訴你有多少數(shù)據(jù)。例如:輸入若干行,每行若干整數(shù),求所有整數(shù)的最大值輸入樣例出樣例:87如何判斷輸入結(jié)束,就是需要解決的問題51用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↙2352異常處理try:<語句組1>except:<語句組2>如果在<語句組1>執(zhí)行過程中出現(xiàn)了異常(runtimeerror),程序立即從語句組1中跳出,去執(zhí)行<語句組2>,然后再繼續(xù)往下執(zhí)行。如果<語句組1>執(zhí)行正常完,則程序繼續(xù)往下執(zhí)行,不會執(zhí)行<語句組2>常見的異常有:不合適的轉(zhuǎn)換,例如int("abc")int("23.34")float("abc")輸入已經(jīng)結(jié)束(已經(jīng)沒有輸入數(shù)據(jù)了)后,還執(zhí)行input()在openjudge做題常見除法除數(shù)為0整數(shù)和字符串相加5)列表下標(biāo)越界(比如3個元素的列表用到了下標(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項菲波那契數(shù)列是指這樣的數(shù)列:數(shù)列的第一個和第二個數(shù)都為1,接下來每個數(shù)都等于前面2個數(shù)之和。給出一個正整數(shù)k,要求菲波那契數(shù)列中第k個數(shù)是多少。

輸入:輸入一行,包含一個正整數(shù)k。(1<=k<=46)輸出:輸出一行,包含一個正整數(shù),表示菲波那契數(shù)列中第k個數(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項例題2.求階乘的和給定正整數(shù)n,求不大于n的正整數(shù)的階乘的和(即求1!+2!+3!+...+n!)輸入輸入有一行,包含一個正整數(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ù)計算多。比如算3!時算了一遍1*2*3,算4!時又算一遍1*2*3改進:1*2*3只要算一遍就應(yīng)該記下來,下次算4

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論