版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
例3-1輸入三數(shù)排序例3-1輸入三數(shù)排序本例將編寫程序,實(shí)現(xiàn)用戶輸入三個(gè)數(shù)字,并按從小到大的順序輸出。首先將x與y進(jìn)行比較,將較小的數(shù)放入x中,較大的數(shù)放入y中;接著將x與z進(jìn)行比較,把較小的數(shù)放入x中,較大的數(shù)放入z中,此時(shí)x已是三個(gè)數(shù)中的最小值;最后,再將y與z進(jìn)行比較,把較小的數(shù)放入y中,較大的數(shù)放入z中。這樣,x、y、z就按從小到大的順序排列了。x=input('x=')#輸入xy=input('y=')#輸入yz=input('z=')#輸入zifx>y:x,y=y,x#交換x和yifx>z:x,z=z,x#交換x和zify>z:y,z=z,y#交換y和zprint(x,y,z)#輸出結(jié)果輸出結(jié)果:假設(shè)輸入的值為x=3、y=5和z=4,以上代碼執(zhí)行后的輸出結(jié)果如下:x=3y=5z=4345代碼解釋:(1)用戶輸入x=input('x=')#輸入xy=input('y=')#輸入yz=input('z=')#輸入z使用input()函數(shù)提示用戶分別輸入三個(gè)值,并將輸入的字符串存儲(chǔ)到變量x、y和z中。注意:這里輸入的值是字符串類型,而不是數(shù)字類型。如果需要對(duì)數(shù)值進(jìn)行比較,后續(xù)需要將它們轉(zhuǎn)換為整數(shù)或浮點(diǎn)數(shù)。(2)第一次交換:確保x是最小值ifx>y:x,y=y,x#交換x和y如果x大于y,則交換x和y的值。通過這種方式,確保x不大于y,即x是x和y中較小的值。(3)第二次交換:確保x是三個(gè)值中的最小值ifx>z:x,z=z,x#交換x和z如果x大于z,則交換x和z的值。經(jīng)過這一步,x一定是x、y和z中的最小值。(4)第三次交換:確保y和z按從小到大排序ify>z:y,z=z,y#交換y和z如果y大于z,則交換y和z的值。經(jīng)過這一步,y和z也按照從小到大的順序排列。(5)輸出結(jié)果print(x,y,z)#輸出結(jié)果最終,x、y和z按從小到大的順序排列。使用print()函數(shù)輸出排序后的結(jié)果。例3-2輸入成績(jī)?cè)u(píng)等級(jí)本例將編寫程序,實(shí)現(xiàn)輸入學(xué)生的成績(jī)score,并根據(jù)分?jǐn)?shù)輸出其等級(jí):score>=90為優(yōu),90>score>=80為良,80>score>=70為中等,70>score>=60為及格,score<60為不及格。score=int(input("請(qǐng)輸入成績(jī):"))#int()將字符串轉(zhuǎn)換為整數(shù)ifscore>=90:print("優(yōu)")elifscore>=80:print("良")elifscore>=70:print("中等")elifscore>=60:print("及格")else:print("不及格")輸出結(jié)果:請(qǐng)輸入成績(jī):88良代碼解釋:(1)獲取用戶輸入并轉(zhuǎn)換為整數(shù)score=int(input("請(qǐng)輸入成績(jī):"))#int()將字符串轉(zhuǎn)換為整數(shù)使用input()函數(shù)提示用戶輸入成績(jī),并將輸入的字符串通過int()轉(zhuǎn)換為整數(shù)類型,存儲(chǔ)到變量score中。(2)根據(jù)成績(jī)?cè)u(píng)定等級(jí)ifscore>=90:print("優(yōu)")elifscore>=80:print("良")elifscore>=70:print("中等")elifscore>=60:print("及格")else:print("不及格")使用if-elif-else語(yǔ)句根據(jù)成績(jī)范圍輸出相應(yīng)的等級(jí):如果score>=90,輸出"優(yōu)"。否則,如果score>=80,輸出"良"。否則,如果score>=70,輸出"中等"。否則,如果score>=60,輸出"及格"。否則,輸出"不及格"。例3-3求最大公約數(shù)本例將編寫程序,實(shí)現(xiàn)輸入兩個(gè)正整數(shù),求它們的最大公約數(shù)。求最大公約數(shù)可以使用“輾轉(zhuǎn)相除法”,具體方法如下。(1)比較兩數(shù),確保m大于n。(2)將m作為被除數(shù),n作為除數(shù),相除后得到余數(shù)r。(3)循環(huán)判斷余數(shù)r:如果r=0,則n為最大公約數(shù),結(jié)束循環(huán)。如果r≠0,則執(zhí)行:①m←n,n←r;②將m作被除數(shù),n作除數(shù),相除后余數(shù)為r。num1=int(input("輸入第一個(gè)數(shù)字:"))#用戶輸入第一個(gè)正整數(shù)num2=int(input("輸入第二個(gè)數(shù)字:"))#用戶輸入第二個(gè)正整數(shù)m=num1n=num2ifm<n:#確保m大于nt=mm=nn=tr=m%nwhiler!=0:m=nn=rr=m%nprint(num1,"和",num2,"的最大公約數(shù)為",n)輸出結(jié)果:輸入第一個(gè)數(shù)字:55輸入第二個(gè)數(shù)字:2255和22的最大公約數(shù)為11代碼解釋:(1)用戶輸入num1=int(input("輸入第一個(gè)數(shù)字:"))#用戶輸入第一個(gè)正整數(shù)num2=int(input("輸入第二個(gè)數(shù)字:"))#用戶輸入第二個(gè)正整數(shù)使用input()函數(shù)提示用戶輸入兩個(gè)數(shù)字。使用int()函數(shù)將輸入的字符串轉(zhuǎn)換為整數(shù),分別存儲(chǔ)到變量num1和num2中。(2)變量初始化m=num1n=num2將用戶輸入的兩個(gè)數(shù)字分別賦值給變量m和n,用于后續(xù)計(jì)算。(3)確保m大于nifm<n:#確保m大于nt=mm=nn=t如果m小于n,則通過交換變量的值,確保m始終大于或等于n。這一步是為了方便后續(xù)的輾轉(zhuǎn)相除法計(jì)算。(4)計(jì)算余數(shù)r=m%n計(jì)算m除以n的余數(shù),并將結(jié)果存儲(chǔ)到變量r中。(5)輾轉(zhuǎn)相除法循環(huán)whiler!=0:m=nn=rr=m%n使用while循環(huán),條件是r不等于0。在循環(huán)體中:①將當(dāng)前的n賦值給m。②將當(dāng)前的余數(shù)r賦值給n。③計(jì)算新的余數(shù)r=m%n。這個(gè)過程會(huì)不斷重復(fù),直到余數(shù)r為0。此時(shí),n的值就是兩個(gè)數(shù)的最大公約數(shù)。例3-4遍歷字符串中的字符本例將通過for循環(huán)遍歷字符串'Python'中的每個(gè)字符,并依次將每個(gè)字符(字母)打印出來,顯示當(dāng)前正在處理的字母。forletterin'Python':print('當(dāng)前字母:',letter)輸出結(jié)果:當(dāng)前字母:P當(dāng)前字母:y當(dāng)前字母:t當(dāng)前字母:h當(dāng)前字母:o當(dāng)前字母:n代碼解釋:forletterin'Python':這是一個(gè)for循環(huán),用于遍歷字符串'Python'。在每次循環(huán)中,變量letter會(huì)依次取字符串中的每個(gè)字符。print('當(dāng)前字母:',letter)在每次循環(huán)中,打印出當(dāng)前的字母。letter是循環(huán)變量,存儲(chǔ)了當(dāng)前遍歷到的字符。例3-5遍歷列表中的元素本例將通過for循環(huán)遍歷一個(gè)包含水果名稱的列表fruits,并依次打印出列表中的每個(gè)元素。循環(huán)結(jié)束后,打印一條結(jié)束語(yǔ)。fruits=['banana','apple','mango']forfruitinfruits:print('元素:',fruit)print("Goodbye!")輸出結(jié)果:元素:banana元素:apple元素:mangoGoodbye!代碼解釋:fruits=['banana','apple','mango']定義了一個(gè)名為fruits的列表,其中包含三個(gè)字符串元素:'banana'、'apple'和'mango'。forfruitinfruits:使用for循環(huán)遍歷fruits列表中的每個(gè)元素。在每次循環(huán)中,變量fruit會(huì)依次取列表中的每個(gè)值。print('元素:',fruit)在每次循環(huán)中打印出當(dāng)前的元素值。fruit是循環(huán)變量,存儲(chǔ)了當(dāng)前遍歷到的列表元素。print("Goodbye!")循環(huán)結(jié)束后,打印一條結(jié)束語(yǔ)"Goodbye!"。例3-6計(jì)算1~10的整數(shù)之和本例將使用一個(gè)sum變量來進(jìn)行累加。sum=0forxin[1,2,3,4,5,6,7,8,9,10]:sum=sum+xprint(sum)輸出結(jié)果:55代碼解釋:sum=0初始化一個(gè)變量sum,用于存儲(chǔ)累加的結(jié)果,初始值為0。forxin[1,2,3,4,5,6,7,8,9,10]:使用for循環(huán)遍歷列表[1,2,3,4,5,6,7,8,9,10]中的每個(gè)數(shù)字。在每次循環(huán)中,變量x會(huì)依次取列表中的每個(gè)值。sum=sum+x在每次循環(huán)中,將當(dāng)前的數(shù)字x加到變量sum上,實(shí)現(xiàn)累加操作。print(sum)循環(huán)結(jié)束后,打印變量sum的值,即從1到10的累加結(jié)果。例3-7continue和break的用法示例本例代碼展示了continue和break在循環(huán)中的用法,分別用于控制循環(huán)的跳過和退出。#continue和break的用法i=1whilei<10:i+=1ifi%2>0:#當(dāng)i為奇數(shù)時(shí),跳過輸出continueprint(i)#輸出偶數(shù):2、4、6、8、10i=1whileTrue:#循環(huán)條件為True,始終成立print(i)#輸出1~10i+=1ifi>10:#當(dāng)i大于10時(shí),跳出循環(huán)break輸出結(jié)果:24681012345678910代碼解釋:(1)第一部分:使用continuei=1whilei<10:i+=1ifi%2>0:#當(dāng)i為奇數(shù)時(shí),跳過輸出continueprint(i)#輸出偶數(shù):2、4、6、8、10i=1初始化變量i為1。whilei<10:使用while循環(huán),條件是i小于10。i+=1在每次循環(huán)開始時(shí),將i增加1。ifi%2>0:檢查i是否為奇數(shù)(i%2>0表示i除以2的余數(shù)大于0,即i是奇數(shù))。continue如果i是奇數(shù),執(zhí)行continue語(yǔ)句,跳過當(dāng)前循環(huán)的剩余部分,直接進(jìn)入下一次循環(huán)。因此,奇數(shù)不會(huì)被打印。print(i)如果i是偶數(shù),打印i的值。(2)第二部分:使用breaki=1whileTrue:#循環(huán)條件為True,始終成立print(i)#輸出1~10i+=1ifi>10:#當(dāng)i大于10時(shí),跳出循環(huán)breaki=1初始化變量i為1。whileTrue:使用while循環(huán),條件為True,表示循環(huán)會(huì)一直執(zhí)行,直到遇到break語(yǔ)句。print(i)在每次循環(huán)中,打印當(dāng)前的i值。i+=1將i增加1。ifi>10:檢查i是否大于10。break如果i大于10,執(zhí)行break語(yǔ)句,跳出循環(huán)。例3-8輸出九九乘法表本例將編寫代碼,打印一個(gè)乘法表,具體來說是一個(gè)從1到9的乘法表。使用嵌套的for循環(huán)來實(shí)現(xiàn)。foriinrange(1,10):forjinrange(1,i+1):print(f"{i}**{j}={i*j}",end='\t')print()#換行輸出結(jié)果:1**1=1 2**1=22**2=4 3**1=33**2=6 3**3=9 4**1=44**2=8 4**3=12 4**4=16 5**1=55**2=10 5**3=15 5**4=20 5**5=25 6**1=66**2=12 6**3=18 6**4=24 6**5=30 6**6=36 7**1=77**2=14 7**3=21 7**4=28 7**5=35 7**6=42 7**7=49 8**1=88**2=16 8**3=24 8**4=32 8**5=40 8**6=48 8**7=56 8**8=64 9**1=99**2=18 9**3=27 9**4=36 9**5=45 9**6=54 9**7=63 9**8=72 9**代碼解釋:foriinrange(1,10):外層循環(huán),變量i從1遍歷到9。range(1,10)生成一個(gè)從1到9的整數(shù)序列。forjinrange(1,i+1):內(nèi)層循環(huán),變量j從1遍歷到i。range(1,i+1)生成一個(gè)從1到i的整數(shù)序列。這樣可以確保每一行只打印到當(dāng)前行號(hào)i的乘法表項(xiàng)。print(f"{i}**{j}={i*j}",end='\t')使用格式化字符串f"{i}**{j}={i*j}"打印乘法表的一項(xiàng),其中i是行號(hào),j是列號(hào),i*j是計(jì)算結(jié)果。end='\t'表示每一項(xiàng)之間用制表符分隔,而不是換行。print()在每一行的內(nèi)層循環(huán)結(jié)束后,打印一個(gè)空行,用于換行,開始新的一行。例3-9使用嵌套循環(huán)本例將編寫程序,使用嵌套循環(huán)輸出2~100之間的素?cái)?shù)。素?cái)?shù)是指大于1的整數(shù),且僅能被1和其自身整除,不能被其他任何整數(shù)整除。要判斷一個(gè)數(shù)m是否為素?cái)?shù),可以依次用2,3,4,…,直到m-1進(jìn)行除法運(yùn)算,只要有一個(gè)數(shù)能夠整除m,則m就不是素?cái)?shù)。以下是判斷素?cái)?shù)的代碼示例:m=int(input("請(qǐng)輸入2~100之間的一個(gè)整數(shù):"))j=2whilej<=m-1:ifm%j==0:break#退出循環(huán)j+=1ifj>m-1:print(f"{m}是素?cái)?shù)")else:print(f"{m}不是素?cái)?shù)")輸出結(jié)果:請(qǐng)輸入2~100之間的一個(gè)整數(shù):33是素?cái)?shù)在使用上述代碼判斷一個(gè)非素?cái)?shù)時(shí),通常能夠迅速得出結(jié)論。例如,在判斷30009是否為素?cái)?shù)時(shí),由于該數(shù)能被3整除,只需檢查j=2和j=3兩種情況即可。而在判斷素?cái)?shù),尤其是較大的素?cái)?shù)時(shí),例如30011,則需要從j=2開始,依次判斷j=3,4,…,一直到30010,直到發(fā)現(xiàn)沒有任何數(shù)能整除m,才能得出該數(shù)為素?cái)?shù)的結(jié)論。實(shí)際上,只需要從2判斷到,如果m不能被其中任何一個(gè)數(shù)整除,則m即為素?cái)?shù)。(1)獲取用戶輸入m=int(input("請(qǐng)輸入2~100之間的一個(gè)整數(shù):"))提示用戶輸入一個(gè)整數(shù),并將其轉(zhuǎn)換為整數(shù)類型存儲(chǔ)到變量m中。(2)初始化變量jj=2初始化變量j為2,用于從2開始檢查m是否有除1和自身以外的因數(shù)。(3)循環(huán)檢查因數(shù)whilej<=m-1:ifm%j==0:break#退出循環(huán)j+=1使用while循環(huán),從j=2到j(luò)=m-1,檢查m是否能被j整除。如果m能被j整除(即m%j==0),則m不是素?cái)?shù),使用break退出循環(huán)。如果m不能被j整除,j增加1,繼續(xù)檢查下一個(gè)數(shù)。(4)判斷并輸出結(jié)果ifj>m-1:print(f"{m}是素?cái)?shù)")else:print(f"{m}不是素?cái)?shù)")如果循環(huán)正常結(jié)束(即j增加到m-1之后),說明m沒有除1和自身以外的因數(shù),因此m是素?cái)?shù)。如果循環(huán)被break退出,說明m有除1和自身以外的因數(shù),因此m不是素?cái)?shù)。例3-10找出100以內(nèi)的所有素?cái)?shù)本例將編寫代碼,找出2到99之間的所有素?cái)?shù),并打印出來。importmath#導(dǎo)入數(shù)學(xué)模塊m=2#從2開始whilem<100:#外層循環(huán)j=2#從2開始判斷是否能整除whilej<=math.sqrt(m):#內(nèi)層循環(huán),math.sqrt()用于計(jì)算平方根ifm%j==0:#如果m能被j整除,則退出內(nèi)層循環(huán)breakj+=1ifj>math.sqrt(m):#如果j超過了m的平方根,則m是素?cái)?shù)print(f"{m}是素?cái)?shù)")m+=1#繼續(xù)判斷下一個(gè)數(shù)print("Goodbye!")輸出結(jié)果:2是素?cái)?shù)3是素?cái)?shù)5是素?cái)?shù)7是素?cái)?shù)11是素?cái)?shù)13是素?cái)?shù)17是素?cái)?shù)19是素?cái)?shù)23是素?cái)?shù)29是素?cái)?shù)31是素?cái)?shù)37是素?cái)?shù)41是素?cái)?shù)43是素?cái)?shù)47是素?cái)?shù)53是素?cái)?shù)59是素?cái)?shù)61是素?cái)?shù)67是素?cái)?shù)71是素?cái)?shù)73是素?cái)?shù)79是素?cái)?shù)83是素?cái)?shù)89是素?cái)?shù)97是素?cái)?shù)Goodbye!代碼解釋:importmath導(dǎo)入Python的math模塊,以便使用其中的math.sqrt()函數(shù),該函數(shù)用于計(jì)算平方根。m=2初始化變量m為2,表示從2開始檢查每個(gè)整數(shù)是否是素?cái)?shù)。2是最小的素?cái)?shù),因此從2開始是合理的。whilem<100:這是一個(gè)外層循環(huán),用于逐個(gè)檢查從2到99的每個(gè)整數(shù)。循環(huán)條件是m<100,當(dāng)m達(dá)到100時(shí),循環(huán)結(jié)束。j=2在外層循環(huán)的每次迭代中,初始化變量j為2,表示從2開始檢查m是否能被整除。任何整數(shù)都能被1整除,因此從2開始檢查即可。whilej<=math.sqrt(m):這是一個(gè)內(nèi)層循環(huán),用于檢查m是否能被2到math.sqrt(m)之間的任何數(shù)整除。這里利用了數(shù)學(xué)性質(zhì):如果一個(gè)數(shù)m不是素?cái)?shù),那么它必定有一個(gè)因數(shù)小于或等于它的平方根。因此,只需要檢查到math.sqrt(m)即可,而不是檢查到m-1。ifm%j==0:在內(nèi)層循環(huán)中,用取模運(yùn)算符%檢查m是否能被j整除。如果m%j==0,說明m能被j整除,因此m不是素?cái)?shù)。此時(shí)使用break語(yǔ)句退出內(nèi)層循環(huán),因?yàn)橐呀?jīng)確定m不是素?cái)?shù),無需繼續(xù)檢查。j+=1如果m不能被當(dāng)前的j整除,就將j加1,繼續(xù)檢查下一個(gè)數(shù)。ifj>math.sqrt(m):內(nèi)層循環(huán)結(jié)束后,檢查j的值。如果j大于math.sqrt(m),說明內(nèi)層循環(huán)完整地檢查了從2到math.sqrt(m)的所有數(shù),m都不能被它們整除,因此m是素?cái)?shù)。此時(shí)打印出m是素?cái)?shù)的信息。m+=1將m加1,進(jìn)入下一次外層循環(huán),繼續(xù)檢查下一個(gè)整數(shù)是否是素?cái)?shù)。print("Goodbye!")當(dāng)外層循環(huán)結(jié)束(即m達(dá)到100)時(shí),打印“Goodbye!”,表示程序運(yùn)行結(jié)束。例3-11求自然對(duì)數(shù)e的近似值本例將編寫程序,求自然對(duì)數(shù)e的近似值。自然對(duì)數(shù)e的近似值可以通過以下公式計(jì)算:e=1+1/1!+1/2!+1/3!+...+1/n!這是一個(gè)收斂級(jí)數(shù),可以通過求其前n項(xiàng)和來實(shí)現(xiàn)近似計(jì)算。通常該類問題會(huì)給出一個(gè)計(jì)算誤差,例如,可設(shè)定當(dāng)某項(xiàng)的值小于10-5時(shí)停止計(jì)算。本例程序既涉及累加,也包含了累乘,程序如下:i=1p=1sum_e=1#初始化sum_e為1t=1/p#計(jì)算第一項(xiàng)whilet>0.00001:#設(shè)定誤差閾值p=p*i#計(jì)算i的階乘t=1/p#計(jì)算當(dāng)前項(xiàng)sum_e+=t#累加當(dāng)前項(xiàng)到sum_ei+=1#準(zhǔn)備計(jì)算下一項(xiàng)print("自然對(duì)數(shù)e的近似值為:",sum_e)輸出結(jié)果:自然對(duì)數(shù)e的近似值為:2.7182815255731922代碼解釋:(1)變量初始化i=1p=1sum_e=1t=1/pi是一個(gè)計(jì)數(shù)器,用于記錄當(dāng)前項(xiàng)的階數(shù)。p用于存儲(chǔ)當(dāng)前項(xiàng)的階乘值,初始值為1。sum_e用于存儲(chǔ)e的近似值,初始值為1,因?yàn)樘├占?jí)數(shù)展開的第一項(xiàng)是1。t是當(dāng)前項(xiàng)的值,初始值為,即1。(2)循環(huán)條件whilet>0.00001:這是一個(gè)while循環(huán),條件是當(dāng)前項(xiàng)的值t大于設(shè)定的誤差閾值0.00001。誤差閾值用于控制計(jì)算的精度。當(dāng)新增項(xiàng)的值小于該閾值時(shí),認(rèn)為繼續(xù)計(jì)算對(duì)結(jié)果的影響可以忽略不計(jì),從而停止循環(huán)。(3)循環(huán)體p=p*it=1/psum_e+=ti+=1在每次循環(huán)中,打印出當(dāng)前的字母。letter是循環(huán)變量,存儲(chǔ)了當(dāng)前遍歷到的字符。p=p*i:計(jì)算當(dāng)前階乘值。例如,當(dāng)i=1時(shí),p為1;當(dāng)i=2時(shí),p為1×2=2;當(dāng)i=3時(shí),p為2×3=6,依此類推。t=1/p:計(jì)算當(dāng)前項(xiàng)的值。根據(jù)泰勒級(jí)數(shù)展開,e的每一項(xiàng)是,其中i!是階乘。sum_e+=t:將當(dāng)前項(xiàng)累加到sum_e中,逐步逼近e的值。i+=1:將i加1,準(zhǔn)備計(jì)算下一項(xiàng)。(4)輸出結(jié)果print("自然對(duì)數(shù)e的近似值為:",sum_e)當(dāng)循環(huán)結(jié)束時(shí),sum_e中存儲(chǔ)的就是e的近似值。使用print函數(shù)輸出結(jié)果。例3-12求隨機(jī)整數(shù)中的最大數(shù)本例將編寫程序,求區(qū)間[100,200]內(nèi)10個(gè)隨機(jī)整數(shù)中的最大數(shù)。本例random.randrange(6)從0到5中隨機(jī)選擇一個(gè)整數(shù)(不包括6)。random.randrange(2,6)從2到5中隨機(jī)選擇一個(gè)整數(shù)(不包括6)。importrandomx=random.randrange(100,201)#產(chǎn)生一個(gè)[100,200]之間的隨機(jī)數(shù)xmax_num=x#設(shè)定初始最大數(shù)print(x,end="")foriinrange(2,11):#生成10個(gè)隨機(jī)數(shù)x=random.randrange(100,201)#產(chǎn)生另一個(gè)[100,200]之間的隨機(jī)數(shù)xprint(x,end="")ifx>max_num:#若新產(chǎn)生的隨機(jī)數(shù)大于當(dāng)前最大數(shù),則進(jìn)行替換max_num=xprint("最大數(shù):",max_num)輸出結(jié)果:125150102104179100164186168172最大數(shù):186代碼解釋:(1)生成第一個(gè)隨機(jī)數(shù)并初始化最大值x=random.randrange(100,201)#產(chǎn)生一個(gè)[100,200]之間的隨機(jī)數(shù)xmax_num=x#設(shè)定初始最大數(shù)print(x,end="")random.randrange(100,201):生成一個(gè)范圍在[100,200](包含100,不包含201)之間的隨機(jī)整數(shù),賦值給變量x。max_num=x:將第一個(gè)隨機(jī)數(shù)賦值給max_num,作為當(dāng)前的最大值。print(x,end=""):(2)循環(huán)生成隨機(jī)數(shù)并更新最大值foriinrange(2,11):#生成10個(gè)隨機(jī)數(shù)x=random.randrange(100,201)#產(chǎn)生另一個(gè)[100,200]之間的隨機(jī)數(shù)xprint(x,end="")ifx>max_num:#若新產(chǎn)生的隨機(jī)數(shù)大于當(dāng)前最大數(shù),則進(jìn)行替換max_num=xforiinrange(2,11):循環(huán)9次(從2到10,總共9次),生成9個(gè)隨機(jī)數(shù)(加上第一個(gè)隨機(jī)數(shù),總共10個(gè))。x=random.randrange(100,201):在每次循環(huán)中生成一個(gè)新的隨機(jī)數(shù)。print(x,end=""):打印當(dāng)前生成的隨機(jī)數(shù),同樣用空格分隔。ifx>max_num:判斷當(dāng)前生成的隨機(jī)數(shù)是否大于當(dāng)前的最大值max_num。max_num=x:如果當(dāng)前隨機(jī)數(shù)大于max_num,則更新max_num為當(dāng)前隨機(jī)數(shù)。(3)輸出最大值print("最大數(shù):",max_num)在循環(huán)結(jié)束后,max_num中存儲(chǔ)的是這10個(gè)隨機(jī)數(shù)中的最大值。使用print函數(shù)輸出最大值。例3-13百錢買百雞問題本例將編寫程序,解決以下問題:公雞每只5元,母雞每只3元,小雞3只1元,現(xiàn)在要求用100元錢買100只雞,問公雞、母雞和小雞各買幾只?設(shè)公雞為x只,母雞為y只,小雞為z只。根據(jù)題意,可以列出以下方程組:由于這兩個(gè)方程中有三個(gè)未知數(shù),因此不能直接求解,屬于不定方程。我們可以采用“枚舉法”進(jìn)行試根,即逐一測(cè)試各種可能的x、y、z組合,并輸出符合條件的結(jié)果。forxinrange(0,101):#遍歷公雞的數(shù)量foryinrange(0,101):#遍歷母雞的數(shù)量z=100-x-y#計(jì)算小雞的數(shù)量ifz>=0and5*x+3*y+z/3==100:print('公雞%d只,母雞%d只,小雞%d只'%(x,y,z))輸出結(jié)果:公雞0只,母雞25只,小雞75只公雞4只,母雞18只,小雞78只公雞8只,母雞11只,小雞81只公雞12只,母雞4只,小雞84只代碼解釋:(1)外層循環(huán):遍歷公雞的數(shù)量forxinrange(0,101):#遍歷公雞的數(shù)量使用for循環(huán),變量x從0到100(包括0和100)。x表示公雞的數(shù)量,因?yàn)樽疃嗫梢再I100只雞,所以公雞的數(shù)量范圍是0到100。(2)內(nèi)層循環(huán):遍歷母雞的數(shù)量foryinrange(0,101):#遍歷母雞的數(shù)量?jī)?nèi)層循環(huán)中,變量y從0到100(包括0和100)。y表示母雞的數(shù)量,同樣因?yàn)樽疃嗫梢再I100只雞,所以母雞的數(shù)量范圍也是0到100。(3)計(jì)算小雞的數(shù)量z=100-x-y#計(jì)算小雞的數(shù)量根據(jù)題目條件,總共需要買100只雞。如果已經(jīng)買了x只公雞和y只母雞,那么小雞的數(shù)量z就是100-x-y。(4)判斷條件ifz>=0and5*x+3*y+z/3==100:z>=0:確保小雞的數(shù)量是非負(fù)的,否則不符合實(shí)際情況。5*x+3*y+z/3==100:根據(jù)題目條件,公雞每只5元,母雞每只3元,小雞3只1元(即每只小雞元)??偦ㄙM(fèi)必須等于100元。這個(gè)條件確保當(dāng)前的x、y和z的組合滿足題目要求。(5)輸出結(jié)果print('公雞%d只,母雞%d只,小雞%d只'%(x,y,z))如果當(dāng)前的x、y和z滿足條件,就使用print()函數(shù)輸出結(jié)果。使用格式化字符串%d,將x、y和z的值分別插入到字符串中。以上段代碼通過兩層嵌套循環(huán),窮舉所有可能的公雞和母雞的數(shù)量組合,然后計(jì)算出對(duì)應(yīng)的小雞數(shù)量,并檢查是否滿足總花費(fèi)100元和總數(shù)量100只的條件。如果滿足條件,就輸出當(dāng)前的組合。例3-14輸出“水仙花數(shù)”本例將編寫程序,輸出“水仙花數(shù)”。所謂水仙花數(shù),指的是一個(gè)三位的十進(jìn)制數(shù),其各位數(shù)字的立方和等于該數(shù)本身。例如,153是水仙花數(shù),因?yàn)?3+53+33=153。foriinrange(100,1000):#遍歷所有三位數(shù)ge=i%10#獲取個(gè)位數(shù)字shi=(i//10)%10#獲取十位數(shù)字bai=i//100#獲取百位數(shù)字#判斷立方和是否等于該數(shù)ifge**3+shi**3+bai**3==i:print(i,end="")#輸出符合條件的水仙花數(shù)輸出結(jié)果:153370371407代碼解釋:(1)遍歷所有三位數(shù)foriinrange(100,1000):#遍歷所有三位數(shù)使用for循環(huán),變量i從100到999(包括100和999)。三位數(shù)的范圍是從100到999,因此range(100,1000)正好覆蓋了所有三位數(shù)。(2)提取各位數(shù)字ge=i%10#獲取個(gè)位數(shù)字shi=(i//10)%10#獲取十位數(shù)字bai=i//100#獲取百位數(shù)字ge=i%10:通過取余數(shù)操作,獲取i的個(gè)位數(shù)字。shi=(i//10)%10:先通過整除10去掉個(gè)位,再取余數(shù),得到十位數(shù)字。bai=i//100:通過整除100,直接得到百位數(shù)字。(3)判斷立方和是否等于該數(shù)ifge**3+shi**3+bai**3==i:計(jì)算個(gè)位、十位和百位數(shù)字的立方和:ge**3+shi**3+bai**3。判斷這個(gè)立方和是否等于原數(shù)i。如果相等,說明i是一個(gè)水仙花數(shù)。(4)輸出符合條件的水仙花數(shù)print(i,end="")#輸出符合條件的水仙花數(shù)如果i是水仙花數(shù),使用print()函數(shù)輸出該數(shù)。end=""參數(shù)表示輸出后不換行,而是用空格分隔,方便在同一行顯示所有結(jié)果。例3-15輸出不同的三位數(shù)本例將編寫程序,輸出由1、2、3、4四個(gè)數(shù)字組成的所有三位數(shù)且每位數(shù)字均不相同。digits=(1,2,3,4)foriindigits:forjindigits:forkindigits:ifi!=jandj!=kandi!=k:print(i*100+j*10+k)輸出結(jié)果:123124132134142143213214231234241243312314321324341342412413421423431432代碼解釋:(1)定義數(shù)字集合digits=(1,2,3,4)定義了一個(gè)元組digits,包含數(shù)字1、2、3和4。這些數(shù)字將用于生成三位數(shù)。(2)三層嵌套循環(huán)foriindigits:forjindigits:forkindigits:使用三層嵌套的for循環(huán),分別遍歷digits中的每個(gè)數(shù)字。外層循環(huán)變量i表示百位數(shù)字。中層循環(huán)變量j表示十位數(shù)字。內(nèi)層循環(huán)變量k表示個(gè)位數(shù)字。三層循環(huán)的組合會(huì)生成所有可能的三位數(shù),包括重復(fù)數(shù)字的情況。(3)斷數(shù)字是否互不相同ifi!=jandj!=kandi!=k:在內(nèi)層循環(huán)中,使用if語(yǔ)句判斷當(dāng)前組合的三個(gè)數(shù)字是否互不相同。i!=j:百位和十位數(shù)字不同。j!=k:十位和個(gè)位數(shù)字不同。i!=k:百位和個(gè)位數(shù)字不同。只有當(dāng)這三個(gè)條件同時(shí)滿足時(shí),才認(rèn)為當(dāng)前的三位數(shù)組合是有效的。(4)輸出符合條件的三位數(shù)print(i*100+j*10+k)如果當(dāng)前組合的數(shù)字互不相同,則通過i*100+j*10+k計(jì)算出對(duì)應(yīng)的三位數(shù)。使用print()函數(shù)輸出該三位數(shù)。例3-16輸出斐波那契數(shù)列本例將編寫程序,輸出斐波那契(Fibonacci)數(shù)列的前20項(xiàng)。該數(shù)列的第1項(xiàng)和第2項(xiàng)均為1,從第3項(xiàng)開始,每一項(xiàng)均為其前面兩項(xiàng)之和,即1,1,2,3,5,8,…。設(shè)數(shù)列中相鄰的三項(xiàng)分別為變量f1、f2和f3,則有以下遞推算法。(1)f1和f2的初值為1。(2)每次執(zhí)行循環(huán),用f1和f2生成后項(xiàng),即f3=f1+f2。(3)通過遞推更新新的f1和f2,即f1=f2和f2=f3。(4)如果未達(dá)到規(guī)定的循環(huán)次數(shù),則返回步驟2;否則停止計(jì)算。f1=1f2=1print(f1)#輸出第1項(xiàng)print(f2)#輸出第2項(xiàng)foriinrange(3,21):f3=f1+f2#遞推公式print(f3)#輸出第i項(xiàng)f1=f2f2=f3輸出結(jié)果:11235813213455891442333776109871597258441816765代碼解釋:(1)初始化前兩項(xiàng)f1=1f2=1定義變量f1和f2,分別表示斐波那契數(shù)列的第1項(xiàng)和第2項(xiàng),初始值均為1。(2)輸出前兩項(xiàng)print(f1)#輸出第1項(xiàng)print(f2)#輸出第2項(xiàng)使用print()函數(shù)分別輸出斐波那契數(shù)列的第1項(xiàng)和第2項(xiàng)。(3)循環(huán)計(jì)算后續(xù)項(xiàng)foriinrange(3,21):f3=f1+f2#遞推公式print(f3)#輸出第i項(xiàng)f1=f2f2=f3使用for循環(huán),從第3項(xiàng)開始計(jì)算,直到第20項(xiàng)。在每次循環(huán)中:①f3=f1+f2:根據(jù)斐波那契數(shù)列的遞推公式,計(jì)算當(dāng)前項(xiàng)f3,即當(dāng)前項(xiàng)等于前兩項(xiàng)之和。②print(f3):輸出當(dāng)前項(xiàng)f3。③更新變量值:將f2的值賦給f1,將f3的值賦給f2,為計(jì)算下一項(xiàng)做準(zhǔn)備。例3-17分?jǐn)?shù)序列前20項(xiàng)求和本例為分?jǐn)?shù)序列求和示例(有一個(gè)分?jǐn)?shù)序列:2/1,3/2,5/3,8/5,13/8,21/13…求出這個(gè)數(shù)列的前20項(xiàng)之和)。觀察分子與分母的變化規(guī)律,可以發(fā)現(xiàn)后項(xiàng)的分母為前項(xiàng)的分子,后項(xiàng)的分子為前項(xiàng)的分子與分母之和。number=20a=2#分子初始值b=1#分母初始值s=0#和的初始值forninrange(1,number+1):s+=a/b#累加當(dāng)前項(xiàng)的值t=a#保存當(dāng)前分子的值#以下三句是程序的關(guān)鍵a=a+bb=tprint(s)#輸出前20項(xiàng)的和輸出結(jié)果:32.66026079864164代碼解釋:(1)初始化變量number=20a=2#分子初始值b=1#分母初始值s=0#和的初始值number表示要計(jì)算的項(xiàng)數(shù),這里是20。a和b分別表示分?jǐn)?shù)的分子和分母,初始值為2和1。s用于存儲(chǔ)分?jǐn)?shù)序列的和,初始值為0。(2)循環(huán)計(jì)算每一項(xiàng)forninrange(1,number+1):s+=a/b#累加當(dāng)前項(xiàng)的值t=a#保存當(dāng)前分子的值a=a+b#更新分子b=t#更新分母使用for循環(huán),從1到20(包括1和20)。在每次循環(huán)中:①s+=a/b:將當(dāng)前分?jǐn)?shù)a/b累加到和s中。②t=a:保存當(dāng)前分子的值到變量t。③a=a+b:更新分子a為a+b。④b=t:更新分母b為之前保存的分子值t。(3)輸出結(jié)果print(s)#輸出前20項(xiàng)的和在循環(huán)結(jié)束后,變量s中存儲(chǔ)的是分?jǐn)?shù)序列的前20項(xiàng)之和。使用print()函數(shù)輸出這個(gè)和。例3-18迭代法求平方根示例本例將編寫程序,使用迭代法求平方根。求平方根的迭代公式為:求出的平方根的精度要求是前后項(xiàng)差的絕對(duì)值小于10-5。分析:迭代法求a的平方根的算法如下。(1)設(shè)定初值:設(shè)定一個(gè)x的初值x0(在下面的程序中取x0=a/2)。(2)計(jì)算下一個(gè)值:用求平方根的公式計(jì)算x1=(x0+a/x0)。此時(shí),得到的x1可能與真實(shí)的平方根有較大的誤差。(3)判斷收斂性:判斷x1-x0是否大于10-5。如果滿足該條件,則將x1賦值給x0,繼續(xù)計(jì)算新的x1。重復(fù)此過程,直到前后兩次求出的x值(即x1和x0)的差的絕對(duì)值小于10-5。a=int(input("Inputapositivenumber:"))#輸入被開方數(shù)x0=a/2#任取的初值x1=(x0+a/x0)/2#使用牛頓迭代法公式計(jì)算x1whileabs(x0-x1)>0.00001:#abs(x)函數(shù)用來求參數(shù)x絕對(duì)值x0=x1x1=(x0+a/x0)/2print("Thesquarerootis:",x0)輸出結(jié)果:Inputapositivenumber:2↙Thesquarerootis:1.4142156862745097代碼解釋:(1)輸入被開方數(shù)a=int(input("Inputapositivenumber:"))用戶輸入一個(gè)正整數(shù)a,即需要計(jì)算平方根的數(shù)。(2)初始化初值x0=a/2初始猜測(cè)值x0為a的一半,這是牛頓迭代法的一個(gè)常見起始點(diǎn)。(3)第一次迭代x1=(x0+a/x0)/2使用牛頓迭代法公式計(jì)算新的近似值x1。(4)迭代過程whileabs(x0-x1)>0.00001:x0=x1x1=(x0+a/x0)/2當(dāng)x0和x1的差值大于0.00001時(shí),繼續(xù)迭代:將x1的值賦給x0。用公式重新計(jì)算x1。(5)輸出結(jié)果print("Thesquarerootis:",x0)當(dāng)差值小于等于0.00001時(shí),認(rèn)為結(jié)果足夠精確,輸出x0作為平方根。例3-19計(jì)算學(xué)生成績(jī)本例將編寫程序,程序允許輸入若干名同學(xué)的計(jì)算機(jī)成績(jī),并計(jì)算這些成績(jī)的平均值、最小值和最大值。為了計(jì)算平均值,需要將所有成績(jī)相加后除以人數(shù),因此我們初始化變量sAvg為0,計(jì)數(shù)總?cè)藬?shù)的變量sCnt初始化為0。由于我們需要求出成績(jī)的最大值和最小值,故設(shè)置成績(jī)最大值變量sMax在循環(huán)開始前為一個(gè)非常小的數(shù)(例如﹣100),設(shè)置成績(jī)最小值變量sMin在循環(huán)開始前為一個(gè)非常大的數(shù)(例如150)。在程序運(yùn)行時(shí),我們將依次輸入若干名同學(xué)的計(jì)算機(jī)成績(jī),存入變量aScore,以輸入負(fù)數(shù)來結(jié)束輸入。每輸入一個(gè)同學(xué)的成績(jī)后,將執(zhí)行以下操作。(1)將該同學(xué)的計(jì)算機(jī)成績(jī)累加到變量sAvg中。(2)計(jì)數(shù)變量sCnt增加1。(3)判斷該同學(xué)的成績(jī)是否大于當(dāng)前的最大值。如果是,則更新最大值sMax為該同學(xué)的成績(jī);否則不進(jìn)行任何操作。(4)判斷該同學(xué)的成績(jī)是否小于當(dāng)前的最小值。如果是,則更新最小值sMin為該同學(xué)的成績(jī);否則不進(jìn)行任何操作。(5)輸入下一個(gè)同學(xué)的成績(jī),重復(fù)上述步驟(1)至(4),直到輸入﹣1結(jié)束。通過上述分析可以看出,我們需要利用循環(huán)控制結(jié)構(gòu)來實(shí)現(xiàn)步驟(1)至(5)的操作,循環(huán)結(jié)束的條件為輸入的成績(jī)值為﹣1。同時(shí),變量sAvg、sCnt、sMax和sMin的初始值需要在循環(huán)體外設(shè)置。步驟(3)和(4)需要通過分支控制結(jié)構(gòu)實(shí)現(xiàn),而步驟(5)中的輸入操作是推動(dòng)程序進(jìn)入下一輪循環(huán)的關(guān)鍵。sAvg=0.0sCnt=0#計(jì)數(shù)sMax=-100#最小值初始化為一個(gè)非常小的數(shù)sMin=150#最大值初始化為一個(gè)非常大的數(shù)aScore=float(input('請(qǐng)輸入一個(gè)同學(xué)的成績(jī):'))#輸入第一個(gè)成績(jī)whileaScore>=0:sAvg+=aScore#累加成績(jī)sCnt+=1#計(jì)數(shù)增加ifaScore>sMax:#更新最大值sMax=aScoreifaScore<sMin:#更新最小值sMin=aScoreaScore=float(input('請(qǐng)輸入下一個(gè)同學(xué)的成績(jī):'))#輸入下一個(gè)成績(jī)#輸出結(jié)果ifsCnt>0:#確保至少有一個(gè)成績(jī)輸入print('計(jì)算機(jī)平均成績(jī):',sAvg*1.0/sCnt)print('計(jì)算機(jī)成績(jī)最高分:',sMax)print('計(jì)算機(jī)成績(jī)最低分:',sMin)else:print('沒有輸入任何成績(jī)。')輸出結(jié)果:請(qǐng)輸入一個(gè)同學(xué)的成績(jī):98請(qǐng)輸入下一個(gè)同學(xué)的成績(jī):78↙請(qǐng)輸入下一個(gè)同學(xué)的成績(jī):78↙請(qǐng)輸入下一個(gè)同學(xué)的成績(jī):97↙請(qǐng)輸入下一個(gè)同學(xué)的成績(jī):96↙請(qǐng)輸入下一個(gè)同學(xué)的成績(jī):79↙請(qǐng)輸入下一個(gè)同學(xué)的成績(jī):87↙請(qǐng)輸入下一個(gè)同學(xué)的成績(jī):-1↙計(jì)算機(jī)平均成績(jī):87.57142857142857計(jì)算機(jī)成績(jī)最高分:98.0計(jì)算機(jī)成績(jī)最低分:78.0代碼解釋:(1)初始化變量sAvg=0.0#用于存儲(chǔ)成績(jī)總和sCnt=0#用于計(jì)數(shù)輸入的成績(jī)數(shù)量sMax=-100#初始化最大值為一個(gè)非常小的數(shù)sMin=150#初始化最小值為一個(gè)非常大的數(shù)sAvg:用于累加所有輸入的成績(jī)。sCnt:用于記錄輸入的成績(jī)數(shù)量。sMax和sMin:分別用于存儲(chǔ)最高分和最低分,初始值分別設(shè)為一個(gè)非常小的數(shù)和一個(gè)非常大的數(shù),以便在第一次比較時(shí)能夠正確更新。(2)輸入第一個(gè)成績(jī)aScore=float(input('請(qǐng)輸入一個(gè)同學(xué)的成績(jī):'))#輸入第一個(gè)成績(jī)提示用戶輸入第一個(gè)同學(xué)的成績(jī),并將其轉(zhuǎn)換為浮點(diǎn)數(shù)存儲(chǔ)到aScore中。(3)循環(huán)輸入成績(jī)并處理whileaScore>=0:sAvg+=aScore#累加成績(jī)sCnt+=1#計(jì)數(shù)增加ifaScore>sMax:#更新最大值sMax=aScoreifaScore<sMin:#更新最小值sMin=aScoreaScore=float(input('請(qǐng)輸入下一個(gè)同學(xué)的成績(jī):'))#輸入下一個(gè)成績(jī)使用while循環(huán),條件是aScore>=0,即只要輸入的成績(jī)是非負(fù)數(shù),就繼續(xù)循環(huán)。在循環(huán)中:①將當(dāng)前成績(jī)aScore累加到sAvg中。②將計(jì)數(shù)器sCnt加1。③如果當(dāng)前成績(jī)大于sMax,則更新sMax。④如果當(dāng)前成績(jī)小于sMin,則更新sMin。⑤提示用戶輸入下一個(gè)成績(jī),并將其存儲(chǔ)到aScore中。如果用戶輸入了一個(gè)負(fù)數(shù),循環(huán)結(jié)束。(4)輸出結(jié)果ifsCnt>0:#確保至少有一個(gè)成績(jī)輸入print('計(jì)算機(jī)平均成績(jī):',sAvg*1.0/sCnt)print('計(jì)算機(jī)成績(jī)最高分:',sMax)print('計(jì)算機(jī)成績(jī)最低分:',sMin)else:print('沒有輸入任何成績(jī)。')如果sCnt>0,說明至少輸入了一個(gè)成績(jī),計(jì)算并輸出平均成績(jī)、最高分和最低分。如果sCnt==0,說明沒有輸入任何成績(jī),輸出提示信息。例3-20生成金字塔圖形本例將編寫程序,實(shí)現(xiàn)根據(jù)輸入的數(shù)字和符號(hào)生成金字塔圖形。本例代碼的實(shí)現(xiàn)原理可以分為以下幾個(gè)關(guān)鍵部分。(1)輸入驗(yàn)證和錯(cuò)誤處理:使用while循環(huán)和try-except結(jié)構(gòu)來確保用戶輸入有效的金字塔層數(shù)。通過int()函數(shù)嘗試將輸入轉(zhuǎn)換為整數(shù),如果失敗則捕獲ValueError異常。使用條件語(yǔ)句檢查輸入是否在1到10的范圍內(nèi)。(2)金字塔繪制邏輯:使用for循環(huán)遍歷從1到金字塔高度的每一層。每一層的空格數(shù)量為:金字塔高度減去當(dāng)前層數(shù)。每一層的符號(hào)數(shù)量為:2*當(dāng)前層數(shù)-1。使用字符串乘法(""*空格數(shù))和(symbol*符號(hào)數(shù))來生成每一行的內(nèi)容。使用f-string格式化字符串來組合空格和符號(hào),并打印每一行。(3)遞歸和程序控制流:繪制完金字塔后,詢問用戶是否繼續(xù)。如果用戶輸入不是x(忽略大小寫),則遞歸調(diào)用draw_pyramid()函數(shù),重新開始繪制過程。如果用戶輸入x,則打印告別信息并結(jié)束程序。(4)模塊化和入口點(diǎn):使用if__name__=="__main__":結(jié)構(gòu)作為程序的入口點(diǎn)。這確保了當(dāng)腳本作為主程序運(yùn)行時(shí)才執(zhí)行draw_pyramid()函數(shù),而作為模塊導(dǎo)入時(shí)不會(huì)自動(dòng)執(zhí)行。(5)用戶交互設(shè)計(jì):使用input()函數(shù)獲取用戶輸入,包括金字塔高度、繪制符號(hào)和繼續(xù)/退出選擇。提供清晰的提示信息,指導(dǎo)用戶操作。以上實(shí)現(xiàn)方式結(jié)合了輸入驗(yàn)證、錯(cuò)誤處理、字符串操作、循環(huán)控制和遞歸,創(chuàng)造了一個(gè)交互式、用戶友好且功能完整的金字塔繪制程序。程序設(shè)計(jì)流程展示了如何將復(fù)雜的任務(wù)分解成smaller、可管理的步驟,并通過函數(shù)封裝來組織代碼結(jié)構(gòu)。#-*-coding:utf-8-*-defdraw_pyramid():"""繪制金字塔圖形的函數(shù)"""whileTrue:try:height=int(input("請(qǐng)輸入您要顯示的金字塔層數(shù)(1~10):"))if1<=height<=10:breakelse:print("請(qǐng)輸入1到10之間的整數(shù)。")exceptValueError:print("請(qǐng)輸入有效的整數(shù)。")symbol=input("請(qǐng)輸入要顯示的符號(hào):")forlevelinrange(1,height+1):spaces=""*(height-level)symbols=symbol*(2*level-1)print(f"{spaces}{symbols}")choice=input("按x鍵離開,按任意鍵繼續(xù):")ifchoice.lower()!="x":draw_pyramid()else:print("再見!")#程序入口if__name__=="__main__":print("程序名稱:輸出金字塔圖形")draw_pyramid()輸出結(jié)果:程序名稱:輸出金字塔圖形請(qǐng)輸入您要顯示的金字塔層數(shù)(1~10):8↙請(qǐng)輸入要顯示的符號(hào):+↙++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++按x鍵離開,按任意鍵繼續(xù):x↙代碼解釋:(1)定義繪制金字塔的函數(shù)defdraw_pyramid():定義了一個(gè)名為draw_pyramid的函數(shù),用于繪制金字塔圖形。(2)獲取金字塔的層數(shù)whileTrue:try:height=int(input("請(qǐng)輸入您要顯示的金字塔層數(shù)(1~10):"))if1<=height<=10:breakelse:print("請(qǐng)輸入1到10之間的整數(shù)。")exceptValueError:print("請(qǐng)輸入有效的整數(shù)。")使用whileTrue循環(huán),不斷提示用戶輸入金字塔的層數(shù),直到輸入有效為止。使用try-except塊捕獲可能的輸入錯(cuò)誤:①如果用戶輸入的不是整數(shù),會(huì)觸發(fā)ValueError,提示用戶輸入有效的整數(shù)。②如果用戶輸入的整數(shù)不在1到10之間,提示用戶重新輸入。一旦輸入有效,通過break跳出循環(huán)。(3)獲取顯示符號(hào)symbol=input("請(qǐng)輸入要顯示的符號(hào):")提示用戶輸入一個(gè)符號(hào),用于繪制金字塔。(4)繪制金字塔forlevelinrange(1,height+1):spaces=""*(height-level)symbols=symbol*(2*level-1)print(f"{spaces}{symbols}")使用for循環(huán),從第1層到第height層。每一層的繪制邏輯:①spaces:計(jì)算當(dāng)前層前面的空格數(shù)量,公式為height-level。②symbols:計(jì)算當(dāng)前層的符號(hào)數(shù)量,公式為2*level-1。③使用格式化字符串f"{spaces}{symbols}",將空格和符號(hào)拼接后打印。(5)用戶選擇是否繼續(xù)choice=input("按x鍵離開,按任意鍵繼續(xù):")ifchoice.lower()!="x":draw_pyramid()else:print("再見!")提示用戶輸入選擇,按x鍵退出,按任意鍵繼續(xù)繪制金字塔。如果用戶輸入的不是x(忽略大小寫),則遞歸調(diào)用draw_pyramid()函數(shù),重新開始繪制。如果用戶輸入x,打印“再見!”并退出程序。(6)程序入口if__name__=="__main__":print("程序名稱:輸出金字塔圖形")draw_pyramid()檢查是否直接運(yùn)行該腳本(而不是作為模塊導(dǎo)入)。如果是直接運(yùn)行,打印程序名稱并調(diào)用draw_pyramid()函數(shù)開始繪制金字塔。例3-21分析天氣狀況本例將編寫程序,使用提供的數(shù)據(jù)分析天氣狀況。表2-1所示為南京從2025年3月14日到3月20日一周的最高和最低氣溫(單位:℃)。表2-1南京市氣溫情況最高溫度13131819202123最低溫度569111387編寫程序找出這一周中最熱的一天(按最高氣溫計(jì)算)及其溫度;最冷的一天(按最低氣溫計(jì)算)及其溫度。此外,計(jì)算全周的平均氣溫(取整)。假設(shè)在氣象學(xué)上,入春的標(biāo)準(zhǔn)是連續(xù)5天的日均氣溫超過10℃,需要根據(jù)這一周的氣象數(shù)據(jù)判斷南京是否已經(jīng)入春。分析:本例需要求取最高溫
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 46849.3-2025技術(shù)產(chǎn)品文件基于模型定義要求第3部分:設(shè)計(jì)數(shù)據(jù)
- 養(yǎng)老院入住老人心理健康監(jiān)測(cè)制度
- 人力資源管理規(guī)范制度
- 企業(yè)內(nèi)部保密工作考核制度
- 后宮介紹教學(xué)課件
- 老年人護(hù)理知識(shí)分享守護(hù)長(zhǎng)者健康
- (人教版2026新教材)二年級(jí)英語(yǔ)下冊(cè)Unit 2單元測(cè)試(含解析+聽力音頻)
- 皮革加工工安全宣教考核試卷含答案
- 熔體鎂工改進(jìn)模擬考核試卷含答案
- 尿素裝置操作工安全專項(xiàng)強(qiáng)化考核試卷含答案
- 對(duì)外話語(yǔ)體系構(gòu)建的敘事話語(yǔ)建構(gòu)課題申報(bào)書
- 江蘇交控集團(tuán)招聘筆試題
- 2026屆浙江省寧波市九校數(shù)學(xué)高一上期末監(jiān)測(cè)試題含解析
- 馬年猜猜樂(馬的成語(yǔ))打印版
- 2025-2030中國(guó)低壓變頻器行業(yè)營(yíng)銷渠道及投融資方式分析研究報(bào)告
- 2025山東恒豐銀行濟(jì)南分行社會(huì)招聘1人筆試歷年典型考題及考點(diǎn)剖析附帶答案詳解
- 渠道管理制度規(guī)范
- 2025年企業(yè)安全生產(chǎn)培訓(xùn)講義
- 精神障礙防治責(zé)任承諾書(3篇)
- GB/T 714-2025橋梁用結(jié)構(gòu)鋼
- 心臟瓣膜置換術(shù)護(hù)理查房
評(píng)論
0/150
提交評(píng)論