資源簡介 課時5 For循環語句及程序實現課時目標1.掌握for循環語句的語法格式,理解for循環的功能。2.理解range函數的功能,掌握使用range函數準確表示循環的區間及循環次數。3.理解break語句和continue語句的作用,并能簡單使用。4.熟練使用for循環語句解決實際問題。一、for循環語句的格式for <變量> in <序列>: <循環體>for語句通過遍歷序列中的元素實現循環,并通過序列的元素數量來控制循環次數。循環體中的語句要向右縮進,且縮進量要一致。二、for循環語句的功能for循環語句的功能是將序列對象中的元素逐個賦給目標變量,對每一次賦值都執行一遍循環體語句塊,當序列被遍歷完,即每一個元素都被用過了,則結束循環,然后執行循環體后面的語句。1.for循環語句是通過次數來控制循環的執行過程,即循環的次數可預先計算出。2.通過遍歷任意序列的元素來建立循環結構,針對序列的每一個元素執行一次循環體。3.列表、字符串、元組都是序列,可以利用它們來建立循環。三、range函數1.range函數格式range(起始值,終值,步長值)2.range函數功能range函數用于產生一個序列,由三個參數(起始值、終值、步長值)來決定序列中元素的個數和范圍。range函數的參數必須為整數。若起始值缺省,則默認為0。步長值是序列中每個元素之間的差,若缺省,則默認為1。range函數返回的是可迭代對象,range(n)等價于range(0,n),產生的連續整數序列為:0,1,2,…,n-1。四、break語句和continue語句break和continue語句的作用是改變控制流程。當break語句在循環結構中執行時,它會立即跳出循環結構,轉而執行循環結構后面的語句。與break語句不同,當continue語句在循環結構中執行時,并不會退出循環結構,而是立即結束本次循環,重新進入下一輪循環,也就是說,跳過循環體中在continue語句之后的所有語句,繼續下一輪循環。break語句用來強行退出循環,即序列還沒被完全遍歷完成或循環條件仍然為真時,用來強行退出循環。五、for循環使用示例1.遍歷列表建立循環weeklist=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]for day in weeklist: print("week:",day)2.遍歷字符串建立循環for i in "Python": print(i)3.通過range對象建立列表for i in range(10): print(i)例1 通過調查發現,人們普遍認為帶有數字2、6、8的車牌比較吉利,而帶有數字4的車牌則不吉利。小石想通過編寫程序來計算車牌的吉利值:其中數字2吉利值為1,數字6吉利值為2,數字8吉利值為3,數字4的吉利值為-2,其他數字吉利值為0。如車牌號“浙H94286”的吉利值為4。程序代碼如下:dic={ "2":1,"6":2,"8":3,"4":-2 }cp=input("請輸入車牌號(格式如“浙H94286”):")count=0 for i in range(2,① ): x=cp[i] if x in ["2","4","6","8"]: count+=② print("該車牌號的吉利值為:",count)為實現功能,劃線處代碼應為 ( )A.①len(cp)-1 ②dic[x]B.①len(cp) ②dic[int(x)]C.①len(cp)-1 ②dic[int(x)]D.①len(cp) ②dic[x]答案 D解析 本題考查字典和列表的應用。cp是輸入的車牌號,要遍歷車牌中每個號碼,車牌的最后一個號碼索引位置是len(cp)-1,但range結束位置是取不到的。x本身就是字符串類型,是字典dic的鍵,因此不能轉換為數值。變式訓練1 有如下Python程序段:ch="2nd-ucDOSy3t"res=""for i in range(len(ch)): if "a"<=ch[i]<="z": res=res+ch[i]print(res)該程序段的功能是輸出字符串ch中的 ( )A.所有小寫字母 B.小寫字母的個數C.所有數字之和 D.所有非數字字符答案 A解析 本題考查range函數的使用以及程序基本代碼的閱讀能力。根據range函數的參數,是從字符串ch中從索引0開始,依次取出下標為0、1、2……位置的字符,如果字符是小寫,將它按順序依次拼接到字符串res中。所以答案為A。例2 完全數。如果一個正整數所有的真因子(即除了自身以外的約數)的和等于它本身,則稱該數為“完全數”。輸入一個數,判斷該數是否是完全數,如果是完全數,輸出全部的真因子。程序代碼如下:n=int(input("輸入一個正整數:"))yzlist=[]t=0for i in range(1,n): if n % i==0: zylist.append(i) #將i的值添加到列表yzlist t=① if② : print("該數是完全數!") for i in yzlist: print(i)else: print("該數不是完全數!")(1)完善程序劃線處代碼。(2)按照上述算法,輸入28,該數 (填:是/不是)完全數。 答案 (1)①t=t+i ②t==n (2)是解析 (1)從1至n~1之間的所有數進行遍歷,如果能整除,則進行累加,最后將累加的t和n進行比較,如果相等,則表示整數n是完全數,否則不是完全數。觀察程序可知,如果整數n是完全數,則輸出列表yzlist中的元素,因此在遍歷過程中,要將真因子i追加到列表yzlist中,并將真因子累加到變量t中,故①處代碼為t=t+i;如真因子之和t等于正整數n本身,則n是完全數,因此②處代碼為t==n。(2)輸入28,得到28=1+2+4+7+14,因此28是完全數。變式訓練2 水仙花數。所謂的水仙花數是指一個三位數整數,它的個位數、十位數和百位數的立方和等于該數本身。輸出所有的水仙花數,統計并輸出統計個數。實現上述功能的程序如下,請在程序劃線處填入合適的代碼。count=0for i in① : a=i∥100 b=i%10 ② if a**3+b**3+c**3==i: ③ print(i)print("total:",count)答案 ①range(100,1000) ②c=i∥10%10 或c=i%100∥10 ③count=count+1解析 水仙花數是一個三位數整數,因此for循環變量i的范圍為[100,999],即①處代碼為range(100,1000);變量a為三位數i的百位上的數字,b為個位上的數字,②處表示求三位數i的十位上的數字,方法有多種,可以寫為c=i∥10%10,也可以寫為c=i%100∥10等;③處表示統計水仙花數的個數,根據print()語句可知,統計結果存放在變量count中,因此③處語句為count=count+1。例3 某條形碼共有13位數字組成,其中第13位數字表示校驗碼。校驗碼的計算方法:先計算前12位數字中偶數位數字和奇數數字之和,再把偶數位和乘以3與奇數位和相加,再對相加之和除以10求余數,再用10減去該余數得到校驗碼值。輸入條形碼,輸出結論。實現上述功能程序代碼如下所示,請回答下列問題。txm=input("請輸入條形碼!")p,q=0,0if len(txm)==13: for i in range(0,① ): if (i+1)%2==1: p+=int(txm[i]) else: q+=int(txm[i]) yz=10-(p+q*3)%10 if② : print("驗證成功!") else: print("驗證失敗!")else: print("輸入條形碼不正確")(1)在程序劃線處填入合適的代碼。(2)按照上述算法,輸入條形碼為“2900101074031”,則輸出的提示信息是 。 答案 (1)①len(txm)-1 ②yz==int(txm[12])或yz==int(txm[len(txm)-1] (2)驗證成功!解析 用For循環遍歷整個字符串的前12位,注意區間的終值。當i是偶數時,把其中的奇數位相加到q中,最后把奇數位和與偶數位和的3倍相加除10取余,用10減去余數作為驗證碼。輸入2900101074031,奇數位數字之和為2+0+1+1+7+0=11,偶數位數字之和為9+0+0+0+4+3=16,校驗碼yz=10-(11+16*3)%10=1,與條形碼中第13位數字相等,因此驗證成功。變式訓練3 某Python程序如下: p ="Tel-114" c=" " for ch in p: if ch>= "0" and ch<= "9": c+=str(9-int(ch)) elif ch>= "a" and ch<= "z": c+= chr(ord(ch)- ord("a")+ord("A")) else: c+=chprint(c)程序運行后,輸出的結果是 ( )A.tEL-885 B.tEL-114C.TEL-114 D.TEL-885答案 D解析 本題考查循環結構和多分支選擇結構。若ch是數字,則轉換成9減去該數。若是小寫字母,轉換成大寫字母,其余不變。 1.有如下Python程序段:dic={"apple":5,"cake":10,"computer":3000}lis=[[1,2,3],"apple","computer",[8,0,9]]ans=0for i in lis: if len(i)<=3: ans+=i[-1] elif i in dic: ans+=dic[i]print(ans)執行該程序段后,輸出結果是 ( )A.3005 B.12 C.3014 D.3017答案 D2.下列Python程序段功能為:列表a中存放的是無重復的非負整數,找出其中的最大值max1和次大值max2。max1 = max2 = 0for i in range(len(a)): if a[i] > max1: (1) (2) elif a[i] > max2: (3) print("最大值為:"+str(max1)+"次大值:"+str(max2))上述程序段中方框處可選語句為:①max1=a[i] ②max2=a[i] ③max2=max1 ④max1=max2則(1)、(2)、(3)處語句依次可為 ( )A.①④② B.①③② C.③①② D.①②④答案 C3.有如下Python程序段:list=[2, 1, 3, 4, 5, 7, 12, 14, 26, 37, 63]c=0for i in range(2, 11, 2) : if list[i-2]+list[i-1]==list[i]: c+=1print(c)該程序段運行結果為 ( )A.2 B.4 C.6 D.8答案 B4.有如下Python程序段:import turtlen=int(input("輸入 n:"))for i in range(n*3): turtle.forward(100) turtle.left(360∥n+2)turtle.hideturtle()若輸入 n 的值為 4,則繪制的圖形為以下哪一項 ( )答案 C5.有如下Python程序段:m=int(input("請輸入一個正整數: "))s=0for i in range(1 ,m): if i% 2 == 0 : s=s+i elif i% 3 == 0 : i=i+1 s=s+1print(s)若輸入m的值為6,執行該程序段后,輸出的結果是 ( )A.7 B.11 C.13 D.18答案 B6.有如下Python程序段:s='wenzhou';s1='';n=len(s)for i in range(n∥2,0,-1): if s[i-1] s1=s1+s[i-1] else: s1=s1+s[n-i]print(s1)運行程序后,輸出的內容是 ( )A.hew B.now C.heu D.neu答案 C7.有如下Python程序段:s=input('請輸入數據:')t=s[0]maxt=0for i in range(len(s)): if s[i]>s[i-1]: t+=s[i] if len(t)>maxt: maxt=len(t) ans=t else: t=s[i]print(ans)執行該程序段后,輸入“12123234561”,輸出的內容是 ( )A.23456 B.12123 C.34561 D.1212323答案 A8.查找素數能夠很好地體現出計算機解決某些數學問題的速度優勢,除了計算機性能以外,設計更加簡單的算法也能夠提高計算機解決某些問題的速度。某種素數算法就是通過“開關”的思想,例如求100以內的所有素數,采用列表來表示[1,1,1,1,……,1,1,1],列表的索引值表示0-99中的每個數,1表示“開”即為素數(先假設都為素數),從2(0和1不是素數)開始,因為索引2號對應的值為1,則2是素數,再將后面能夠被2整除的索引對應的值都改為0,依次類推……以下程序就是采用這種思路編寫的輸出1000以內的所有素數的程序:lst1=[] #存放每個數的開關lst2=[] #存放找到的素數lst1=[1]*1000 #初始化開關列表for i in range(2,1000): if lst1[i]==1: lst2.append(i) lst1[j]=0print(lst2) #輸出所有1000以內的素數上述程序橫線處的合適代碼為 ( )A.if lst1[j]%i==0:B.if lst1[i]%i==0:C.for j in range(i,1000,i):D.for j in range(i+1,1000,i):答案 C9.下列表格中有①②③④共4段Python代碼,①實現的功能是( ) ②實現的功能是( )for i in range(6): t.circle(100) #畫半徑為100圓 t.left(60) x=50for i in range(6): x=x+10 #x在原來基礎上增加10 t.circle(x) #畫半徑為x圓③實現的功能是( ) ④實現的功能是( )x=50for i in range(12): x=x+10 t.forward(x) t.left(90) for i in range(6): for j in range(3): t.forward(100) t.left(120) t.left(60)實現畫出下表所示的圖形,將ABCD分別填入上表的括號中。答案 ①D ②A ③B ④C10.在傳遞信息的過程中,通常會將一些敏感信息進行加密,以下是對數據進行加密的Python程序段,若輸入數據為“my789”,則輸出的內容為 ( )s=input("輸入明文:")t=""for ch in s: if "0"<=ch<="9": x=int(ch)+3 if x>=10: x=x%10 ch=str(x) t=t+chprint (t)A.my123 B.my012 C.pa012 D.pa123答案 B解析 本題考查讀取Python程序的能力。逐個訪問字符串將其中的數字加3,如果該數大于等于10,對結果進行除10取余。11.有如下 Python 程序段:s = input("請輸入一串字符串:")f = Truefor i in range(len(s)//2): if s[i] != s[len(s)-i-1]: f = False breakprint(f)若執行該程序后, 輸出的結果是“True”,則輸入的字符串可能是A."onion" B."hello" C."278" D."111"答案 D12.有如下Python程序段:s='nftisa';a=[2,3,1,4];ans=''for i in range(len(s)): t=i%4 ans=ans+s[a[t]]print(ans)程序運行結束后,ans的值為 ( )A.itsfit B.tifsti C.nisisa D.tisias答案 B13.某Python程序代碼如下:list1=[2,3,4,5,6]m1=1;m2=2for n in list1: if n%3==0: m1*=nprint(m1-m2)程序運行后,輸出的結果為 答案 1614.現有一程序模擬競猜某商品價格,總共有五次競猜機會。請在劃線處填入合適的代碼。import randoma=random.randint(0, 100)chance=5print("共%d 次機會" % (chance))for i in ① : b=int(input("請輸入一個整數:")) if a print("大啦!!!還剩%d 次機會"%(chance-i)) elif a>b: print("小啦!!!還剩%d 次機會"%(chance-i)) else: print("恭喜您,答對啦!!!數字是%d,共用次數%d"%(a,i)) ② #結束循環 答案 ①range(1,chance+1,1)或range(1,chance+1)或range(1,6)或range(1,6,1) ②break 一、基礎鞏固1.有Python程序如下:lst=[1,6,2,9,3,5,2]k,s=1,0m=len(lst)∥2for i in range(m): s+=lst[m+k]-lst[m-k] k+=1print(s)運行該程序,輸出結果是 ( )A.1 B.-1 C.14 D.-14答案 A解析 本題考查列表的遍歷。m=len(lst)∥2,是中間位置3。m+k和m-k表示中間兩側對稱的索引號。循環3次,依次是3-2,5-6,2-1,把這些差值進行累加。2.有下列Python程序代碼:word=["my","Label","Name","nose","nice"]n=0for ch in word: if ch[0]=="n": n=n+1print(n)執行上述代碼后,輸出的內容是 ( )A.2 B.-2 C.1 D.-1答案 A解析 程序遍歷列表中的內容,并查找以n開頭的字母個數,但字母區分大小寫。3.有如下Python程序段:a[7]=49;a[6]=28sum=1for i in range(5,1,-1): a[i]=a[i+2]-a[i+1] if a[i] % 3==0: sum=sum+a[i]print (a)執行該程序段后,變量a的值為 ( )A.22B.43C.[0,0,-7,14,7,21,28,49]D.[-7,14,7,21,28,49]答案 C4.求列表lis第 3 項至第 7 項元素的和lis=[6,3,-2,5,19,21,-9,22,14,25]he=[0]*10he[0]=lis[0]for i in range(1,len(lis)): he[i]= he[i-1]+lis[i]print( ) 劃線處正確的 Python 表達式是 ( )A. he[7]-he[3] B. he[6]-he[2]C. he[7]-he[2] D. he[6]-he[1]答案 D5.利用海龜作圖繪制一個正n邊形,import turtlen=int(input("請輸入正多邊形的邊數n: "))a=int( input("請輸入邊長a:"))d=(n-2)*180/n #正多邊形內角計算公式t=turtle.Pen()for i in range(n): #① t.forward(a) #② t.left(d) #③turtle.done() #④已知有一行代碼有錯,位置是 ( )A.① B.② C.③ D.④答案 C6.有如下Python程序段:s=0for i in range(10): if i%3==0: s+=1 else: continueelse: s+=1print(s)執行該程序段后,輸出的結果是 ( )A.3 B.4 C.5 D.6答案 C7.有Python代碼如下:a=[6,3,7,5]b=[0,1,2,3]for i in range(3,0,-1): if a[b[i]]>a[b[i-1]]: b[i],b[i-1]=b[i-1],b[i]print(b)則運行結果是 ( )A.[3,2,1,0] B.[1,3,0,2]C.[2,0,3,1] D.[2,0,1,3]答案 D8.某Python程序如下:s="san xian lian meng."dic={}for i in s: if i in dic: dic[i]+=1 else: dic[i]=1在輸出的字典 dic 中,dic["n"]的值為 ( )A.1 B.2 C.3 D.4答案 D解析 字典的訪問和修改只能通過"鍵”來訪問,字典沒有索引。9.有如下Python程序段:s="Python"dic={"t":1,"y":2,"o":3,"P":4,"p":5,"h":6,"n":7}list=[3,7,1,6,3,9,2,6]sum=0for ch in s: sum+=list[dic[ch]]print (sum)執行該程序段后,變量sum的值為 ( )A.23 B.25 C.31 D.37答案 B10.有如下python程序:s = ["able","ability","accept","above","agree","ache","club"]dic = {}for i in s: if i[:2] not in dic: dic[i[:2]] = 1 else: dic[i[:2]] += 1執行該程序段后,dic["ab"]的值為 ( )A.0 B.1 C.2 D.3答案 D11.有如下 Python 程序:dic={"2":"ABC","3":"DEF","4":"GHI","5":"JKL","6":"MNO","7":"PQRS","8":"TUV","9":"WXYZ"}s=input()m=""t=1for i in range(1,len(s)): if s[i]==s[i-1]: t+=1 elif s[i]=="#": m=m+dic[s[i-1]][t-1] t=1print(m)執行該程序后輸出“EAT”,則輸入的內容可能是 ( )A.23#32#8# B.233#2#8#C.33#22#8# D.32#2#8#答案 B12.有如下Python程序段:a=[9,1,7,3,8,4]key=5pmin=a[0]for i in range(1,len (a)): if key pmin=a[i]print(pmin)執行該程序段后,輸出的結果是 ( )A.1 B.4 C.7 D.9答案 C13.某數據加密算法的Python程序段如下:s=input("請輸入明文:")t=""for ch in s: if "a"<=ch<="z": ch=chr(ord(ch)-ord("a")+ord("A")) elif "0"<=ch<="9": ch=str((int(ch)+7)%10) t=ch+tprint(t)程序運行時,輸入明文"pyT638“,輸出的結果是 ( )A.305 B.503C.PYT305 D.503TYP答案 D14.判斷身份證中是否包含數字6或8代碼如下:s=input("請輸入身份證號:")y=Falseif len(s)==18: for k in s: if k=="6" or k=="8": y=Trueprint(y)下列說法正確的是 ( )A.若輸入的身份證號小于18位,執行該程序段無輸出B.僅將“for k in s:”改為“for k in range(len(s)):”,程序功能不變C.該代碼段中變量k的數據類型為整數型D.該程序段無法統計6和8的個數答案 D15.有如下Python程序段,s=['pears','apples','bananas','grapes']n=len(s[0])for i in s: if len(i)>n: n=len(i) ans=iprint(ans)執行該程序后輸出的結果是 ( )A.pears B.applesC.bananas D.grapes答案 C16.有如下Python程序段:x="";k=0;y=""s="394-5-222-60-809"for i in range (len(s)): if "0"<=s[i]<="9": k+=1 else: x=s[i-k:i] if y y=x k=0print(y)執行該段程序后,輸出的結果是 ( )A.394 B.809 C.60 D.5答案 C17.有如下Python程序段:s="Python"ans=""for i in range (len(s)): ch=s[i] if "a"<=ch<="z": if i%2==0: ch=chr((ord(ch)-ord("a")+i)%26+ord("a")) else: ch=ch.upper()#x.upper()將字符串x中的小寫字母轉換成大寫字母 ans+=chprint(ans)執行該段程序后,輸出的內容是 ( )A.PYTHON B.pgTrozC.PgrTZO D. PYvHsN答案 D18.有如下Python程序段s=input('請輸入由小寫字母組成的字符串:')for i in range(len(s)) : n=ord(s[i])+2 #字符“a”的ASCII 碼為97 h="" for j in range(8): h=str(abs (n%2-1))+h n=n∥2 print(h, end=' ')若輸入小寫字母“bd”得到的結果是 ( )A.00100110 01100110B.10011011 10011001C.01100100 01100110D.11011001 10011001答案 B19.十八位身份證號由六位數字地址碼、八位數字出生日期碼、三位數字順序碼和一位校驗碼組成, 其中倒數第二位是性別代碼,男單女雙。以下Python程序的功能為識別身份證中的出生日期和性別信息。則加框①②處的代碼依次為 ( )s=input("輸入身份證號")xb=['女','男']print('出生日期為:',s[6:10]+'年'+ ① +'月'+s[12:14]+'日')print('性別為:', ② )A.s[10:11] xb[int(s[-2])%2]B.s[10:12] xb[int(s[17])%2]C.s[-8:12] xb[int(s[16])%2]D.s[-8:-6] xb[(int(s[-2])+1)%2]答案 C20.有如下Python程序段:a=[5,3,8,9,7,3,11]n=len(a)-1cnt=0for i in range(1,n): if a[i]==a[i+1]-a[i-1]: cnt+=1 elif a[i]>a[i+1]-a[i-1]: cnt+=2 else: cnt+=3print(cnt)執行該程序段后,變量cnt的值為 ( )A.9 B.10 C.11 D.12答案 B21.有如下Python程序段:c,m=0,0for i in range(2,len(a)): if a[i-2]+a[i-1]==a[i]: c+=1 if c>m: m=c else: c=0若列表a=[2,1,3,4,5,9,14,23],執行該程序段后,變量m的值是 ( )A.0 B.1 C. 2 D. 3答案 D解析 從第3個位置開始遍歷,若該位置上值是前兩個位置上數之和,統計連續符合這些條件的數據個數c,并找出c的最大值m。數據3,4符合條件,共連續2個數。數據9,14,23符合條件,共連續3個數。二、能力提升22.某壓縮算法如下:用兩個數據表示一段連續相同的字符,第一個數據記錄指定字符重復的次數,第二個數據記錄具體字符的值。例如:字符串RRRRGGBBB,用該壓縮算法壓縮后可用4R2G3B表示。s=input("輸入一個字符")n=1ss=""for i in range(① ,len(s)): if s[i]==s[i-1]: n+=1 else: ss=ss+str(n)+s[i-1] ② ss=ss+str(n)+s[len(s)-1] #③print(ss)(1)在程序劃線①②處填入合適的代碼。(2)若刪除③處語句,輸入字符串RRRRGGBBB,輸出的內容是 。 答案 (1)①1 ②n=1 (2)4R2G解析 從第2個字符開始,與前面的字符比較,如果相等,進行計數,如果不等,表示該段結束,下段的個數為1。若刪除③處語句,則少了最后一個字符的情況。23.有如下 Python 程序段:a = [12,8,9,18,2,19,28,6]for i in range(len(a)-1): if a[i] < a[i+1]: a[i],a[i+1] = a[i+1],a[i]p = len(a)-1for i in range(len(a)-2,0,-1): if a[i] > a[p]: p = itmp = a[p];a[p] = a[0];a[0]=tmp執行該程序段后,a列表的值為 ( )A.[28,9,18,8,19,12,6,2]B.[12,9,18,8,19,28,6,2]C.[28,9,18,19,8,12,6,2]D.[2,9,12,8,18,19,6,28]答案 A24.有如下 Python 程序段:s = "1010/1100/1111"ans,t = 0,0for i in s: if "0" <= i <= "1": t = t * 2 + int(i) else: ans += t t = 0print(ans)運行該程序段,輸出結果是 ( )A.12 B.15 C.22 D.37答案 C25.在由數字組成的字符串中,找出同一數字的相鄰最大間距, 如字符串 “1231212323455”,數字“3”第一次與第二次分別出現在位置3和8,相距5,間隔距離最大。編寫Python代碼實現上述功能,Python程序段如下所示:s=input('請輸入數字字符串:')list1=[-1]*10maxn=0for i in range(len(s)): ① if list1[num]!=-1 and i-list1[num]>maxn: ② ③ print(maxn)則程序中劃線處的代碼分別為 ( )A.①list1[num]=i ②maxn=i-num③num=int(s[i])B.①num=int(s[i]) ②maxn=i-list1[num]③list1[num]=iC.①num=int(s[i]) ②maxn=i-num③num=iD.①list1[num]=i ②maxn=i-list1[num]③num=int(s[i])答案 B26.有如下 Python 程序段:a=[1,5,9,2,6,8,3,4,7]n=0 ;flag=Truefor i in range(len(a)-1): if a[i] n+=1;flag=False elif a[i]>a[i+1] and flag==False: n-=1;flag=Trueprint(n)執行上述程序段后,輸出的值為 ( )A.2 B.0 C.-1 D.1答案 D27.有如下Python程序段:s1=input("請輸入字符串:")a=[0]*128for item in s1: ch=ord(item) a[ch]=a[ch]+1s2=""for i in range(len(a)): for j in range(a[i]): s2=s2+chr(i)print(s2)列表a各元素的初始值都為0,s1中輸入的內容為"abs54int"。執行該程序后,程序輸出的結果中第5個字符為 ( )A.n B.s C.4 D.i答案 D(共90張PPT)課時5 For循環語句及程序實現第三章 算法的程序實現1.掌握for循環語句的語法格式,理解for循環的功能。2.理解range函數的功能,掌握使用range函數準確表示循環的區間及循環次數。3.理解break語句和continue語句的作用,并能簡單使用。4.熟練使用for循環語句解決實際問題。目 錄CONTENTS知識梳理01例題精析02隨堂檢測03鞏固與提升04知識梳理1一、for循環語句的格式for <變量> ________________: <循環體>for語句通過遍歷序列中的元素實現循環,并通過序列的元素數量來控制循環次數。in <序列>循環體中的語句要向右縮進,且縮進量要一致。二、for循環語句的功能for循環語句的功能是將序列對象中的元素逐個賦給目標變量,對每一次賦值都執行一遍循環體語句塊,當序列被遍歷完,即每一個元素都被用過了,則結束循環,然后執行循環體后面的語句。1.for循環語句是通過次數來控制循環的執行過程,即循環的次數可預先計算出。2.通過遍歷任意序列的元素來建立循環結構,針對序列的每一個元素執行一次循環體。3.列表、字符串、元組都是序列,可以利用它們來建立循環。三、range函數1.range函數格式range(______________________)2.range函數功能range函數用于產生一個序列,由三個參數(起始值、終值、步長值)來決定序列中元素的個數和范圍。range函數的參數必須為整數。若起始值缺省,則默認為____。步長值是序列中每個元素之間的差,若缺省,則默認為____。起始值,終值,步長值01range函數返回的是可迭代對象,range(n)等價于range(0,n),產生的連續整數序列為:0,1,2,…,n-1。四、break語句和continue語句break和continue語句的作用是改變控制流程。當break語句在循環結構中執行時,它會立即跳出循環結構,轉而執行循環結構后面的語句。與break語句不同,當continue語句在循環結構中執行時,并不會退出循環結構,而是立即結束本次循環,重新進入下一輪循環,也就是說,跳過循環體中在continue語句之后的所有語句,繼續下一輪循環。break語句用來強行退出循環,即序列還沒被完全遍歷完成或循環條件仍然為真時,用來強行退出循環。五、for循環使用示例1.遍歷列表建立循環weeklist=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]for day in weeklist: print("week:",day)2.遍歷字符串建立循環for i in "Python": print(i)3.通過range對象建立列表for i in range(10): print(i)例題精析2例1 通過調查發現,人們普遍認為帶有數字2、6、8的車牌比較吉利,而帶有數字4的車牌則不吉利。小石想通過編寫程序來計算車牌的吉利值:其中數字2吉利值為1,數字6吉利值為2,數字8吉利值為3,數字4的吉利值為-2,其他數字吉利值為0。如車牌號“浙H94286”的吉利值為4。程序代碼如下:dic={ "2":1,"6":2,"8":3,"4":-2 }cp=input("請輸入車牌號(格式如“浙H94286”):")count=0 for i in range(2,① ): x=cp[i] if x in ["2","4","6","8"]: count+=② print("該車牌號的吉利值為:",count)為實現功能,劃線處代碼應為( )A.①len(cp)-1 ②dic[x]B.①len(cp) ②dic[int(x)]C.①len(cp)-1 ②dic[int(x)]D.①len(cp) ②dic[x]解析 本題考查字典和列表的應用。cp是輸入的車牌號,要遍歷車牌中每個號碼,車牌的最后一個號碼索引位置是len(cp)-1,但range結束位置是取不到的。x本身就是字符串類型,是字典dic的鍵,因此不能轉換為數值。D變式訓練1 有如下Python程序段:ch="2nd-ucDOSy3t"res=""for i in range(len(ch)): if "a"<=ch[i]<="z": res=res+ch[i]print(res)該程序段的功能是輸出字符串ch中的( )A.所有小寫字母 B.小寫字母的個數C.所有數字之和 D.所有非數字字符A解析 本題考查range函數的使用以及程序基本代碼的閱讀能力。根據range函數的參數,是從字符串ch中從索引0開始,依次取出下標為0、1、2……位置的字符,如果字符是小寫,將它按順序依次拼接到字符串res中。所以答案為A。例2 完全數。如果一個正整數所有的真因子(即除了自身以外的約數)的和等于它本身,則稱該數為“完全數”。輸入一個數,判斷該數是否是完全數,如果是完全數,輸出全部的真因子。程序代碼如下:n=int(input("輸入一個正整數:"))yzlist=[]t=0for i in range(1,n): if n % i==0: zylist.append(i) #將i的值添加到列表yzlist t=① if② : print("該數是完全數!") for i in yzlist: print(i)else: print("該數不是完全數!")(1)完善程序劃線處代碼。(2)按照上述算法,輸入28,該數 (填:是/不是)完全數。 答案 (1)①t=t+i ②t==n (2)是解析 (1)從1至n~1之間的所有數進行遍歷,如果能整除,則進行累加,最后將累加的t和n進行比較,如果相等,則表示整數n是完全數,否則不是完全數。觀察程序可知,如果整數n是完全數,則輸出列表yzlist中的元素,因此在遍歷過程中,要將真因子i追加到列表yzlist中,并將真因子累加到變量t中,故①處代碼為t=t+i;如真因子之和t等于正整數n本身,則n是完全數,因此②處代碼為t==n。(2)輸入28,得到28=1+2+4+7+14,因此28是完全數。變式訓練2 水仙花數。所謂的水仙花數是指一個三位數整數,它的個位數、十位數和百位數的立方和等于該數本身。輸出所有的水仙花數,統計并輸出統計個數。實現上述功能的程序如下,請在程序劃線處填入合適的代碼。count=0for i in① : a=i∥100 b=i%10 ② if a**3+b**3+c**3==i: ③ print(i)print("total:",count)答案 ①range(100,1000) ②c=i∥10%10 或c=i%100∥10 ③count=count+1解析 水仙花數是一個三位數整數,因此for循環變量i的范圍為[100,999],即①處代碼為range(100,1000);變量a為三位數i的百位上的數字,b為個位上的數字,②處表示求三位數i的十位上的數字,方法有多種,可以寫為c=i∥10%10,也可以寫為c=i%100∥10等;③處表示統計水仙花數的個數,根據print()語句可知,統計結果存放在變量count中,因此③處語句為count=count+1。例3 某條形碼共有13位數字組成,其中第13位數字表示校驗碼。校驗碼的計算方法:先計算前12位數字中偶數位數字和奇數數字之和,再把偶數位和乘以3與奇數位和相加,再對相加之和除以10求余數,再用10減去該余數得到校驗碼值。輸入條形碼,輸出結論。實現上述功能程序代碼如下所示,請回答下列問題。txm=input("請輸入條形碼!")p,q=0,0if len(txm)==13: for i in range(0,① ): if (i+1)%2==1: p+=int(txm[i]) else: q+=int(txm[i]) yz=10-(p+q*3)%10 if② : print("驗證成功!") else: print("驗證失敗!")else: print("輸入條形碼不正確")(1)在程序劃線處填入合適的代碼。(2)按照上述算法,輸入條形碼為“2900101074031”,則輸出的提示信息是 。 答案 (1)①len(txm)-1 ②yz==int(txm[12])或yz==int(txm[len(txm)-1] (2)驗證成功!解析 用For循環遍歷整個字符串的前12位,注意區間的終值。當i是偶數時,把其中的奇數位相加到q中,最后把奇數位和與偶數位和的3倍相加除10取余,用10減去余數作為驗證碼。輸入2900101074031,奇數位數字之和為2+0+1+1+7+0=11,偶數位數字之和為9+0+0+0+4+3=16,校驗碼yz=10-(11+16*3)%10=1,與條形碼中第13位數字相等,因此驗證成功。變式訓練3 某Python程序如下: p ="Tel-114" c=" " for ch in p: if ch>= "0" and ch<= "9": c+=str(9-int(ch)) elif ch>= "a" and ch<= "z": c+= chr(ord(ch)- ord("a")+ord("A")) else: c+=chprint(c)程序運行后,輸出的結果是( )A.tEL-885 B.tEL-114C.TEL-114 D.TEL-885解析 本題考查循環結構和多分支選擇結構。若ch是數字,則轉換成9減去該數。若是小寫字母,轉換成大寫字母,其余不變。D隨堂檢測31.有如下Python程序段:dic={"apple":5,"cake":10,"computer":3000}lis=[[1,2,3],"apple","computer",[8,0,9]]ans=0for i in lis: if len(i)<=3: ans+=i[-1] elif i in dic: ans+=dic[i]print(ans)執行該程序段后,輸出結果是( )A.3005 B.12 C.3014 D.3017D2.下列Python程序段功能為:列表a中存放的是無重復的非負整數,找出其中的最大值max1和次大值max2。max1 = max2 = 0for i in range(len(a)): if a[i] > max1: (1) (2) elif a[i] > max2: (3) print("最大值為:"+str(max1)+"次大值:"+str(max2))C上述程序段中方框處可選語句為:①max1=a[i] ②max2=a[i] ③max2=max1 ④max1=max2則(1)、(2)、(3)處語句依次可為( )A.①④② B.①③② C.③①② D.①②④3.有如下Python程序段:list=[2, 1, 3, 4, 5, 7, 12, 14, 26, 37, 63]c=0for i in range(2, 11, 2) : if list[i-2]+list[i-1]==list[i]: c+=1print(c)該程序段運行結果為( )A.2 B.4 C.6 D.8B4.有如下Python程序段:import turtlen=int(input("輸入 n:"))for i in range(n*3): turtle.forward(100) turtle.left(360∥n+2)turtle.hideturtle()若輸入 n 的值為 4,則繪制的圖形為以下哪一項( )C5.有如下Python程序段:m=int(input("請輸入一個正整數: "))s=0for i in range(1 ,m): if i% 2 == 0 : s=s+i elif i% 3 == 0 : i=i+1 s=s+1print(s)若輸入m的值為6,執行該程序段后,輸出的結果是( )A.7 B.11 C.13 D.18B6.有如下Python程序段:s='wenzhou';s1='';n=len(s)for i in range(n∥2,0,-1): if s[i-1] s1=s1+s[i-1] else: s1=s1+s[n-i]print(s1)運行程序后,輸出的內容是( )A.hew B.now C.heu D.neuC7.有如下Python程序段:s=input('請輸入數據:')t=s[0]maxt=0for i in range(len(s)): if s[i]>s[i-1]: t+=s[i] if len(t)>maxt: maxt=len(t) ans=tA else: t=s[i]print(ans)執行該程序段后,輸入“12123234561”,輸出的內容是( )A.23456 B.12123 C.34561 D.12123238.查找素數能夠很好地體現出計算機解決某些數學問題的速度優勢,除了計算機性能以外,設計更加簡單的算法也能夠提高計算機解決某些問題的速度。某種素數算法就是通過“開關”的思想,例如求100以內的所有素數,采用列表來表示[1,1,1,1,……,1,1,1],列表的索引值表示0-99中的每個數,1表示“開”即為素數(先假設都為素數),從2(0和1不是素數)開始,因為索引2號對應的值為1,則2是素數,再將后面能夠被2整除的索引對應的值都改為0,依次類推……以下程序就是采用這種思路編寫的輸出1000以內的所有素數的程序:lst1=[] #存放每個數的開關lst2=[] #存放找到的素數lst1=[1]*1000 #初始化開關列表for i in range(2,1000): if lst1[i]==1: lst2.append(i) lst1[j]=0print(lst2) #輸出所有1000以內的素數上述程序橫線處的合適代碼為( )A.if lst1[j]%i==0:B.if lst1[i]%i==0:C.for j in range(i,1000,i):D.for j in range(i+1,1000,i):C9.下列表格中有①②③④共4段Python代碼,①實現的功能是( ) ②實現的功能是( )for i in range(6): t.circle(100) #畫半徑為100圓 t.left(60) x=50for i in range(6): x=x+10 #x在原來基礎上增加10 t.circle(x) #畫半徑為x圓③實現的功能是( ) ④實現的功能是( )x=50 for i in range(12): x=x+10 t.forward(x) t.left(90) for i in range(6): for j in range(3): t.forward(100) t.left(120) t.left(60)實現畫出下表所示的圖形,將ABCD分別填入上表的括號中。答案 ①D ②A ③B ④C10.在傳遞信息的過程中,通常會將一些敏感信息進行加密,以下是對數據進行加密的Python程序段,若輸入數據為“my789”,則輸出的內容為 ( )s=input("輸入明文:")t=""for ch in s: if "0"<=ch<="9": x=int(ch)+3 if x>=10: x=x%10B ch=str(x) t=t+chprint (t)A.my123 B.my012 C.pa012 D.pa123解析 本題考查讀取Python程序的能力。逐個訪問字符串將其中的數字加3,如果該數大于等于10,對結果進行除10取余。11.有如下 Python 程序段:s = input("請輸入一串字符串:")f = Truefor i in range(len(s)//2): if s[i] != s[len(s)-i-1]: f = False breakprint(f)若執行該程序后, 輸出的結果是“True”,則輸入的字符串可能是( )A."onion" B."hello" C."278" D."111"D12.有如下Python程序段:s='nftisa';a=[2,3,1,4];ans=''for i in range(len(s)): t=i%4 ans=ans+s[a[t]]print(ans)程序運行結束后,ans的值為( )A.itsfit B.tifsti C.nisisa D.tisiasB13.某Python程序代碼如下:list1=[2,3,4,5,6]m1=1;m2=2for n in list1: if n%3==0: m1*=nprint(m1-m2)程序運行后,輸出的結果為 。答案 1614.現有一程序模擬競猜某商品價格,總共有五次競猜機會。請在劃線處填入合適的代碼。import randoma=random.randint(0, 100)chance=5print("共%d 次機會" % (chance))for i in ① : b=int(input("請輸入一個整數:")) if a print("大啦!!!還剩%d 次機會"%(chance-i)) elif a>b: print("小啦!!!還剩%d 次機會"%(chance-i)) else: print("恭喜您,答對啦!!!數字是%d,共用次數%d"%(a,i)) ② #結束循環 答案 ①range(1,chance+1,1)或range(1,chance+1)或range(1,6)或range(1,6,1) ②break4鞏固與提升基礎鞏固能力提升1.有Python程序如下:lst=[1,6,2,9,3,5,2]k,s=1,0m=len(lst)∥2for i in range(m): s+=lst[m+k]-lst[m-k] k+=1print(s)A運行該程序,輸出結果是 ( )A.1 B.-1 C.14 D.-14解析 本題考查列表的遍歷。m=len(lst)∥2,是中間位置3。m+k和m-k表示中間兩側對稱的索引號。循環3次,依次是3-2,5-6,2-1,把這些差值進行累加。2.有下列Python程序代碼:word=["my","Label","Name","nose","nice"]n=0for ch in word: if ch[0]=="n": n=n+1print(n)執行上述代碼后,輸出的內容是( )A.2 B.-2 C.1 D.-1A解析 程序遍歷列表中的內容,并查找以n開頭的字母個數,但字母區分大小寫。3.有如下Python程序段:a[7]=49;a[6]=28sum=1for i in range(5,1,-1): a[i]=a[i+2]-a[i+1] if a[i] % 3==0: sum=sum+a[i]print (a)執行該程序段后,變量a的值為 ( )A.22B.43C.[0,0,-7,14,7,21,28,49]D.[-7,14,7,21,28,49]C4.求列表lis第 3 項至第 7 項元素的和lis=[6,3,-2,5,19,21,-9,22,14,25]he=[0]*10he[0]=lis[0]for i in range(1,len(lis)): he[i]= he[i-1]+lis[i]print( ) 劃線處正確的 Python 表達式是( )A. he[7]-he[3] B. he[6]-he[2]C. he[7]-he[2] D. he[6]-he[1]D5.利用海龜作圖繪制一個正n邊形,import turtlen=int(input("請輸入正多邊形的邊數n: "))a=int( input("請輸入邊長a:"))d=(n-2)*180/n #正多邊形內角計算公式t=turtle.Pen()for i in range(n): #① t.forward(a) #② t.left(d) #③turtle.done() #④已知有一行代碼有錯,位置是( )A.① B.② C.③ D.④C6.有如下Python程序段:s=0for i in range(10): if i%3==0: s+=1 else: continueelse: s+=1print(s)執行該程序段后,輸出的結果是( )A.3 B.4 C.5 D.6C7.有Python代碼如下:a=[6,3,7,5]b=[0,1,2,3]for i in range(3,0,-1): if a[b[i]]>a[b[i-1]]: b[i],b[i-1]=b[i-1],b[i]print(b)則運行結果是( )A.[3,2,1,0] B.[1,3,0,2]C.[2,0,3,1] D.[2,0,1,3]D8.某Python程序如下:s="san xian lian meng."dic={}for i in s: if i in dic: dic[i]+=1 else: dic[i]=1在輸出的字典 dic 中,dic["n"]的值為( )A.1 B.2 C.3 D.4解析 字典的訪問和修改只能通過"鍵”來訪問,字典沒有索引。D9.有如下Python程序段:s="Python"dic={"t":1,"y":2,"o":3,"P":4,"p":5,"h":6,"n":7}list=[3,7,1,6,3,9,2,6]sum=0for ch in s: sum+=list[dic[ch]]print (sum)執行該程序段后,變量sum的值為( )A.23 B.25 C.31 D.37B10.有如下python程序:s = ["able","ability","accept","above","agree","ache","club"]dic = {}for i in s: if i[:2] not in dic: dic[i[:2]] = 1 else: dic[i[:2]] += 1執行該程序段后,dic["ab"]的值為( )A.0 B.1 C.2 D.3D11.有如下 Python 程序:dic={"2":"ABC","3":"DEF","4":"GHI","5":"JKL","6":"MNO","7":"PQRS","8":"TUV","9":"WXYZ"}s=input()m=""t=1for i in range(1,len(s)): if s[i]==s[i-1]: t+=1B elif s[i]=="#": m=m+dic[s[i-1]][t-1] t=1print(m)執行該程序后輸出“EAT”,則輸入的內容可能是( )A.23#32#8# B.233#2#8#C.33#22#8# D.32#2#8#12.有如下Python程序段:a=[9,1,7,3,8,4]key=5pmin=a[0]for i in range(1,len (a)): if key pmin=a[i]print(pmin)執行該程序段后,輸出的結果是( )A.1 B.4 C.7 D.9CD13.某數據加密算法的Python程序段如下:s=input("請輸入明文:")t=""for ch in s: if "a"<=ch<="z": ch=chr(ord(ch)-ord("a")+ord("A")) elif "0"<=ch<="9": ch=str((int(ch)+7)%10) t=ch+tprint(t)程序運行時,輸入明文"pyT638“,輸出的結果是( )A.305 B.503 C.PYT305 D.503TYP14.判斷身份證中是否包含數字6或8代碼如下:s=input("請輸入身份證號:")y=Falseif len(s)==18: for k in s: if k=="6" or k=="8": y=Trueprint(y)下列說法正確的是 ( )A.若輸入的身份證號小于18位,執行該程序段無輸出B.僅將“for k in s:”改為“for k in range(len(s)):”,程序功能不變C.該代碼段中變量k的數據類型為整數型D.該程序段無法統計6和8的個數D15.有如下Python程序段,s=['pears','apples','bananas','grapes']n=len(s[0])for i in s: if len(i)>n: n=len(i) ans=iprint(ans)執行該程序后輸出的結果是( )A.pears B.applesC.bananas D.grapesC16.有如下Python程序段:x="";k=0;y=""s="394-5-222-60-809"for i in range (len(s)): if "0"<=s[i]<="9": k+=1 else: x=s[i-k:i]C if y y=x k=0print(y)執行該段程序后,輸出的結果是( )A.394 B.809 C.60 D.517.有如下Python程序段:s="Python"ans=""for i in range (len(s)): ch=s[i] if "a"<=ch<="z": if i%2==0: ch=chr((ord(ch)-ord("a")+i)%26+ord("a")) else: ch=ch.upper()#x.upper()將字符串x中的小寫字母轉換成大寫字母D ans+=chprint(ans)執行該段程序后,輸出的內容是( )A.PYTHON B.pgTrozC.PgrTZO D. PYvHsN18.有如下Python程序段s=input('請輸入由小寫字母組成的字符串:')for i in range(len(s)) : n=ord(s[i])+2 #字符“a”的ASCII 碼為97 h="" for j in range(8): h=str(abs (n%2-1))+h n=n∥2 print(h, end=' ')B若輸入小寫字母“bd”得到的結果是 ( )A.00100110 01100110B.10011011 10011001C.01100100 01100110D.11011001 10011001C19.十八位身份證號由六位數字地址碼、八位數字出生日期碼、三位數字順序碼和一位校驗碼組成, 其中倒數第二位是性別代碼,男單女雙。以下Python程序的功能為識別身份證中的出生日期和性別信息。則加框①②處的代碼依次為 ( )s=input("輸入身份證號")xb=['女','男']A.s[10:11] xb[int(s[-2])%2] B.s[10:12] xb[int(s[17])%2]C.s[-8:12] xb[int(s[16])%2] D.s[-8:-6] xb[(int(s[-2])+1)%2]20.有如下Python程序段:a=[5,3,8,9,7,3,11]n=len(a)-1cnt=0for i in range(1,n): if a[i]==a[i+1]-a[i-1]: cnt+=1 elif a[i]>a[i+1]-a[i-1]: cnt+=2 B else: cnt+=3print(cnt)執行該程序段后,變量cnt的值為( )A.9 B.10 C.11 D.1221.有如下Python程序段:c,m=0,0for i in range(2,len(a)): if a[i-2]+a[i-1]==a[i]: c+=1 if c>m: m=c else: c=0D若列表a=[2,1,3,4,5,9,14,23],執行該程序段后,變量m的值是 ( )A.0 B.1 C. 2 D. 3解析 從第3個位置開始遍歷,若該位置上值是前兩個位置上數之和,統計連續符合這些條件的數據個數c,并找出c的最大值m。數據3,4符合條件,共連續2個數。數據9,14,23符合條件,共連續3個數。22.某壓縮算法如下:用兩個數據表示一段連續相同的字符,第一個數據記錄指定字符重復的次數,第二個數據記錄具體字符的值。例如:字符串RRRRGGBBB,用該壓縮算法壓縮后可用4R2G3B表示。s=input("輸入一個字符")n=1ss=""for i in range(① ,len(s)): if s[i]==s[i-1]: n+=1 else: ss=ss+str(n)+s[i-1] ② ss=ss+str(n)+s[len(s)-1] #③print(ss)(1)在程序劃線①②處填入合適的代碼。(2)若刪除③處語句,輸入字符串RRRRGGBBB,輸出的內容是 。 答案 (1)①1 ②n=1 (2)4R2G解析 從第2個字符開始,與前面的字符比較,如果相等,進行計數,如果不等,表示該段結束,下段的個數為1。若刪除③處語句,則少了最后一個字符的情況。23.有如下 Python 程序段:a = [12,8,9,18,2,19,28,6]for i in range(len(a)-1): if a[i] < a[i+1]: a[i],a[i+1] = a[i+1],a[i]p = len(a)-1for i in range(len(a)-2,0,-1): if a[i] > a[p]: p = itmp = a[p];a[p] = a[0];a[0]=tmpA執行該程序段后,a列表的值為 ( )A.[28,9,18,8,19,12,6,2]B.[12,9,18,8,19,28,6,2]C.[28,9,18,19,8,12,6,2]D.[2,9,12,8,18,19,6,28]C24.有如下 Python 程序段:s = "1010/1100/1111"ans,t = 0,0for i in s: if "0" <= i <= "1": t = t * 2 + int(i) else: ans += t t = 0print(ans)運行該程序段,輸出結果是( )A.12 B.15 C.22 D.3725.在由數字組成的字符串中,找出同一數字的相鄰最大間距, 如字符串 “1231212323455”,數字“3”第一次與第二次分別出現在位置3和8,相距5,間隔距離最大。編寫Python代碼實現上述功能,Python程序段如下所示:s=input('請輸入數字字符串:')list1=[-1]*10maxn=0for i in range(len(s)): ① if list1[num]!=-1 and i-list1[num]>maxn: ② ③ print(maxn)B則程序中劃線處的代碼分別為 ( )A.①list1[num]=i ②maxn=i-num③num=int(s[i])B.①num=int(s[i]) ②maxn=i-list1[num]③list1[num]=iC.①num=int(s[i]) ②maxn=i-num③num=iD.①list1[num]=i ②maxn=i-list1[num]③num=int(s[i])D26.有如下 Python 程序段:a=[1,5,9,2,6,8,3,4,7]n=0 ;flag=Truefor i in range(len(a)-1): if a[i] n+=1;flag=False elif a[i]>a[i+1] and flag==False: n-=1;flag=Trueprint(n)執行上述程序段后,輸出的值為( )A.2 B.0 C.-1 D.127.有如下Python程序段:s1=input("請輸入字符串:")a=[0]*128for item in s1: ch=ord(item) a[ch]=a[ch]+1s2=""for i in range(len(a)): for j in range(a[i]): s2=s2+chr(i)print(s2)D列表a各元素的初始值都為0,s1中輸入的內容為"abs54int"。執行該程序后,程序輸出的結果中第5個字符為 ( )A.n B.s C.4 D.i課時5 For循環語句及程序實現課時目標1.掌握for循環語句的語法格式,理解for循環的功能。2.理解range函數的功能,掌握使用range函數準確表示循環的區間及循環次數。3.理解break語句和continue語句的作用,并能簡單使用。4.熟練使用for循環語句解決實際問題。一、for循環語句的格式for <變量> ____________: <循環體>for語句通過遍歷序列中的元素實現循環,并通過序列的元素數量來控制循環次數。循環體中的語句要向右縮進,且縮進量要一致。二、for循環語句的功能for循環語句的功能是將序列對象中的元素逐個賦給目標變量,對每一次賦值都執行一遍循環體語句塊,當序列被遍歷完,即每一個元素都被用過了,則結束循環,然后執行循環體后面的語句。1.for循環語句是通過次數來控制循環的執行過程,即循環的次數可預先計算出。2.通過遍歷任意序列的元素來建立循環結構,針對序列的每一個元素執行一次循環體。3.列表、字符串、元組都是序列,可以利用它們來建立循環。三、range函數1.range函數格式range(________________________)2.range函數功能range函數用于產生一個序列,由三個參數(起始值、終值、步長值)來決定序列中元素的個數和范圍。range函數的參數必須為整數。若起始值缺省,則默認為________。步長值是序列中每個元素之間的差,若缺省,則默認為________。range函數返回的是可迭代對象,range(n)等價于range(0,n),產生的連續整數序列為:0,1,2,…,n-1。四、break語句和continue語句break和continue語句的作用是改變控制流程。當break語句在循環結構中執行時,它會立即跳出循環結構,轉而執行循環結構后面的語句。與break語句不同,當continue語句在循環結構中執行時,并不會退出循環結構,而是立即結束本次循環,重新進入下一輪循環,也就是說,跳過循環體中在continue語句之后的所有語句,繼續下一輪循環。break語句用來強行退出循環,即序列還沒被完全遍歷完成或循環條件仍然為真時,用來強行退出循環。五、for循環使用示例1.遍歷列表建立循環weeklist=[″Monday″,″Tuesday″,″Wednesday″,″Thursday″,″Friday″,″Saturday″,″Sunday″]for day in weeklist: print(″week:″,day)2.遍歷字符串建立循環for i in ″Python″: print(i)3.通過range對象建立列表for i in range(10): print(i)例1 通過調查發現,人們普遍認為帶有數字2、6、8的車牌比較吉利,而帶有數字4的車牌則不吉利。小石想通過編寫程序來計算車牌的吉利值:其中數字2吉利值為1,數字6吉利值為2,數字8吉利值為3,數字4的吉利值為-2,其他數字吉利值為0。如車牌號“浙H94286”的吉利值為4。程序代碼如下:dic={ "2":1,"6":2,"8":3,"4":-2 }cp=input("請輸入車牌號(格式如“浙H94286”):")count=0 for i in range(2,① ): x=cp[i] if x in ["2","4","6","8"]: count+=② print("該車牌號的吉利值為:",count)為實現功能,劃線處代碼應為 ( )A.①len(cp)-1 ②dic[x]B.①len(cp) ②dic[int(x)]C.①len(cp)-1 ②dic[int(x)]D.①len(cp) ②dic[x]聽課筆記: 變式訓練1 有如下Python程序段:ch=″2nd-ucDOSy3t″res=″″for i in range(len(ch)): if ″a″<=ch[i]<=″z″: res=res+ch[i]print(res)該程序段的功能是輸出字符串ch中的( )A.所有小寫字母 B.小寫字母的個數C.所有數字之和 D.所有非數字字符例2 完全數。如果一個正整數所有的真因子(即除了自身以外的約數)的和等于它本身,則稱該數為“完全數”。輸入一個數,判斷該數是否是完全數,如果是完全數,輸出全部的真因子。程序代碼如下:n=int(input(″輸入一個正整數:″))yzlist=[]t=0for i in range(1,n): if n % i==0: zylist.append(i) #將i的值添加到列表yzlist t=①____________if②____________: print(″該數是完全數!″) for i in yzlist: print(i)else:print(″該數不是完全數!″)(1)完善程序劃線處代碼。(2)按照上述算法,輸入28,該數________(填:是/不是)完全數。聽課筆記: 變式訓練2 水仙花數。所謂的水仙花數是指一個三位數整數,它的個位數、十位數和百位數的立方和等于該數本身。輸出所有的水仙花數,統計并輸出統計個數。實現上述功能的程序如下,請在程序劃線處填入合適的代碼。count=0for i in①____________: a=i∥100 b=i%10 ②____________ if a**3+b**3+c**3==i: ③____________ print(i)print(″total:″,count)例3 某條形碼共有13位數字組成,其中第13位數字表示校驗碼。校驗碼的計算方法:先計算前12位數字中偶數位數字和奇數數字之和,再把偶數位和乘以3與奇數位和相加,再對相加之和除以10求余數,再用10減去該余數得到校驗碼值。輸入條形碼,輸出結論。實現上述功能程序代碼如下所示,請回答下列問題。txm=input("請輸入條形碼!")p,q=0,0if len(txm)==13: for i in range(0,① ): if (i+1)%2==1: p+=int(txm[i]) else: q+=int(txm[i]) yz=10-(p+q*3)%10 if② : print("驗證成功!") else: print("驗證失敗!")else: print("輸入條形碼不正確")(1)在程序劃線處填入合適的代碼。(2)按照上述算法,輸入條形碼為“2900101074031”,則輸出的提示信息是 。 聽課筆記: 變式訓練3 某Python程序如下: p ="Tel-114" c=" " for ch in p: if ch>= "0" and ch<= "9": c+=str(9-int(ch)) elif ch>= "a" and ch<= "z": c+= chr(ord(ch)- ord("a")+ord("A")) else: c+=chprint(c)程序運行后,輸出的結果是 ( )A.tEL-885 B.tEL-114C.TEL-114 D.TEL-885 1.有如下Python程序段:dic={"apple":5,"cake":10,"computer":3000}lis=[[1,2,3],"apple","computer",[8,0,9]]ans=0for i in lis: if len(i)<=3: ans+=i[-1] elif i in dic: ans+=dic[i]print(ans)執行該程序段后,輸出結果是 ( )A.3005 B.12 C.3014 D.30172.下列Python程序段功能為:列表a中存放的是無重復的非負整數,找出其中的最大值max1和次大值max2。max1 = max2 = 0for i in range(len(a)): if a[i] > max1: (1) (2) elif a[i] > max2: (3) print("最大值為:"+str(max1)+"次大值:"+str(max2))上述程序段中方框處可選語句為:①max1=a[i] ②max2=a[i] ③max2=max1 ④max1=max2則(1)、(2)、(3)處語句依次可為 ( )A.①④② B.①③② C.③①② D.①②④3.有如下Python程序段:list=[2, 1, 3, 4, 5, 7, 12, 14, 26, 37, 63]c=0for i in range(2, 11, 2) : if list[i-2]+list[i-1]==list[i]: c+=1print(c)該程序段運行結果為 ( )A.2 B.4 C.6 D.84.有如下Python程序段:import turtlen=int(input("輸入 n:"))for i in range(n*3): turtle.forward(100) turtle.left(360∥n+2)turtle.hideturtle()若輸入 n 的值為 4,則繪制的圖形為以下哪一項 ( )5.有如下Python程序段:m=int(input("請輸入一個正整數: "))s=0for i in range(1 ,m): if i% 2 == 0 : s=s+i elif i% 3 == 0 : i=i+1 s=s+1print(s)若輸入m的值為6,執行該程序段后,輸出的結果是 ( )A.7 B.11 C.13 D.186.有如下Python程序段:s='wenzhou';s1='';n=len(s)for i in range(n∥2,0,-1): if s[i-1] s1=s1+s[i-1] else: s1=s1+s[n-i]print(s1)運行程序后,輸出的內容是 ( )A.hew B.now C.heu D.neu7.有如下Python程序段:s=input('請輸入數據:')t=s[0]maxt=0for i in range(len(s)): if s[i]>s[i-1]: t+=s[i] if len(t)>maxt: maxt=len(t) ans=t else: t=s[i]print(ans)執行該程序段后,輸入“12123234561”,輸出的內容是 ( )A.23456 B.12123 C.34561 D.12123238.查找素數能夠很好地體現出計算機解決某些數學問題的速度優勢,除了計算機性能以外,設計更加簡單的算法也能夠提高計算機解決某些問題的速度。某種素數算法就是通過“開關”的思想,例如求100以內的所有素數,采用列表來表示[1,1,1,1,……,1,1,1],列表的索引值表示0-99中的每個數,1表示“開”即為素數(先假設都為素數),從2(0和1不是素數)開始,因為索引2號對應的值為1,則2是素數,再將后面能夠被2整除的索引對應的值都改為0,依次類推……以下程序就是采用這種思路編寫的輸出1000以內的所有素數的程序:lst1=[] #存放每個數的開關lst2=[] #存放找到的素數lst1=[1]*1000 #初始化開關列表for i in range(2,1000): if lst1[i]==1: lst2.append(i) lst1[j]=0print(lst2) #輸出所有1000以內的素數上述程序橫線處的合適代碼為 ( )A.if lst1[j]%i==0:B.if lst1[i]%i==0:C.for j in range(i,1000,i):D.for j in range(i+1,1000,i):9.下列表格中有①②③④共4段Python代碼,①實現的功能是( ) ②實現的功能是( )for i in range(6): t.circle(100) #畫半徑為100圓 t.left(60) x=50for i in range(6): x=x+10 #x在原來基礎上增加10 t.circle(x) #畫半徑為x圓③實現的功能是( ) ④實現的功能是( )x=50for i in range(12): x=x+10 t.forward(x) t.left(90) for i in range(6): for j in range(3): t.forward(100) t.left(120) t.left(60)實現畫出下表所示的圖形,將ABCD分別填入上表的括號中。10.在傳遞信息的過程中,通常會將一些敏感信息進行加密,以下是對數據進行加密的Python程序段,若輸入數據為“my789”,則輸出的內容為 ( )s=input("輸入明文:")t=""for ch in s: if "0"<=ch<="9": x=int(ch)+3 if x>=10: x=x%10 ch=str(x) t=t+chprint (t)A.my123 B.my012 C.pa012 D.pa12311.有如下 Python 程序段:s = input("請輸入一串字符串:")f = Truefor i in range(len(s)//2): if s[i] != s[len(s)-i-1]: f = False breakprint(f)若執行該程序后, 輸出的結果是“True”,則輸入的字符串可能是 ( )A."onion" B."hello" C."278" D."111"12.有如下Python程序段:s='nftisa';a=[2,3,1,4];ans=''for i in range(len(s)): t=i%4 ans=ans+s[a[t]]print(ans)程序運行結束后,ans的值為 ( )A.itsfit B.tifsti C.nisisa D.tisias13.某Python程序代碼如下:list1=[2,3,4,5,6]m1=1;m2=2for n in list1: if n%3==0: m1*=nprint(m1-m2)程序運行后,輸出的結果為 14.現有一程序模擬競猜某商品價格,總共有五次競猜機會。請在劃線處填入合適的代碼。import randoma=random.randint(0, 100)chance=5print("共%d 次機會" % (chance))for i in ① : b=int(input("請輸入一個整數:")) if a print("大啦!!!還剩%d 次機會"%(chance-i)) elif a>b: print("小啦!!!還剩%d 次機會"%(chance-i)) else: print("恭喜您,答對啦!!!數字是%d,共用次數%d"%(a,i)) ② #結束循環 展開更多...... 收起↑ 資源列表 課時5 For循環語句及程序實現 學案 浙教版(2019)必修1.doc 課時5 For循環語句及程序實現 教案 浙教版(2019)必修1.doc 課時5 For循環語句及程序實現 課件(共90張ppt)浙教版(2019)必修1.pptx 縮略圖、資源來源于二一教育資源庫