资源简介 课时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