第3章 程序控制結(jié)構(gòu)_第1頁
第3章 程序控制結(jié)構(gòu)_第2頁
第3章 程序控制結(jié)構(gòu)_第3頁
第3章 程序控制結(jié)構(gòu)_第4頁
第3章 程序控制結(jié)構(gòu)_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章程序控制結(jié)構(gòu)董付國微信公眾號:Python小屋本章學(xué)習(xí)目標理解條件表達式的值與True/False的等價關(guān)系熟練掌握選擇結(jié)構(gòu)的語法和應(yīng)用熟練掌握for和while循環(huán)結(jié)構(gòu)的語法和應(yīng)用熟練掌握break和continue語句的作用與應(yīng)用熟練掌握異常處理結(jié)構(gòu)的語法和應(yīng)用熟練掌握選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、異常處理結(jié)構(gòu)嵌套使用的語法和應(yīng)用養(yǎng)成對用戶輸入進行有效性檢查的習(xí)慣3.1條件表達式在選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)中,都要根據(jù)條件表達式的值來確定下一步的執(zhí)行流程。選擇結(jié)構(gòu)根據(jù)不同的條件是否滿足來決定要不要執(zhí)行特定的代碼,循環(huán)結(jié)構(gòu)根據(jù)條件是否成立來決定要不要重復(fù)執(zhí)行特定的代碼。在Python中,幾乎所有合法表達式都可以作為條件表達式,包括單個常量或變量,以及使用各種運算符和函數(shù)調(diào)用連接起來的表達式。條件表達式的值等價于True時表示條件成立,等價于False時表示條件不成立。一個值等價于True是指,這個值作為內(nèi)置函數(shù)bool()的參數(shù)會使得該函數(shù)返回True。3.2選擇結(jié)構(gòu)如果細分的話,程序控制結(jié)構(gòu)包括順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)和異常處理結(jié)構(gòu)。在正常情況下,程序中的代碼是從上往下逐條語句執(zhí)行的,也就是按先后順序執(zhí)行程序中的每行代碼。如果程序中有選擇結(jié)構(gòu),可以根據(jù)不同的條件來決定執(zhí)行哪些代碼和不執(zhí)行哪些代碼。如果程序中有循環(huán)結(jié)構(gòu),可以根據(jù)相應(yīng)的條件是否滿足來決定需要多次重復(fù)執(zhí)行哪些代碼。如果有異常處理結(jié)構(gòu),可以根據(jù)是否發(fā)生錯誤以及錯誤的類型來決定應(yīng)該如何處理。選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、異常處理結(jié)構(gòu)都是臨時改變程序流程的方式。從宏觀上講,如果把每個選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)或異常處理結(jié)構(gòu)的多行代碼看作一個大的語句塊,整個程序仍是順序執(zhí)行的。從微觀上講,選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、異常處理結(jié)構(gòu)內(nèi)部語句塊中的多行簡單語句之間仍是順序結(jié)構(gòu)。3.2.1單分支選擇結(jié)構(gòu)if條件表達式:語句塊前面的代碼條件成立?語句塊后面的代碼是否3.2.1單分支選擇結(jié)構(gòu)例3-1程序員小明的妻子打電話讓小明下班路上買飯回來,和小明說“回來路上買10個包子,如果看到旁邊有賣西瓜的就買一個”。結(jié)果,小明回到家后妻子發(fā)現(xiàn)他只買了一個包子,問他怎么回事,小明說“我看到旁邊有賣西瓜的”。編寫程序模擬小明的腦回路。#要買的包子數(shù)量num=10flag=input('有賣西瓜的嗎?輸入Y/N:')ifflag=='Y':num=1print(f'實際買的包子數(shù)量為:{num}')3.2.2雙分支選擇結(jié)構(gòu)if條件表達式:語句塊1else:語句塊2前面的代碼條件成立?語句塊2后面的代碼是否語句塊13.2.2雙分支選擇結(jié)構(gòu)例3-2周五晚上放學(xué)時,小明和小強兩位同學(xué)相約周六的安排,說好如果不下雨就一起打羽毛球,如果下雨就一起寫作業(yè)。周六早上,兩個人根據(jù)是否下雨來決定最終要做的事情。編寫程序,輸入Y表示下雨、N表示不下雨,模擬二人做決定的過程,并輸出二人的最終決定。flag=input('今天下雨嗎?輸入Y/N:')ifflag=='Y':print('一起寫作業(yè)。')else:print('一起打羽毛球。')3.2.3嵌套的選擇結(jié)構(gòu)if條件表達式1:語句塊1elif條件表達式2:語句塊2[elif條件表達式3:語句塊3......else:語句塊n]if條件表達式1:語句塊1if條件表達式2:語句塊2[else:語句塊3]else:if條件表達式4:語句塊4[elif條件表達式5:語句塊5else:語句塊6]3.2.3嵌套的選擇結(jié)構(gòu)例3-3對學(xué)生作業(yè)或考試進行打分時,一般有百分制和字母等級兩種方式。這兩種打分標準之間有一定的對應(yīng)關(guān)系,例如[90,100]區(qū)間對應(yīng)字母A,[80,90)區(qū)間對應(yīng)字母B,[70,80)區(qū)間對應(yīng)字母C,[60,70)區(qū)間對應(yīng)字母D,[0,60)區(qū)間對應(yīng)字母F。編寫程序,輸入一個百分制成績,輸出對應(yīng)的字母等級。3.2.3嵌套的選擇結(jié)構(gòu)score=float(input('請輸入一個百分制成績:'))ifscore<0orscore>100:print('無效成績')else:#如果score本來的值是實數(shù),例如81.5#整除10之后得到8.0形式的數(shù)字,不影響后續(xù)的計算score=score//10ifscorein(9,10):print('A')elifscore==8:print('B')elifscore==7:print('C')elifscore==6:print('D')else:print('F')3.2.4多分支選擇結(jié)構(gòu)在Python3.9之前的版本中,沒有提供真正意義上的的多分支選擇結(jié)構(gòu),如果確實需要的話,可以通過字典構(gòu)造跳轉(zhuǎn)表來實現(xiàn)。例如下面的代碼,status={200:'ok',201:'Created',202:'Accepted',203:'Non-AuthoritativeInformation',204:'NoContent'}s=int(input('請輸入狀態(tài)碼:'))print('對應(yīng)的狀態(tài)為:',status.get(s,'unknown'))Python3.10新增了軟關(guān)鍵字(只在特定場合作為關(guān)鍵字,普通場合也可以作變量名)match和case,實現(xiàn)了真正意義上的多分支選擇結(jié)構(gòu)。3.2.4多分支選擇結(jié)構(gòu)例3-4編寫程序,使用多分支選擇結(jié)構(gòu)實現(xiàn)HTTP狀態(tài)碼到含義的轉(zhuǎn)換。code=int(input('請輸入HTTP狀態(tài)碼:'))matchcode:case200:print('ok')case201:print('Created')case202:print('Accepted')case203:print('Non-AuthoritativeInformation')case204:print('NoContent')case401|403|404:#同時匹配401、403、404這三種情況print('Notallowed')case_:#通配符,表示任意內(nèi)容,如果前面的都不匹配,就執(zhí)行這里的代碼print('Sorry,pleasetrylater.')3.2.4多分支選擇結(jié)構(gòu)下面的代碼演示了下畫線在元組中表示任意內(nèi)容的用法:while(point:=input('表示三維空間坐標的元組,0表示結(jié)束:'))!='0':point=eval(point)matchpoint:case(0,0,0):print('坐標原點')case(0,_,_):print('YOZ平面上的點')case(_,0,_):print('XOZ平面上的點')case(_,_,0):print('XOY平面上的點')3.2.4多分支選擇結(jié)構(gòu)在match...case...多分支選擇結(jié)構(gòu)中,下畫線除了上面的用法之外,還可以和星號組合使用,例如下面的代碼中“*_”表示從當(dāng)前位置往后還有0到任意多項:while(content:=eval(input('請輸入列表:')))!=0:matchcontent:case[1,2,3,4,*_]:print('前4項匹配成功')case[1,2,3,*_]:print('前3項匹配成功')case[1,2,*_]:print('前2項匹配成功')case[1,*_]:print('前1項匹配成功')case[*_]:print('匹配失敗')case_:print('格式不對')3.2.4多分支選擇結(jié)構(gòu)在下面的代碼中,使用if對當(dāng)前匹配項進行約束,如果條件不成立就繼續(xù)檢查下一項是否匹配,其中的x和y可以是任意變量名。match(3,5):case(x,y)ifx<y:print('<')case(x,y)ifx==y:print('==')case(x,y)ifx>y:print('>')3.3循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)根據(jù)指定的條件是否滿足來決定是否需要重復(fù)執(zhí)行特定的代碼,Python中主要有for循環(huán)和while循環(huán)兩種形式。循環(huán)結(jié)構(gòu)可以嵌套,也可以和選擇結(jié)構(gòu)以及異常處理結(jié)構(gòu)互相嵌套,來表示更加復(fù)雜的業(yè)務(wù)邏輯。如果使用嵌套循環(huán)結(jié)構(gòu)的話,最外層的循環(huán)變化最慢,越內(nèi)層的循環(huán)變化速度越快。3.3.1for循環(huán)結(jié)構(gòu)Python語言中的for循環(huán)非常適合用來遍歷可迭代對象中的元素,語法形式為:for循環(huán)變量in可迭代對象:循環(huán)體[else:else子句代碼塊]其中,方括號內(nèi)的else子句可以沒有,也可以有,根據(jù)要解決的問題來確定。for循環(huán)結(jié)構(gòu)執(zhí)行過程為:對于可迭代對象中的每個元素(使用循環(huán)變量引用),都執(zhí)行一次循環(huán)體中的代碼。在循環(huán)體中可以使用循環(huán)變量,也可以不使用循環(huán)變量。3.3.1for循環(huán)結(jié)構(gòu)如果for循環(huán)結(jié)構(gòu)帶有else子句,其執(zhí)行過程為:如果循環(huán)因為遍歷完可迭代對象中的全部元素而自然結(jié)束,則繼續(xù)執(zhí)行else結(jié)構(gòu)中的語句,如果是因為執(zhí)行了break語句提前結(jié)束循環(huán)則不會執(zhí)行else中的語句。在for循環(huán)結(jié)構(gòu)中定義的循環(huán)變量在循環(huán)結(jié)構(gòu)結(jié)束之后仍可以訪問,只要不超出當(dāng)前函數(shù)或文件即可;交互模式中for循環(huán)定義的循環(huán)變量在重啟Shell之前一直有效。3.3.2while循環(huán)結(jié)構(gòu)Python語言中的while循環(huán)結(jié)構(gòu)主要適用于無法提前確定循環(huán)次數(shù)的場合,一般不用于循環(huán)次數(shù)可以確定的場合,雖然也可以這樣用。While循環(huán)結(jié)構(gòu)的語法形式如下:while條件表達式:循環(huán)體[else:else子句代碼塊]其中,方括號內(nèi)的else子句可以沒有,也可以有,取決于具體要解決的問題。當(dāng)條件表達式的值等價于True時就一直執(zhí)行循環(huán)體,直到條件表達式的值等價于False或者循環(huán)體中執(zhí)行了break語句。如果是因為條件表達式不成立而結(jié)束循環(huán),就繼續(xù)執(zhí)行else中的代碼塊。如果是因為循環(huán)體內(nèi)執(zhí)行了break語句使得循環(huán)提前結(jié)束,則不再執(zhí)行else中的代碼塊。3.3.2while循環(huán)結(jié)構(gòu)例3-5小明買回來一對兔子,從第3個月開始就每個月生一對兔子,生的每一對兔子長到第3個月也開始每個月都生一對兔子,每一對兔子都是這樣從第3個月開始每個月生一對兔子,那么每個月小明家的兔子總數(shù)構(gòu)成一個數(shù)列,這就是著名的斐波那契數(shù)列,如圖3-3所示。編寫程序,輸入一個正整數(shù),輸出斐波那契數(shù)列中小于該整數(shù)的所有整數(shù)。3.3.2while循環(huán)結(jié)構(gòu)number=int(input('請輸入一個正整數(shù):'))#序列解包,同時為多個變量賦值a,b=1,1whilea<number:print(a,end='')#序列解包a,b=b,a+b連續(xù)三次運行結(jié)果如下:請輸入一個正整數(shù):10001123581321345589144233377610987請輸入一個正整數(shù):3500112358132134558914423337761098715972584請輸入一個正整數(shù):10000112358132134558914423337761098715972584418167653.3.3break與continue語句break語句和continue語句在while循環(huán)和for循環(huán)中都可以使用,并且一般常與選擇結(jié)構(gòu)或異常處理結(jié)構(gòu)結(jié)合使用,但不能在循環(huán)結(jié)構(gòu)之外使用這兩個語句。一旦break語句被執(zhí)行,將使得break語句所屬層次的循環(huán)結(jié)構(gòu)提前結(jié)束;如果break語句所在的循環(huán)帶有else子句,那么執(zhí)行break之后不會執(zhí)行else子句中的代碼。continue語句的作用是提前結(jié)束本次循環(huán),忽略continue之后的所有語句,提前進入下一次循環(huán)。3.3.3break與continue語句例3-6編寫程序,輸出500以內(nèi)最大的素數(shù)(即499)。所謂素數(shù),是指除了1和自身之外沒有其他因數(shù)的正整數(shù),最小的素數(shù)是2??梢宰C明,如果一個正整數(shù)n是素數(shù),那么從2到n的平方根之間必然沒有因數(shù)。forninrange(500,1,-1):

#從大到小遍歷ifn%2==0andn!=2:continueforiinrange(3,int(n**0.5)+1,2):ifn%i==0:#如果有n的因數(shù),n就不是素數(shù)break#提前結(jié)束內(nèi)循環(huán)else:#如果內(nèi)循環(huán)自然結(jié)束,繼續(xù)執(zhí)行這里的代碼print(n)#輸出素數(shù)break#結(jié)束外循環(huán)3.3.4循環(huán)結(jié)構(gòu)優(yōu)化編寫程序?qū)崿F(xiàn)預(yù)定功能之后應(yīng)考慮對代碼進行優(yōu)化以追求更高的執(zhí)行效率。解決實際問題時,首先應(yīng)對問題進行全面、深入分析,得到最優(yōu)的算法之后再動手寫代碼。在代碼層面也有很多優(yōu)化的思路,例如使用合適的數(shù)據(jù)類型、利用緩存機制、只導(dǎo)入模塊中確實用到的對象、減少不必要的計算等。具體到循環(huán)結(jié)構(gòu),應(yīng)盡量減少循環(huán)體中的重復(fù)計算,能在循環(huán)外進行的計算就不要放到循環(huán)體中,能在外循環(huán)中進行的計算就不要放到內(nèi)循環(huán)中。3.3.4循環(huán)結(jié)構(gòu)優(yōu)化下面的代碼用來生成幾個數(shù)字能夠組成的所有3位數(shù),digits=(1,2,3,4,5)foriindigits:forjindigits:forkindigits:print(i*100+j*10+k)在上面的代碼中,最內(nèi)層循環(huán)中的乘法計算就屬于不必要的重復(fù)計算,可以考慮往外提,修改為下面的代碼,從而獲得更高的執(zhí)行效率。digits=(1,2,3,4,5)foriindigits:i=i*100forjindigits:j=i+j*10forkindigits:print(j+k)3.4異常處理結(jié)構(gòu)--3.4.1異常概念與表現(xiàn)形式異常是指代碼運行時由于輸入的數(shù)據(jù)不合法或者某個條件臨時不滿足發(fā)生的錯誤。例如,除法運算中除數(shù)為0,變量名不存在或拼寫錯誤,要打開的文件不存在、權(quán)限不足或者用法不對(例如試圖寫入以只讀模式打開的文件),操作數(shù)據(jù)庫時SQL語句語法不正確或指定的表名、字段名不存在,要求輸入整數(shù)但實際輸入的內(nèi)容無法使用內(nèi)置函數(shù)int()轉(zhuǎn)換為整數(shù),要訪問的屬性不存在,文件傳輸過程中網(wǎng)絡(luò)連接突然斷開,這些情況都會引發(fā)代碼異常。代碼一旦引發(fā)異常就會崩潰,如果得不到正確的處理會導(dǎo)致整個程序中止運行。3.4.1異常概念與表現(xiàn)形式一般而言,在異常信息的最后一行明確給出了異常的類型或者導(dǎo)致錯誤的原因,倒數(shù)第二行會給出導(dǎo)致崩潰的那一行代碼。把下面的代碼保存為文件“測試.py”并運行。values=eval(input('請輸入一個列表:'))num=int(input('請輸入一個整數(shù):'))print('最后一次出現(xiàn)的位置:',values.rindex(num))3.4.2異常處理結(jié)構(gòu)語法與應(yīng)用(1)try...except...else...finally...異常處理結(jié)構(gòu)的完整語法形式如下:try:#可能會引發(fā)異常的代碼塊except異常類型1as變量1:#處理異常類型1的代碼塊[except異常類型2as變量2:#處理異常類型2的代碼塊....][else:#如果try塊中的代碼沒有引發(fā)異常,就執(zhí)行這里的代碼塊][finally:#不論try塊中的代碼是否引發(fā)異常,也不論異常是否被處理#總是最后執(zhí)行這里的代碼塊]3.4.2異常處理結(jié)構(gòu)語法與應(yīng)用(2)assert斷言在程序中某些位置,可能需要某個條件必須得到滿足才能繼續(xù)執(zhí)行后面的代碼。這時,可以使用斷言語句assert來確認某個條件是否滿足,要求的條件滿足時不會有任何提示,什么也不會發(fā)生,默默地繼續(xù)執(zhí)行后面的代碼,如果要求的條件不滿足則會引發(fā)異常。斷言語句assert的語法形式如下:assertcondition,information其中,condition可以是任何表達式,assert要求這個表達式的值必須等價于True,否則就會引發(fā)異常,information用來指定異常具體信息的字符串。3.4.2異常處理結(jié)構(gòu)語法與應(yīng)用>>>assert3==5,'兩個數(shù)字不相等'AssertionError:兩個數(shù)字不相等>>>a=input('輸入密碼:')輸入密碼:1234>>>b=input('再輸入一次密碼:')再輸入一次密碼:12345>>>try:asserta==bexcept:print('兩次輸入的密碼不一樣')兩次輸入的密碼不一樣>>>assertint(a:=input('請輸入一個大于0的正整數(shù):'))>0請輸入一個大于0的正整數(shù):3>>>print(a)33.4.2異常處理結(jié)構(gòu)語法與應(yīng)用(3)raise關(guān)鍵字關(guān)鍵字raise可以用來在程序中顯式引發(fā)異?;蛘咧匦聮伋鲎詈笠粋€異常。如果raise關(guān)鍵字后面沒有任何表達式就重新拋出當(dāng)前程序執(zhí)行過程中最后一個異常,如果當(dāng)前沒有異常就簡單地拋出一個RuntimeError表示發(fā)生了錯誤。#當(dāng)前沒有異常,直接拋出RuntimeError>>>raiseRuntimeError:Noactiveexceptiontoreraise#重新拋出最后發(fā)生的一個錯誤>>>try:print('A'+32)except:raiseTraceback(mostrecentcalllast):File"<pyshell#19>",line2,in<module>print('A'+32)TypeError:canonlyconcatenatestr(not"int")tostr3.5綜合例題解析例3-7編寫程序,接收一個正整數(shù)n,輸出所有的n位水仙花數(shù)。如果一個n位正整數(shù)的各位數(shù)字的n次方之和等于這個數(shù)字本身,那么這個正整數(shù)是水仙花數(shù)。例如153是3位水仙花數(shù),因為153=1^3+5^3+3^3,再例如370、371、407都是3位水仙花數(shù),1634、8208、9474是4位水仙花數(shù),54748、92727、93084是5位水仙花數(shù),只有548834這一個6位水仙花數(shù),7位水仙花數(shù)有1741725、4210818、9800817、9926315。3.5綜合例題解析fromtimeimporttimetry:n=int(input('請輸入一個正整數(shù):'))assertn>0except:print('輸入的不是正整數(shù)。')else:func=lambdad:int(d)**n#記錄當(dāng)前時間start=time()#遍歷所有n位正整數(shù)fornuminrange(10**(n-1),10**n):ifsum(map(func,str(num)))==num:print(num)#記錄當(dāng)前時間end=time()#輸出兩次調(diào)用time()函數(shù)的時間差,也就是中間一段代碼的運行時間print(f'用時:{end-start}秒')運行結(jié)果為:請輸入一個正整數(shù):8246780502467805188593477用時:428.76689076423645秒3.5綜合例題解析例3-8編寫程序,打印九九乘法表。foriinrange(1,10):forjinrange(1,i+1):#{i*j:<2d}表示計算并替換表達式i*j的值#把計算結(jié)果格式化為2位字符串,不足2位的使用空格填充#<表示左對齊,也就是在右側(cè)填充空格print(f'{i}*{j}={i*j:<2d}',end='')print()3.5綜合例題解析例3-9編寫程序,求解雞兔同籠問題。通過鍵盤輸入雞和兔的總數(shù)以及腿的數(shù)量,計算并輸出雞、兔各有多少只。在數(shù)學(xué)上,這是個二元一次方程組的求解問題,假設(shè)使用m表示雞和兔的頭的數(shù)量,使用n表示腿的數(shù)量,使用x表示雞的數(shù)量,使用y表示兔的數(shù)量,那么方程求解的過程為:3.5綜合例題解析try:m=int(input('請輸入雞和兔的總數(shù):'))n=int(input('請輸入籠子里腿的總數(shù):'))except:print('兩個數(shù)字必須都是整數(shù)。')else:y=(n-2*m)/2x=m-yify==int(y)andy>0andx>0:print(f'雞{x}只,兔{y}只。')else:print('無解。')運行結(jié)果為:請輸入雞和兔的總數(shù):30請輸入籠子里腿的總數(shù):90雞15.0只,兔15.0只。3.5綜合例題解析例3-10編寫程序,計算百錢買百雞問題。假設(shè)公雞5元一只,母雞3元一只,小雞1元三只,現(xiàn)在有100塊錢,想買100只雞,輸出所有可能的購買方案。#假設(shè)能買x只公雞,x最大為20forxinrange(21):#假設(shè)能買y只母雞foryinrange((100-5*x)//3+1):#假設(shè)能買z只小雞z=100-x-y#仔細體會兩個條件的先后順序ifz%3==0and(5*x+3*y+z//3==100):print(f'公雞{x}只,母雞{y}只,小雞{z}只')運行結(jié)果為:公雞0只,母雞25只,小雞75只公雞4只,母雞18只,小雞78只公雞8只,母雞11只,小雞81只公雞12只,母雞4只,小雞84只3.5綜合例題解析例3-11編寫程序,輸入一個正整數(shù)n,然后計算前n個正整數(shù)的階乘之和1!+2!+3!+...+n!的值。try:n=int(input('請輸入一個正整數(shù):'))assertn>0except:print('必須輸入正整數(shù)。')else:#result表示前n項的和,temp表示每一項result,temp=0,1#充分利用相鄰兩項之間的關(guān)系,減少不必要的計算,提高執(zhí)行效率foriinrange(1,n+1):temp=temp*iresult=result+tempprint(result)連續(xù)幾次運行結(jié)果為:請輸入一個正整數(shù):433請輸入一個正整數(shù):302744108184701421342097037809403133.5綜合例題解析例3-12編寫程序,驗證6174猜想。1955年,卡普耶卡(D.R.Kaprekar)對4位數(shù)字進行了研究,發(fā)現(xiàn)一個規(guī)律:對任意各位數(shù)字不相同的4位數(shù),使用各位數(shù)字能組成的最大數(shù)減去能組成的最小數(shù),對得到的差重復(fù)這個操作,最終會得到6174這個數(shù)字,并且這個操作最多不會超過7次。3.5綜合例題解析fromstringimportdigitsfromitertoolsimportcombinationsforitemincombinations(digits,4):times=0whileTrue:#當(dāng)前選擇的4個數(shù)字能夠組成的最大數(shù)和最小數(shù)big=int(''.join(sorted(item,reverse=True)))little=int(str(big)[::-1])difference=big-littletimes=times+1#如果最大數(shù)和最小數(shù)相減得到6174就退出#否則就對得到的差重復(fù)這個操作#最多7次,總能得到6174ifdifference==6174:iftimes>7:print(times)break

溫馨提示

  • 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

提交評論