Python程序設計基礎 課件 第4章 控制結構_第1頁
Python程序設計基礎 課件 第4章 控制結構_第2頁
Python程序設計基礎 課件 第4章 控制結構_第3頁
Python程序設計基礎 課件 第4章 控制結構_第4頁
Python程序設計基礎 課件 第4章 控制結構_第5頁
已閱讀5頁,還剩96頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第4章

控制結構python程序設計基礎教程4.1概述三種基本控制結構:順序結構選擇結構:分支,條件循環(huán)結構4.2選擇結構if條件語句if單分支if雙分支if多分支條件表達式4.2.1if單分支if單分支語句格式如下:if<條件表達式>: <語句組A>示例:根據成績返回是否通過考試score=int(input("請輸入分數:"))ifscore>=60:print("您的考試成績?yōu)閧},恭喜通過!".format(score))#結果:請輸入分數:65您的考試成績?yōu)?5,恭喜通過!4.2選擇結構4.2.2if雙分支

if雙分支語句格式如下:if<條件表達式>: <語句組A>else: <語句組B>4.2選擇結構4.2.2if雙分支示例:改進的根據成績返回是否通過的例子,若大于或等于60分,則返回分數并顯示通過,否則返回分數并實現未通過。score=int(input("請輸入分數:"))ifscore>=60:print("您的考試成績?yōu)閧},恭喜通過!".format(score))else:print("您的考試成績?yōu)閧},未通過,繼續(xù)努力!".format(score))#結果:請輸入分數:65您的考試成績?yōu)?5,恭喜通過!請輸入分數:45您的考試成績?yōu)?5,未通過,繼續(xù)努力!4.2選擇結構示例:求兩個數的較大值,并輸出a,b=eval(input("a,b="))ifa>=b:max=aelse:max=bprint("a={},b={}".format(a,b))print('max={}'.format(max))#結果:a,b=34.5,89.7a=34.5,b=89.7max=89.7a,b=45,21a=45,b=21max=454.2.2if雙分支練習4.2選擇結構if多分支語句格式如下:if<條件表達式1>: <語句組1>elif<條件表達式2>: <語句組2>……elif<條件表達式n>: <語句組n>else: <語句組x>注意:if語句中的各分支,只會執(zhí)行其中的一組4.2.3if多分支4.2選擇結構示例:再次改進的根據成績返回結果的例子,若大于或等于90分,則返回分數并顯示“優(yōu)秀”,若小于90分,但大于等于60分,則返回分數并顯示“通過”;若低于60分,則返回分數并顯示“未通過”。score=int(input("請輸入分數:"))ifscore>=90:print("您的考試成績?yōu)閧},優(yōu)秀!".format(score))elifscore>=60:print("您的考試成績?yōu)閧},通過!".format(score))else:print("您的考試成績?yōu)閧},未通過!".format(score))4.2.3if多分支4.2選擇結構score=int(input("請輸入分數:"))ifscore>=90:print("您的考試成績?yōu)閧},優(yōu)秀!".format(score))elifscore>=60:print("您的考試成績?yōu)閧},通過!".format(score))else:print("您的考試成績?yōu)閧},未通過!".format(score))#結果:請輸入分數:98您的考試成績?yōu)?8,優(yōu)秀!請輸入分數:75您的考試成績?yōu)?5,通過!請輸入分數:50您的考試成績?yōu)?0,未通過!#結果:請輸入分數:200您的考試成績?yōu)?00,優(yōu)秀!請輸入分數:-50您的考試成績?yōu)?50,未通過!問題:缺邏輯示例存在的問題4.2選擇結構score=int(input("請輸入分數(0-100):"))if0<=score<=100:ifscore>=90:print("您的考試成績?yōu)閧},優(yōu)秀!".format(score))elifscore>=80:print("您的考試成績?yōu)閧},良好!".format(score))elifscore>=70:print("您的考試成績?yōu)閧},中等!".format(score))elifscore>=60:print("您的考試成績?yōu)閧},及格!".format(score))else:print("您的考試成績?yōu)閧},不及格!".format(score))else:print("成績?yōu)閧},無效!".format(score))#結果:請輸入分數(0-100):198成績?yōu)?98,無效!請輸入分數(0-100):75您的考試成績?yōu)?5,中等!請輸入分數(0-100):-50成績?yōu)?50,無效!4.2.3示例優(yōu)化4.2選擇結構條件表達式語句格式如下:<True部分>if<條件表達式>else<False部分>示例:判斷x的奇偶,將結果記錄在result中。x=int(input(“請輸入一個整數:"))result="偶數"ifx%2==0else"奇數“print("{}是{}".format(x,result))條件句等價于:ifx%2==0: result="偶數"else: result="奇數"#結果:>>>請輸入一個整數:3434是偶數>>>請輸入一個整數:2727是奇數4.2.4條件表達式4.2選擇結構4.3循環(huán)結構for循環(huán):遍歷循環(huán)while循環(huán):條件循環(huán)4.3循環(huán)結構for循環(huán):遍歷循環(huán)while循環(huán):條件循環(huán)4.3.1循環(huán)結構:for循環(huán)1for循環(huán)語句格式1如下:for<元素>in<數據集>: <循環(huán)體>示例:求自然數1~100的和sum=0foriinrange(1,101):sum+=i#sum=sum+iprint("1+2+3+…+100={}".format(sum))#結果:1+2+3+…+100=5050方法二:print("1+2+3+…+100={}".format(sum(range(1,101))))4.3循環(huán)結構示例1:快速生成數據序列1>>>list1=[iforiinrange(1,5,2)][1,3]示例1相當于:list1=[]foriinrange(1,5,2):list1+=[i]print(list1)示例2:快速生成數據序列>>>[i**2foriinrange(10)ifi%2==0][0,4,16,36,64]示例2相當于:list1=[]foriinrange(10):ifi%2==0:list1+=[i**2]print(list1)4.3循環(huán)結構(1)for循環(huán)的應用1示例:刪除所有的數字字符s=input('輸入一個字符串:')str=''.join([iforiinsifnoti.isdigit()])print(str)一個小變化:s=input('輸入一個字符串:')str='‘.join([iforiinsifnoti.isdigit()])print(str)一個小變化:s=input('輸入一個字符串:')str=‘*'.join([iforiinsifnoti.isdigit()])print(str)4.3循環(huán)結構(2)for循環(huán)的應用2示例:統(tǒng)計字符串的單詞及其出現次數s=input("輸入一個字符串:")list1=list(s.split(''))dict1=dict()##dict1={}forwordinlist1:dict1[word]=dict1.get(word,0)+1print(dict1)4.3循環(huán)結構(2)for循環(huán)的應用2示例:將一個字符串中的大寫字母換小寫,小寫字母換大寫,其它字符不變。##大小寫字母互換.方法二s=input('輸入一個字符串:')st=s.swapcase()##大小寫字母互換print(st)

##大小寫字母互換.方法一s=input('輸入一個字符串:')s=list(s)#字符串不可更改,先轉成列表類型foriinrange(len(s)):

ifs[i].isupper():s[i]=s[i].lower()elifs[i].islower():s[i]=s[i].upper()s=''.join(s)#變回字符串print(s)#結果:輸入一個字符串:This123atest!tHIS123ATEST!輸入一個字符串:Hello+World!hELLO+wORLD!4.3循環(huán)結構(3)for循環(huán)示例-大小寫轉換for循環(huán)語句格式2:for<元素>in<數據集>: <循環(huán)體>else: <語句組>分析:for循環(huán)條件滿足時,執(zhí)行循環(huán)體不滿足時,執(zhí)行else后的語句組,并退出循環(huán)4.3.2循環(huán)結構:for循環(huán)24.3循環(huán)結構示例:給定的范圍內的數據查找startnum=int(input("請輸入查找數據的起始值:"))endnum=int(input("請輸入查找數據的終止值:"))foriinrange(startnum,endnum+1):ifi%7==0andi%5==0:print("找到數值{}符合要求".format(i))else:print(“查找完畢!")請輸入查找數據的起始值:100請輸入查找數據的終止值:200找到數值105符合要求找到數值140符合要求找到數值175符合要求查找完畢(1)for循環(huán)2應用4.3循環(huán)結構示例:打印楊輝三角的前rows行內容(2)for循環(huán)2應用-楊輝三角4.3循環(huán)結構rows=int(input("請輸入需要顯示的楊輝三角的行數:"))rowlist=[1,1]foriinrange(1,rows+1):nextrowlist=[1]print(""*2*(rows-i),end="")forjinrange(len(rowlist)-1):print("%4s"%rowlist[j],end="")nextrowlist+=[rowlist[j]+rowlist[j+1]]print("%4s"%rowlist[-1])nextrowlist+=[1]rowlist=nextrowlist(2)for循環(huán)2應用-楊輝三角4.3循環(huán)結構while循環(huán)語句格式1:while<條件表達式>: <循環(huán)體>示例:求自然數1~100的和sum=0i=1whilei<=100:sum+=ii+=1print("1+2+3+…+100={}".format(sum))4.3.3while循環(huán)4.3循環(huán)結構示例:求自然數1+3+5+7+…+99的和sum=0i=1whilei<=100:sum+=ii+=2print(“while:100以內奇數的和={}".format(sum))sum=0foriinrange(1,100,2):sum+=iprint("for:100以內奇數的和={}".format(sum))比較:While是條件循環(huán),無需知道循環(huán)次數For是遍歷循環(huán),要求明確循環(huán)次數(1)while循環(huán)和for循環(huán)對比4.3循環(huán)結構示例:2016年國家總人口為13.8億,增長率為5.9‰,現欲估算多少年后國家總人口達到20億?population=13.8years=0whilepopulation<20:years+=1population*=1+0.0059##p=p*(1+0.0059)print("{}年后,國家總人口達到20億".format(years))未知循環(huán)次數(重復執(zhí)行次數)通常用while循環(huán)#結果:64年后,國家總人口達到20億(2)循環(huán)結構的應用-人口問題4.3循環(huán)結構num=int(input('輸入一個整數:'))vernum=0#逆序數=0whilenum:vernum=vernum*10+num%10#4434324321num//=10#1231210print(‘逆序數=%d’%vernum)#輸出逆序數(((0*10+4)*10+3)*10+2)*10+1示例:構造一個數的逆序數。如1234->4321(2)循環(huán)結構的應用-逆序數4.3循環(huán)結構while循環(huán)語句格式2如下:while<條件表達式>: <循環(huán)體>else: <語句組>else分句的使用方法與for類似循環(huán)條件滿足時,執(zhí)行循環(huán)體;不滿足時,執(zhí)行else后的語句組,退出循環(huán)4.3.4while…else循環(huán)4.3循環(huán)結構一個類似的示例:假設有一足夠大的紙,其厚度為0.15mm,編程計算對折多少次后其厚度能超過珠穆朗瑪峰的高度(8848.43m)。high=0.00015n=0whilehigh<8848.43:n+=1high*=2else:print("計算結束!")print("對折{}次后,紙的厚度能超過珠穆朗瑪峰的高度".format(n))for結構實現的循環(huán),while結構都能夠實現,更加靈活計算結束!對折26次后,紙的厚度能超過珠穆朗瑪峰的高度(1)循環(huán)結構的應用-while…else循環(huán)應用4.3循環(huán)結構問題:條件表達式設為True時,將陷入死循環(huán)whileTrue:year=int(input("請輸入需要查詢的年份:"))if(year%100!=0andyear%4==0)oryear%400==0:print("{}年是閏年".format(year))else:print("{}年不是閏年".format(year))示例:判斷一個年份是否是閏年閏年判斷的或條件:年份值能夠被4整除,不能被100整除;年份值能夠被400整除。請輸入需要查詢的年份:20222022年不是閏年請輸入需要查詢的年份:20082008年是閏年請輸入需要查詢的年份:問題:死循環(huán),怎么辦?(1)循環(huán)結構的應用-while循環(huán)應用-死循環(huán)問題4.3循環(huán)結構break語句continue語句pass語句4.3.5其他循環(huán)控制語句4.3循環(huán)結構break語句循環(huán)體內的break語句可以中止并跳出本級循環(huán)。for循環(huán)和while循環(huán)均可以使用該語句。(1)其他循環(huán)控制語句:break語句4.3循環(huán)結構示例:修改上例判斷閏年的例子,管理員輸入0退出循環(huán)whileTrue:year=int(input(“請輸入需要查詢的年份(0則退出):"))

ifyear==0:##輸入0時退出,否則繼續(xù)循環(huán)

breakif(year%100!=0andyear%4==0)oryear%400==0:print("{}年是閏年".format(year))else:print("{}年不是閏年".format(year))請輸入需要查詢的年份(0則退出):20222022年不是閏年請輸入需要查詢的年份(0則退出):20082008年是閏年請輸入需要查詢的年份(0則退出):04.3循環(huán)結構break語句應用示例:查找給定的范圍內滿足條件的第一個數startnum=int(input("請輸入查找數據的起始值:"))endnum=int(input("請輸入查找數據的終止值:"))foriinrange(startnum,endnum+1):ifi%7==0andi%5==0:print("找到數值{}符合要求".format(i))breakelse:print("該范圍內找不到符合要求的數")4.3循環(huán)結構break語句應用continue語句循環(huán)體內的continue語句可以中止此輪循環(huán),直接進入下一輪循環(huán)。for循環(huán)和while循環(huán)均可以使用該語句。(2)continue語句4.3循環(huán)結構continue語句與break語句對比foriinrange(1,10):ifi%2==0:continueprint(i)foriinrange(1,10):ifi%2==0:breakprint(i)#結果:13579#結果:14.3循環(huán)結構continue語句應用示例:continue語句與break語句對比forsin"蘇錫常":ifs=="錫":continueprint(s,end="")

forsin"蘇錫常":ifs=="錫":breakprint(s,end="")

#結果:蘇常#結果:蘇continue應用4.3循環(huán)結構pass語句編寫一個規(guī)模稍大的應用程序時,通常會用pass語句作為代碼的占位。在異常處理時,也經常使用pass語句。forletterin'Python':ifletter=='h':passprint('Thisispassblock')print('CurrentLetter:',letter)print("Goodbye!")#結果CurrentLetter:PCurrentLetter:yCurrentLetter:tThisispassblockCurrentLetter:hCurrentLetter:oCurrentLetter:nGoodbye!示例:(3)其他循環(huán)控制語句:pass語句4.3循環(huán)結構嵌套循環(huán)的工作機制九九乘法表查找算法:順序查找,二分查找排序算法:交換排序,冒泡排序素數問題進制轉換問題數據分塊詞匯統(tǒng)計數值統(tǒng)計求最大最小值算法實例4.4綜合應用循環(huán)嵌套問題在一個循環(huán)體內又包含了循環(huán)結構,這種結構稱為循環(huán)嵌套。循環(huán)嵌套對while循環(huán)和for循環(huán)語句都適用。如在while循環(huán)中嵌入for循環(huán),也可在for循環(huán)中嵌入while循環(huán)。循環(huán)嵌套4.4綜合應用foriinrange(0,3):#i:0,1,2forjinrange(0,2):#j:0,1print('i=%d,j=%d'%(i,j))print()嵌套循環(huán)的工作機制4.4綜合應用(1)算法實例-打印九九乘法表4.4綜合應用foriinrange(1,10):forjinrange(1,10):print('%d*%d=%d\t'%(i,j,i*j),end='')print()問題:1.應該是個下三角2.乘數9*1=91*9=9(1)算法實例-打印九九乘法表4.4綜合應用foriinrange(1,10):forjinrange(1,i+1):print('%d*%d=%d\t'%(j,i,i*j),end='')print()示例:打印九九乘法表-改進

4.4綜合應用已知vec=[[1,2],[3,4]],則表達式[colforrowinvecforcolinrow]的值是?示例:嵌套循環(huán)1列表生成式分析:vec=[[1,2],[3,4]]list=[]forrowinvec:#[1,2][3,4]forcolinrow: list+=[col]#1,2,3,4#list.append(col)print(list)已知vec=[[1,2],[3,4]],則表達式[[row[i]forrowinvec]foriinrange(len(vec[0]))]的值是?示例:嵌套循環(huán)2分析:vec=[[1,2],[3,4]]list=[]foriinrange(len(vec[0])):#i:0,1forrowinvec:#row:0,1list+=[row[i]]#[1,3],[2,4]print(list)已知vec=[[1,2],[3,4]],則表達式[[row[i]forrowinvec]foriinrange(len(vec[0]))]的值是?示例:嵌套循環(huán)2分析:vec=[[1,2],[3,4]]list=[]foriinrange(len(vec[0])):#i:0,1st=[]forrowinvec:#row:0,1 st+=[row[i]]#st.append(row[i])#[1,3],[2,4]list+=st#list.append(st)print(list)查找算法順序查找:將序列seq中的元素依次與x比較,若相等則查找成功,返回該元素下標;否則返回查找失敗對應信息。二分法查找:即折半查找查找序列中的數值是有序排列的(2)算法實例:查找算法4.4綜合應用順序查找:將序列seq中的元素依次與x比較,若相等則查找成功,返回該元素下標;否則返回查找失敗對應信息。(2)算法實例:查找算法4.4綜合應用順序查找:將序列seq中的元素依次與x比較,若相等則查找成功,返回該元素下標;否則返回查找失敗對應信息。importrandom##生成隨機序列searchseqsearchseq=[]foriinrange(20):#i:0..19searchseq+=[random.randint(1,100)]#1..100print("查找序列:{}".format(searchseq))(2)算法實例:查找算法4.4綜合應用順序查找##在序列searchseq中查找x的位置x=int(input("請輸入待查找數值:"))foriinrange(len(searchseq)):ifsearchseq[i]==x:print("{}在查找序列中的下標為{}".format(x,i))breakelse:print("查無此數!")(2)算法實例:查找算法4.4綜合應用順序查找#結果:查找序列:[51,31,15,24,74,85,27,58,46,84,51,32,19,71,63,13,17,85,28,75]請輸入待查找數值:2424在查找序列中的下標為3查找序列:[91,95,97,69,46,15,68,36,86,30,11,4,86,35,46,24,28,52,98,68]請輸入待查找數值:1查無此數?。?)算法實例:查找算法4.4綜合應用二分法查找:折半查找

以在升序序列seq中,按折半法來查找給定值x所在的位置。思路:先將x與升序序列seq的中間元素進行比較,若x與中間元素相等,直接返回當前元素位置;若x比中間元素大,說明x若存在于序列中,則一定在序列的后半部分;若x比中間元素小,說明x若存在于序列中,則一定在序列的前半部分。此時,若x與中間元素相等,則已返回結果,完成操作;若不等,也已經將查找范圍縮小了一半,在其中用同樣的方法進行查找。重復上述操作直到找到返回位置或給出查找失敗的對應信息。(2)算法實例:查找算法4.4綜合應用二分法(折半)查找二分法(折半)查找importrandom##生成隨機序列searchseqsearchseq=[]foriinrange(10):searchseq+=[random.randint(i*5,i*5+4)]print("查找序列:{}".format(searchseq))##在序列searchseq中查找x的位置x=int(input("請輸入待查找數值:"))left=0right=len(searchseq)-1(2)算法實例:查找算法4.4綜合應用whileleft<=right:mid=(left+right)//2##顯示查找過程中的下標位置

print("left:{}right:{}mid:{}".format(left,right,mid))ifx==searchseq[mid]:print("{}在查找序列中的下標為{}".format(x,mid))breakelifx>searchseq[mid]:left=mid+1else:right=mid-1else:##顯示找不到時的下標位置

print("left:{}right:{}".format(left,right))print("查無此數!")折半查找運行結果1:查找序列:[3,6,14,18,20,29,30,39,44,47]請輸入待查找數值:44left:0right:9mid:4left:5right:9mid:7left:8right:9mid:844在查找序列中的下標為8運行結果2:查找序列:[1,7,10,17,24,29,32,39,40,45]請輸入待查找數值:20left:0right:9mid:4left:0right:3mid:1left:2right:3mid:2left:3right:3mid:3left:4right:3查無此數!排序設排序目標是升序選擇排序:每一輪比較選擇,找到最小值和目標位置的值交換。冒泡排序:交換排序方法,兩兩比較,逆序則交換。(3)算法實例:排序算法4.4綜合應用選擇排序:通過每一輪的比較,找到對應位置排序后應該存放的元素與目前存放的元素進行交換。

算法效率分析:比較次數與初始序列內元素的排列情況無關。設初始序列有n個元素,則共需進行n(n-1)/2次元素比較。(3)算法實例:選擇排序算法4.4綜合應用importrandom##生成隨機序列sortseqsortseq=[]foriinrange(5):sortseq+=[random.randint(10,99)]print("初始序列:{}".format(sortseq))(3)算法實例:選擇排序算法4.4綜合應用排序##對序列sortseq選擇法升序排序foriinrange(4):#i:0..3min=i#i是基準位置forjinrange(i+1,5):#j:i+1..4ifsortseq[j]<sortseq[min]:min=j#min記錄最小值的位置ifmin!=i:sortseq[min],sortseq[i]=sortseq[i],sortseq[min]print("排序后:{}".format(sortseq))運行結果:初始序列:[45,40,32,90,14]排序后:[14,32,40,45,90](3)算法實例:選擇排序算法4.4綜合應用若需打印每一輪循環(huán)的結果,只需在內層循環(huán)的最后添加一句代碼: print("第{}輪:{}".format(i+1,sortseq))執(zhí)行結果如下:

初始序列:[41,70,52,90,10]第1輪:[10,70,52,90,41]第2輪:[10,41,52,90,70]第3輪:[10,41,52,90,70]第4輪:[10,41,52,70,90]排序后:[10,41,52,70,90](3)算法實例:選擇排序算法4.4綜合應用冒泡排序:通過元素的兩兩比較及交換來完成排序。(3)算法實例:冒泡排序算法4.4綜合應用importrandom##生成隨機序列sortseqsortseq=[]foriinrange(5):sortseq+=[random.randint(10,99)]print("初始序列:{}".format(sortseq))(3)算法實例:冒泡排序算法4.4綜合應用##對序列sortseq冒泡法升序排序foriinrange(4,0,-1):forjinrange(i):ifsortseq[j]>sortseq[j+1]:sortseq[j],sortseq[j+1]=sortseq[j+1],sortseq[j]##打印每一輪排序結果print("第{}輪:{}".format(5-i,sortseq)) print("排序后:{}".format(sortseq))(3)算法實例:冒泡排序算法4.4綜合應用運行結果:初始序列:[74,42,43,75,55]第1輪:[42,43,74,55,75]第2輪:[42,43,55,74,75]第3輪:[42,43,55,74,75]第4輪:[42,43,55,74,75]排序后:[42,43,55,74,75]

由運行結果可以看出排序過程中,排好序還要繼續(xù)進行下一輪,是否可以將該程序改進呢?(3)算法實例:冒泡排序算法4.4綜合應用##對序列sortseq進行升序排序(改進后的冒泡排序)foriinrange(4,0,-1):flag=Falseforjinrange(i):ifsortseq[j]>sortseq[j+1]:sortseq[j],sortseq[j+1]=sortseq[j+1],sortseq[j]flag=Trueprint("第{}輪:{}".format(5-i,sortseq))ifnotflag:breakprint("排序后:{}".format(sortseq))(3)算法實例:冒泡排序算法-優(yōu)化4.4綜合應用運行結果:初始序列:[97,88,12,83,89]第1輪:[88,12,83,89,97]第2輪:[12,83,88,89,97]第3輪:[12,83,88,89,97]排序后:[12,83,88,89,97]算法效率分析:冒泡排序算法的執(zhí)行與序列元素的原次序有很大關系。若原序列是已經排好序的,則通過冒泡排序只要通過一輪比較即可確定出結果。(3)算法實例:冒泡排序算法-優(yōu)化4.4綜合應用排序算法說明排序計算機經典的排序算法中還有插入排序、希爾排序、堆排序、歸并排序、快速排序等等,其中堆排序、歸并排序和快速排序相對性能較好,排序速度較快。4.4綜合應用素數問題:質數素數即符合以下條件的數:除了1和自身,沒有其他因子;該數是大于1的自然數。num=int(input('輸入一個整數:'))foriinrange(2,num):ifnum%i==0:print(num,"不是素數")breakelse:print(num,"是素數")num=int(input('輸入一個整數:'))i=2while(i<num):ifnum%i==0:print(num,"不是素數")breaki+=1else:print(num,"是素數")示例1:設計一算法,判斷一個數是不是素數。(4)算法實例-素數問題4.4綜合應用示例2:設計一算法,找出100以內所有的素數。primelist=[]foriinrange(2,101):forjinrange(2,i):ifi%j==0:breakelse:primelist+=[i]print(primelist)#結果:[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97](4)算法實例-素數問題4.4綜合應用示例3:鍵盤輸入兩個大于0的整數,按要求輸出這兩個整數之間(不包括這兩個整數)的所有素數。n1,n2=eval(input('輸入區(qū)間的首尾值:'))fornuminrange(n1+1,n2):foriinrange(2,num):if(num%i)==0:breakelse:print(num,end='')#結果:輸入區(qū)間的首尾值:100,150101103107109113127131137139149(4)

算法實例-素數問題4.4綜合應用print('100-999中的最大的3個素數是:')count=3forninrange(999,100,-1):foriinrange(2,n):ifn%i==0:breakifi==n-1:print(n,end='')count-=1ifnotcount:break擴展.求100-999中最大的3個素數。算法設計分析:Count的巧妙設計(4)算法實例-素數問題4.4綜合應用示例4:將列表ls=[51,33,54,56,67,88,431,111,141,72,45,2,78,13,15,5,69]中的素數去除,并輸出去除素數后列表的元素個數。prime=[]ls=[51,33,54,56,67,88,431,111,141,72,45,2,78,13,15,5,69]foriinls:forjinrange(2,i):ifi%j==0:breakelse:prime+=[i]print('ls中的素數是:',prime)foriinprime:ls.remove(i)print('去除素數后的ls是{}'.format(ls))print('ls中的非素數有{}個'.format(len(ls)))算法設計分析:1.構造一個新的列表prime,存放ls中的素數。2.在ls中判斷,只要元素是在prime中存在,就在ls中刪除。(4)算法實例-素數問題4.4綜合應用(4)算法實例-素數問題4.4綜合應用進制轉換設計一算法,將十進制正整數轉換為十六進制十六進制對應十進制十六進制對應十進制0088119922A1033B1144C1255D1366E1477F15(5)算法實例-進制轉換4.4綜合應用10-16進制轉換除16取余法進制轉換數值0~15與十六進制0~F對應01234567891011121314150123456789ABCDEF設計一個字符串序列"0123456789ABCDEF",該序列中的每個字符對應的下標恰恰就是這個十六進制數字代表的十進制數值大小。因此可以將獲得的余數作為下標來獲取其對應的十六進制數字。(5)算法實例-進制轉換4.4綜合應用Dnum=int(input("請輸入十進制整數:"))ifDnum==0:Hnum="0"else:Hnum=“”#空串Hdigits="0123456789ABCDEF"whileDnum!=0:remainder=Dnum%16Hnum=Hdigits[remainder]+Hnum//連接運算Dnum//=16print("對應的十六進制值為{}".format(Hnum))#結果:請輸入十進制整數:300對應的十六進制值為12C請輸入十進制整數:0對應的十六進制值為0函數方法:hex(Dnum)Dnum:3001810Hnum:C2C12C(5)算法實例-進制轉換4.4綜合應用(5)算法實例-進制轉換4.4綜合應用Dnum=int(input("請輸入十進制整數:"))ifDnum==0:Qnum="0"else:Qnum=""Qdigits="01234567"whileDnum!=0:remainder=Dnum%8Qnum=Qdigits[remainder]+QnumDnum//=8print(“對應的八進制值為{}".format(Qnum))#結果:請輸入十進制整數:123對應的八進制值為173函數方法:oct(Dnum)(5)算法實例-八進制轉換4.4綜合應用Dnum=int(input("請輸入十進制整數:"))ifDnum==0:Bnum="0"else:Bnum=""Bdigits="01"whileDnum!=0:remainder=Dnum%2Bnum=Bdigits[remainder]+BnumDnum//=2print(“對應的二進制值為{}".format(Bnum))#結果:請輸入十進制整數:123對應的二進制值為1111011函數方法:bin(Dnum)(5)算法實例-二進制轉換4.4綜合應用現有一個集合{10,3,4,23,43,12,5,33,19,38},請編寫程序將所有小于等于20的值保存在字典的第一個鍵key1的值中,將大于20的值保存在第二個鍵key2的值中。d={'key1':[],'key2':[]}x={10,3,4,23,43,12,5,33,19,38}foriinx:ifi<=20:d['key1']=d['key1']+[i]else:d['key2']=d['key2']+[i]print(d)(6)

算法實例-數據分塊4.4綜合應用問題:通過鍵盤輸入如下一組漢語詞匯并以空格分隔,統(tǒng)計各詞匯重復出現的次數,按次數的降序輸出詞匯及對應次數,以英文冒號分隔。示例格式如下:江蘇上海浙江安徽山西安徽江蘇江蘇上海安徽陜西輸出格式如下:江蘇:3安徽:3上海:2浙江:1山西:1陜西:1(6)算法實例-數據分塊4.4綜合應用txt=inp

溫馨提示

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

評論

0/150

提交評論