




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 湖北省華師一附中2026屆化學(xué)高三第一學(xué)期期末綜合測試試題含解析
- 心肺復(fù)蘇技術(shù)和除顫技術(shù)
- 2024學(xué)年廣州市七年級語文上學(xué)期期中考試卷附答案解析
- 腦卒中科普講解
- 牛蹄解剖生理講解
- 橋梁施工安全技術(shù)交底
- 汽車試制會議匯報
- 石膏模型灌注技術(shù)
- 細胞生態(tài)關(guān)系圖解
- 虛擬化技術(shù)培訓(xùn)
- 精益管理課件
- 梅毒患者護理措施
- 數(shù)字經(jīng)濟產(chǎn)業(yè)組織-洞察及研究
- 2025年中國美甲貼片行業(yè)市場全景分析及前景機遇研判報告
- 租賃汽車安全管理制度
- mcn公司管理制度
- 兒童腹痛的課件
- 2025年全國新高考英語II卷試題解析及復(fù)習(xí)備考策略(課件)
- 食品廠留樣管理制度
- 2025年上海市中考語文真題試卷含答案(回憶版)
- T/ZJP 1-2024產(chǎn)業(yè)組織專利池建設(shè)和管理指引
評論
0/150
提交評論