第三章 课时5 For循环语句及程序实现 教案 浙教版(2019)必修1(课件 学案 教案三份打包)

资源下载
  1. 二一教育资源

第三章 课时5 For循环语句及程序实现 教案 浙教版(2019)必修1(课件 学案 教案三份打包)

资源简介

课时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=0
for 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=0
for 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,0
if 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+=ch
print(c)
程序运行后,输出的结果是 (  )
A.tEL-885 B.tEL-114
C.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=0
for 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
答案 D
2.下列Python程序段功能为:列表a中存放的是无重复的非负整数,找出其中的最大值max1和次大值max2。
max1 = max2 = 0
for 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.①②④
答案 C
3.有如下Python程序段:
list=[2, 1, 3, 4, 5, 7, 12, 14, 26, 37, 63]
c=0
for i in range(2, 11, 2) :
  if list[i-2]+list[i-1]==list[i]:
    c+=1
print(c)
该程序段运行结果为 (  )
A.2 B.4 C.6 D.8
答案 B
4.有如下Python程序段:
import turtle
n=int(input("输入 n:"))
for i in range(n*3):
  turtle.forward(100)
  turtle.left(360∥n+2)
turtle.hideturtle()
若输入 n 的值为 4,则绘制的图形为以下哪一项 (  )
答案 C
5.有如下Python程序段:
m=int(input("请输入一个正整数: "))
s=0
for i in range(1 ,m):
  if i% 2 == 0 :
    s=s+i
  elif i% 3 == 0 :
    i=i+1
  s=s+1
print(s)
若输入m的值为6,执行该程序段后,输出的结果是 (  )
A.7 B.11 C.13 D.18
答案 B
6.有如下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
答案 C
7.有如下Python程序段:
s=input('请输入数据:')
t=s[0]
maxt=0
for 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
答案 A
8.查找素数能够很好地体现出计算机解决某些数学问题的速度优势,除了计算机性能以外,设计更加简单的算法也能够提高计算机解决某些问题的速度。某种素数算法就是通过“开关”的思想,例如求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]=0
print(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):
答案 C
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分别填入上表的括号中。
答案 ①D ②A ③B ④C
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+ch
print (t)
A.my123 B.my012 C.pa012 D.pa123
答案 B
解析 本题考查读取Python程序的能力。逐个访问字符串将其中的数字加3,如果该数大于等于10,对结果进行除10取余。
11.有如下 Python 程序段:
s = input("请输入一串字符串:")
f = True
for i in range(len(s)//2):
  if s[i] != s[len(s)-i-1]:
    f = False
    break
print(f)
若执行该程序后, 输出的结果是“True”,则输入的字符串可能是
A."onion" B."hello" C."278" D."111"
答案 D
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.tisias
答案 B
13.某Python程序代码如下:
list1=[2,3,4,5,6]
m1=1;m2=2
for n in list1:
  if n%3==0:
    m1*=n
print(m1-m2)
程序运行后,输出的结果为   
答案 16
14.现有一程序模拟竞猜某商品价格,总共有五次竞猜机会。请在划线处填入合适的代码。
import random
a=random.randint(0, 100)
chance=5
print("共%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,0
m=len(lst)∥2
for i in range(m):
  s+=lst[m+k]-lst[m-k]
  k+=1
print(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=0
for ch in word:
  if ch[0]=="n":
    n=n+1
print(n)
执行上述代码后,输出的内容是 (  )
A.2 B.-2 C.1 D.-1
答案 A
解析 程序遍历列表中的内容,并查找以n开头的字母个数,但字母区分大小写。
3.有如下Python程序段:
a[7]=49;a[6]=28
sum=1
for 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.22
B.43
C.[0,0,-7,14,7,21,28,49]
D.[-7,14,7,21,28,49]
答案 C
4.求列表lis第 3 项至第 7 项元素的和
lis=[6,3,-2,5,19,21,-9,22,14,25]
he=[0]*10
he[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]
答案 D
5.利用海龟作图绘制一个正n边形,
import turtle
n=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.④
答案 C
6.有如下Python程序段:
s=0
for i in range(10):
  if i%3==0:
    s+=1
  else:
    continue
else:
  s+=1
print(s)
执行该程序段后,输出的结果是 (  )
A.3 B.4 C.5 D.6
答案 C
7.有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]
答案 D
8.某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=0
for ch in s:
  sum+=list[dic[ch]]
print (sum)
执行该程序段后,变量sum的值为 (  )
A.23 B.25 C.31 D.37
答案 B
10.有如下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
答案 D
11.有如下 Python 程序:
dic={"2":"ABC","3":"DEF","4":"GHI","5":"JKL","6":"MNO","7":"PQRS","8":"TUV","9":"WXYZ"}
s=input()
m=""
t=1
for 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=1
print(m)
执行该程序后输出“EAT”,则输入的内容可能是 (  )
A.23#32#8# B.233#2#8#
C.33#22#8# D.32#2#8#
答案 B
12.有如下Python程序段:
a=[9,1,7,3,8,4]
key=5
pmin=a[0]
for i in range(1,len (a)):
  if key    pmin=a[i]
print(pmin)
执行该程序段后,输出的结果是 (  )
A.1 B.4 C.7 D.9
答案 C
13.某数据加密算法的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+t
print(t)
程序运行时,输入明文"pyT638“,输出的结果是 (  )
A.305 B.503
C.PYT305 D.503TYP
答案 D
14.判断身份证中是否包含数字6或8代码如下:
s=input("请输入身份证号:")
y=False
if len(s)==18:
  for k in s:
    if k=="6" or k=="8":
      y=True
print(y)
下列说法正确的是 (  )
A.若输入的身份证号小于18位,执行该程序段无输出
B.仅将“for k in s:”改为“for k in range(len(s)):”,程序功能不变
C.该代码段中变量k的数据类型为整数型
D.该程序段无法统计6和8的个数
答案 D
15.有如下Python程序段,
s=['pears','apples','bananas','grapes']
n=len(s[0])
for i in s:
  if len(i)>n:
    n=len(i)
    ans=i
print(ans)
执行该程序后输出的结果是 (  )
A.pears B.apples
C.bananas D.grapes
答案 C
16.有如下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=0
print(y)
执行该段程序后,输出的结果是 (  )
A.394 B.809 C.60 D.5
答案 C
17.有如下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+=ch
print(ans)
执行该段程序后,输出的内容是 (  )
A.PYTHON B.pgTroz
C.PgrTZO D. PYvHsN
答案 D
18.有如下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 01100110
B.10011011 10011001
C.01100100 01100110
D.11011001 10011001
答案 B
19.十八位身份证号由六位数字地址码、八位数字出生日期码、三位数字顺序码和一位校验码组成, 其中倒数第二位是性别代码,男单女双。以下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]
答案 C
20.有如下Python程序段:
a=[5,3,8,9,7,3,11]
n=len(a)-1
cnt=0
for 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+=3
print(cnt)
执行该程序段后,变量cnt的值为 (  )
A.9 B.10 C.11 D.12
答案 B
21.有如下Python程序段:
c,m=0,0
for 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=1
ss=""
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)-1
for i in range(len(a)-2,0,-1):
  if a[i] > a[p]:
    p = i
tmp = 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]
答案 A
24.有如下 Python 程序段:
s = "1010/1100/1111"
ans,t = 0,0
for i in s:
  if "0" <= i <= "1":
    t = t * 2 + int(i)
  else:
    ans += t
    t = 0
print(ans)
运行该程序段,输出结果是 (  )
A.12 B.15 C.22 D.37
答案 C
25.在由数字组成的字符串中,找出同一数字的相邻最大间距, 如字符串 “1231212323455”,数字“3”第一次与第二次分别出现在位置3和8,相距5,间隔距离最大。编写Python代码实现上述功能,Python程序段如下所示:
s=input('请输入数字字符串:')
list1=[-1]*10
maxn=0
for 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]=i
C.①num=int(s[i])   ②maxn=i-num
③num=i
D.①list1[num]=i   ②maxn=i-list1[num]
③num=int(s[i])
答案 B
26.有如下 Python 程序段:
a=[1,5,9,2,6,8,3,4,7]
n=0 ;flag=True
for 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=True
print(n)
执行上述程序段后,输出的值为 (  )
A.2 B.0 C.-1 D.1
答案 D
27.有如下Python程序段:
s1=input("请输入字符串:")
a=[0]*128
for item in s1:
  ch=ord(item)
  a[ch]=a[ch]+1
s2=""
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函数的参数必须为整数。若起始值缺省,则默认为____。步长值是序列中每个元素之间的差,若缺省,则默认为____。
起始值,终值,步长值
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)
例题精析
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=0
for 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=0
for 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,0
if 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+=ch
print(c)
程序运行后,输出的结果是(  )
A.tEL-885 B.tEL-114
C.TEL-114 D.TEL-885
解析 本题考查循环结构和多分支选择结构。若ch是数字,则转换成9减去该数。若是小写字母,转换成大写字母,其余不变。
D
随堂检测
3
1.有如下Python程序段:
dic={"apple":5,"cake":10,"computer":3000}
lis=[[1,2,3],"apple","computer",[8,0,9]]
ans=0
for 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
D
2.下列Python程序段功能为:列表a中存放的是无重复的非负整数,找出其中的最大值max1和次大值max2。
max1 = max2 = 0
for 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=0
for i in range(2, 11, 2) :
  if list[i-2]+list[i-1]==list[i]:
    c+=1
print(c)
该程序段运行结果为(  )
A.2 B.4 C.6 D.8
B
4.有如下Python程序段:
import turtle
n=int(input("输入 n:"))
for i in range(n*3):
  turtle.forward(100)
  turtle.left(360∥n+2)
turtle.hideturtle()
若输入 n 的值为 4,则绘制的图形为以下哪一项(  )
C
5.有如下Python程序段:
m=int(input("请输入一个正整数: "))
s=0
for i in range(1 ,m):
  if i% 2 == 0 :
    s=s+i
  elif i% 3 == 0 :
    i=i+1
  s=s+1
print(s)
若输入m的值为6,执行该程序段后,输出的结果是(  )
A.7 B.11 C.13 D.18
B
6.有如下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
C
7.有如下Python程序段:
s=input('请输入数据:')
t=s[0]
maxt=0
for i in range(len(s)):
  if s[i]>s[i-1]:
    t+=s[i]
    if len(t)>maxt:
      maxt=len(t)
      ans=t
A
    else:
      t=s[i]
print(ans)
执行该程序段后,输入“12123234561”,输出的内容是(  )
A.23456 B.12123 C.34561 D.1212323
8.查找素数能够很好地体现出计算机解决某些数学问题的速度优势,除了计算机性能以外,设计更加简单的算法也能够提高计算机解决某些问题的速度。某种素数算法就是通过“开关”的思想,例如求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]=0
print(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):
C
9.下列表格中有①②③④共4段Python代码,
①实现的功能是( ) ②实现的功能是( )
for i in range(6):   t.circle(100) #画半径为100圆   t.left(60) x=50
for 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 ④C
10.在传递信息的过程中,通常会将一些敏感信息进行加密,以下是对数据进行加密的Python程序段,若输入数据为“my789”,则输出的内容为 (  )
s=input("输入明文:")
t=""
for ch in s:
  if "0"<=ch<="9":
    x=int(ch)+3
    if x>=10:
      x=x%10
B
    ch=str(x)
  t=t+ch
print (t)
A.my123 B.my012 C.pa012 D.pa123
解析 本题考查读取Python程序的能力。逐个访问字符串将其中的数字加3,如果该数大于等于10,对结果进行除10取余。
11.有如下 Python 程序段:
s = input("请输入一串字符串:")
f = True
for i in range(len(s)//2):
  if s[i] != s[len(s)-i-1]:
    f = False
    break
print(f)
若执行该程序后, 输出的结果是“True”,则输入的字符串可能是( )
A."onion" B."hello" C."278" D."111"
D
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.tisias
B
13.某Python程序代码如下:
list1=[2,3,4,5,6]
m1=1;m2=2
for n in list1:
  if n%3==0:
    m1*=n
print(m1-m2)
程序运行后,输出的结果为    。
答案 16
14.现有一程序模拟竞猜某商品价格,总共有五次竞猜机会。请在划线处填入合适的代码。
import random
a=random.randint(0, 100)
chance=5
print("共%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
4
巩固与提升
基础巩固
能力提升
1.有Python程序如下:
lst=[1,6,2,9,3,5,2]
k,s=1,0
m=len(lst)∥2
for i in range(m):
  s+=lst[m+k]-lst[m-k]
  k+=1
print(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=0
for ch in word:
  if ch[0]=="n":
    n=n+1
print(n)
执行上述代码后,输出的内容是(  )
A.2 B.-2 C.1 D.-1
A
解析 程序遍历列表中的内容,并查找以n开头的字母个数,但字母区分大小写。
3.有如下Python程序段:
a[7]=49;a[6]=28
sum=1
for 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.22
B.43
C.[0,0,-7,14,7,21,28,49]
D.[-7,14,7,21,28,49]
C
4.求列表lis第 3 项至第 7 项元素的和
lis=[6,3,-2,5,19,21,-9,22,14,25]
he=[0]*10
he[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]
D
5.利用海龟作图绘制一个正n边形,
import turtle
n=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.④
C
6.有如下Python程序段:
s=0
for i in range(10):
  if i%3==0:
    s+=1
  else:
    continue
else:
  s+=1
print(s)
执行该程序段后,输出的结果是(  )
A.3 B.4 C.5 D.6
C
7.有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]
D
8.某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=0
for ch in s:
  sum+=list[dic[ch]]
print (sum)
执行该程序段后,变量sum的值为(  )
A.23 B.25 C.31 D.37
B
10.有如下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
D
11.有如下 Python 程序:
dic={"2":"ABC","3":"DEF","4":"GHI","5":"JKL","6":"MNO","7":"PQRS","8":"TUV","9":"WXYZ"}
s=input()
m=""
t=1
for i in range(1,len(s)):
  if s[i]==s[i-1]:
    t+=1
B
  elif s[i]=="#":
    m=m+dic[s[i-1]][t-1]
    t=1
print(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=5
pmin=a[0]
for i in range(1,len (a)):
  if key    pmin=a[i]
print(pmin)
执行该程序段后,输出的结果是(  )
A.1 B.4 C.7 D.9
C
D
13.某数据加密算法的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+t
print(t)
程序运行时,输入明文"pyT638“,输出的结果是(  )
A.305 B.503 C.PYT305 D.503TYP
14.判断身份证中是否包含数字6或8代码如下:
s=input("请输入身份证号:")
y=False
if len(s)==18:
  for k in s:
    if k=="6" or k=="8":
      y=True
print(y)
下列说法正确的是 (  )
A.若输入的身份证号小于18位,执行该程序段无输出
B.仅将“for k in s:”改为“for k in range(len(s)):”,程序功能不变
C.该代码段中变量k的数据类型为整数型
D.该程序段无法统计6和8的个数
D
15.有如下Python程序段,
s=['pears','apples','bananas','grapes']
n=len(s[0])
for i in s:
  if len(i)>n:
    n=len(i)
    ans=i
print(ans)
执行该程序后输出的结果是(  )
A.pears B.apples
C.bananas D.grapes
C
16.有如下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=0
print(y)
执行该段程序后,输出的结果是(  )
A.394 B.809 C.60 D.5
17.有如下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+=ch
print(ans)
执行该段程序后,输出的内容是(  )
A.PYTHON B.pgTroz
C.PgrTZO D. PYvHsN
18.有如下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 01100110
B.10011011 10011001
C.01100100 01100110
D.11011001 10011001
C
19.十八位身份证号由六位数字地址码、八位数字出生日期码、三位数字顺序码和一位校验码组成, 其中倒数第二位是性别代码,男单女双。以下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)-1
cnt=0
for 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+=3
print(cnt)
执行该程序段后,变量cnt的值为(  )
A.9 B.10 C.11 D.12
21.有如下Python程序段:
c,m=0,0
for 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
D
若列表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=1
ss=""
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)-1
for i in range(len(a)-2,0,-1):
  if a[i] > a[p]:
    p = i
tmp = a[p];a[p] = a[0];a[0]=tmp
A
执行该程序段后,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]
C
24.有如下 Python 程序段:
s = "1010/1100/1111"
ans,t = 0,0
for i in s:
  if "0" <= i <= "1":
    t = t * 2 + int(i)
  else:
    ans += t
    t = 0
print(ans)
运行该程序段,输出结果是(  )
A.12 B.15 C.22 D.37
25.在由数字组成的字符串中,找出同一数字的相邻最大间距, 如字符串 “1231212323455”,数字“3”第一次与第二次分别出现在位置3和8,相距5,间隔距离最大。编写Python代码实现上述功能,Python程序段如下所示:
s=input('请输入数字字符串:')
list1=[-1]*10
maxn=0
for 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]=i
C.①num=int(s[i])   ②maxn=i-num
③num=i
D.①list1[num]=i   ②maxn=i-list1[num]
③num=int(s[i])
D
26.有如下 Python 程序段:
a=[1,5,9,2,6,8,3,4,7]
n=0 ;flag=True
for 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=True
print(n)
执行上述程序段后,输出的值为(  )
A.2 B.0 C.-1 D.1
27.有如下Python程序段:
s1=input("请输入字符串:")
a=[0]*128
for item in s1:
  ch=ord(item)
  a[ch]=a[ch]+1
s2=""
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=0
for 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=0
for 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,0
if 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+=ch
print(c)
程序运行后,输出的结果是 (  )
A.tEL-885 B.tEL-114
C.TEL-114 D.TEL-885
                
1.有如下Python程序段:
dic={"apple":5,"cake":10,"computer":3000}
lis=[[1,2,3],"apple","computer",[8,0,9]]
ans=0
for 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
2.下列Python程序段功能为:列表a中存放的是无重复的非负整数,找出其中的最大值max1和次大值max2。
max1 = max2 = 0
for 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=0
for i in range(2, 11, 2) :
  if list[i-2]+list[i-1]==list[i]:
    c+=1
print(c)
该程序段运行结果为 (  )
A.2 B.4 C.6 D.8
4.有如下Python程序段:
import turtle
n=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=0
for i in range(1 ,m):
  if i% 2 == 0 :
    s=s+i
  elif i% 3 == 0 :
    i=i+1
  s=s+1
print(s)
若输入m的值为6,执行该程序段后,输出的结果是 (  )
A.7 B.11 C.13 D.18
6.有如下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
7.有如下Python程序段:
s=input('请输入数据:')
t=s[0]
maxt=0
for 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
8.查找素数能够很好地体现出计算机解决某些数学问题的速度优势,除了计算机性能以外,设计更加简单的算法也能够提高计算机解决某些问题的速度。某种素数算法就是通过“开关”的思想,例如求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]=0
print(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+ch
print (t)
A.my123 B.my012 C.pa012 D.pa123
11.有如下 Python 程序段:
s = input("请输入一串字符串:")
f = True
for i in range(len(s)//2):
  if s[i] != s[len(s)-i-1]:
    f = False
    break
print(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.tisias
13.某Python程序代码如下:
list1=[2,3,4,5,6]
m1=1;m2=2
for n in list1:
  if n%3==0:
    m1*=n
print(m1-m2)
程序运行后,输出的结果为   
14.现有一程序模拟竞猜某商品价格,总共有五次竞猜机会。请在划线处填入合适的代码。
import random
a=random.randint(0, 100)
chance=5
print("共%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))
    ②     #结束循环

展开更多......

收起↑

资源列表