内容正文:
第9课 循环结构(见学生用书P36)
——3.2 Python语言程序设计,教材第86~89页
1.掌握for循环、while循环的基本语法结构。 2.能够设计循环结构的算法。
1.for循环
(1)基本结构
遍历序列中的元素,执行循环体(从序列的第一个元素开始,依次选择每个元素执行操作直至结束)。当序列中的元素全部遍历完成后,程序继续执行else子句中的语句块
for <变量> in <序列>:
<循环体>
[else: #else子句可选
<语句块>]
list1=[1,2,3,4]
for i in list1:
print(i)
第1次循环,循环变量i=list1[0]=1;第2次循环,循环变量i=list1[1]=2;第3次循环,循环变量i=list1[2]=3;第4次循环,循环变量i=list1[3]=4;遍历完list1中的所有元素,循环结束
word='abcd'
for x in word:
print(x)
第1次循环,循环变量x=word[0]=a;第2次循环,循环变量x=word[1]=b;第3次循环,循环变量x=word[2]=c;第4次循环,循环变量x=word[3]=d;遍历完word中的所有元素,循环结束
(2)range函数
range 函数用于生成整数序列。
通式:range(start,stop,step);该序列的索引范围为__[start,stop)__,步长为step。其中,start为起始值,默认值为0时__可省略__;step为步长,默认值为1时__可省略__;stop为终值,__不可省略__。如:range(0,10,1)可省略为range(10)。
2.while循环
在执行循环体前,首先判断条件是否为真。如果条件为真,执行一次循环体,再次判断条件是否为真。如果条件仍为真,则再次执行循环体,直至条件为假,跳出while循环
while <条件>:
<循环体>
s=0
while s<10:
s+=4
print(s)
第1次条件,s的值为0,s<10成立,执行循环体,s=4;
第2次条件,s的值为4,s<10成立,执行循环体,s=8;
第3次条件,s的值为8,s<10成立,执行循环体,s=12;
第4次条件,s的值为12,s<10不成立,循环结束
1.转移和中断语句
continue:中断本轮循环的执行,进入下一轮新的循环的判断。
break:跳出整个循环结构。
2.循环嵌套
一个循环体内可以嵌套另一循环,一般为双重循环,其循环总次数等于内外层次数之积。
下列程序段中,赋值语句s+=i 被重复执行的次数和s 最后的值分别为( B )
s=0
for i in range(3,14,4):
s+=i
A.2 次 21 B.3 次 21 C.4 次 21 D.4 次 35
【解析】 从初值3开始,步长为4,i的取值有3、7、11,选项B正确。
变式1 有如下Python程序段:
count=0
L=[”apple”,”banana”,”pear”,”orange”,”peach”,”strawberry”]
for i in [1,5,2]:
count+=len(L[i])
print(count)
执行该程序段后,输出的结果是( C )
A.12 B.16 C.20 D.22
【解析】 i的取值有1、5、2,count用于累加len(L[i]),count=len(”banana”)+len(”strawberry”)+len(”pear”)=6+10+4=20,选项C正确。
变式2 2024·效实中学检测有如下Python 程序段:
li=[[”a”,10],[”b”,20],[”c”,30]]
dic={}
for i in range(len(li)):
dic[li[i][0]]=li[i][1]
print(dic)
执行该程序段后,输出的结果是( D )
A.{'a',10,'b',20,'c',30} B.{10,20,30}
C.{['a','b','c'],[10,20,30]} D.{'a':10,'b':20,'c':30}
【解析】 通过遍历列表li,依次取出元素[”a”,10], [”b”,20], [”c”,30],将各列表元素索引为0的位置作为key,将各列表元素索引为1的位置作为value。最后输出dic为{'a':10,'b':20,'c':30}。
变式3 有如下Python 程序段:
n=int(input(”请输入一个数: ”))
s=0
for i in range(1,n):
i=i*2
s+=i
print(s)
若输入的数为8,则执行该程序段后,输出的结果是( D )
A.2 B.14 C.22 D.56
【解析】 根据题目意思,做出如下表格,最终s=56,选项D正确。
i
1
2
3
4
5
6
7
s
2
2+4
2+4+6
2+4+6+8
2+4+6+8+10
2+4+6+8+10+12
2+4+6+8+10+12+14
下列while循环的循环结果为( C )
i=0;s=1
while s<10:
s=s*i+1
i+=1
print(s)
A.11 B.10 C.16 D.32
【解析】 第1次循环,s=1,i=1;第2次循环,s=2,i=2;第3次循环,s=5,i=3;第4次循环,s=16,i=4,跳出循环。
变式 2024·北仑中学检测有如下Python 程序段:
a=[9,5,2,3,0,-9,5,0,7,-10]
s,i=0,0
while a[i]!=0 and i<len(a):
s+=1
i+=1
执行该程序段后,变量s 的值为( A )
A.4 B.5 C.8 D.10
【解析】 当a[i]==0 或i>=len(a)时,循环结束,循环结束之前,对遇到的非0元素进行计数,选项A正确。
有如下Python程序段:
a=[1,3,4,2,3]
max=a[0]
s=0
for i in range(1,len(a)):
if a[i]>max:
max=a[i]
s=s+max
print(s)
执行该程序段后,变量s的值为( A )
A.15 B.13 C.12 D.7
【解析】 在循环过程中,查找最大值,并将最大值累加到s中。4次循环中max依次为3,4,4,4,选项A正确。
变式 有如下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 的值为( B )
A.9 B.10 C.11 D.12
【解析】 程序段通过for 循环遍历列表a 中的元素,对于列表a 中的第i个元素,如果该元素等于其相邻两个元素的差,则计数器cnt加1,如果a[i]大于其相邻两个元素的差,则计数器cnt 加2,否则计数器cnt 加3。列表a 中的第2 个元素等于其相邻两个元素的差,因此cnt 加1,列表a 中的第3 个到第5 个元素都大于其相邻两个元素的差,因此计数器cnt 均加2,而第6 个元素小于其相邻两个元素的差,因此cnt 加3。故最终计数器cnt 的值为1+2+2+2+3=10。选项B正确。
2024·温岭中学检测有如下Python 程序段:
n=int(input())
s=0;i=1
while i*i<=n:
if i==n//i:
s+=1
elif n%i==0:
s+=2
i+=1
print(s)
若输入16,则执行该程序段后,输出的结果是( C )
A.3 B.4 C.5 D.6
【解析】 执行过程如下,选项C正确。
i
1
2
3
4
5
i*i<=n
T
T
T
T
F
s
2
4
4
5
5
变式 有如下Python程序段,下列说法正确的是( D )
s1=[12,15,28]
s2=[15,28,32]
i=0
while i<=len(s1)-1:
if s1[i] not in s2:
print(s1[i])
i=i+1
A.该程序输出结果为32
B.循环结束后i的值为2
C.该程序输出的结果为[12]
D.该程序实现的功能是输出s1 中有但s2 中没有的元素
【解析】 程序实现的功能是输出s1 中有但s2 中没有的元素,输出结果是12,选项D正确。
针对选考有如下Python程序段:
n=int(input())
st=””
for i in range(1,n+1):
for j in range(1,i+1,2):
st+=”*”
print(st)
若输入5,则执行该程序段后,输出的结果是( C )
A. B. C. D.
【解析】 st在循环过程中没有初始化,”*”的数量逐行累加,选项C正确。
变式 针对选考有如下Python程序段:
a=[1]*6
b=[96,88,84,91,99,80]
for i in range(6):
for j in range(i+1,6):
if b[j]>b[i]:
a[i]+=1
else:
a[j]+=1
print(a)
执行该程序段后,列表a的值为( B )
A.[5,3,2,4,6,1] B.[2,4,5,3,1,6]
C.[10,6,4,8,12,2] D.[4,8,10,6,2,12]
【解析】 利用列表a对列表b中的元素按大小进行排名,数字越大,名次越高,选项B正确。
运行过程如下:
变量
a[0]
a[1]
a[2]
a[3]
a[4]
a[5]
i=0
2
2
2
2
1
2
i=1
2
4
3
2
1
3
i=2
2
4
5
2
1
4
i=3
2
4
5
3
1
5
i=4
2
4
5
3
1
6
i=5
2
4
5
3
1
6
2024·路桥中学检测有如下Python程序段:
n='15867239012'
s=0
for x in n:
if int(x)%2==0:
continue
elif s==14:
break
s+=int(x)
print(s)
执行该程序段后,输出的结果是( B )
A.18 B.26 C.14 D.17
【解析】 当x是偶数时,跳过当次循环,x没有累加到s中;当s==14成立时,跳出整个循环。s=1+5+7+3+9+1=26,选项B正确。
变式 有如下Python程序段:
s=0
for i in range(10):
if i%3==0:
s+=1
else:
continue
s+=2
else:
s+=1
print(s)
执行该程序段后,输出的结果是( C )
A.3 B.4 C.5 D.6
【解析】 程序利用循环统计0到9之间能被3整除的数字个数,其中continue跳过当次循环,不会执行s+=2;for循环正常结束,会执行else中的语句;当i为0,3,6,9时s+1,循环结束后再+1,选项C正确。
有如下Python程序段,测试结果如图所示。
n=int(input(”请输入行数: ”))
if n%2==0:#保证n的值为奇数
n=n-1
a=[]
for i in range(n):
if i<=n//2:
b=2*i+1#当在上半部分的时候
else:
______________#当在下半部分的时候
______________
a.append(” ”*w+”&”*b)
for s in a:
print(s)
上述程序段中横线处可选的代码有:
①b=n-2*i+1 ②b=(n-i)*2-1 ③w=(n-b)%2 ④w=(n-b)//2
下列选项中,代码顺序正确的是( D )
A.①③ B.①④ C.②③ D.②④
【解析】 在下半部分时,“&”的个数逐渐减少,例如n为9,则i=5时开始下半部分,个数为8个,i=6时,个数为6个,推出公式b=(n-i)*2-1;第2个空是空格个数,每行总数有n个,减去“&”的个数,并除以2就是空格个数,选项D正确。
|随|堂|检|测|
1.有如下Python程序段:
s=1
i=1
for i in [1,9,2]:
s=s+i
s=s+i
print(s)
执行该程序段后,输出的结果是( B )
A.23 B.15 C.12 D.16
【解析】 i=1时,s=2;i=9时,s=11;i=2时,s=13;循环结束后,s=s+i=13+2=15,选项B正确。
2.有如下Python程序段:
a=[9,1,7,3,8,4]
key=5
pmin=a[0]
for i in range(1,len(a)):
if key<a[i]<pmin:
pmin=a[i]
print(pmin)
执行该程序段后,输出的结果是( C )
A.1 B.4 C.7 D.9
【解析】 程序的功能是查找列表a中大于key的最小值,选项C正确。
3.有如下Python 程序段:
while a!=b:
if a>b:
a=a-b
else:
b=b//2
print(b)
若a、b的值分别为22和16,则执行该程序段后,输出的结果是( C )
A.0 B.1 C.2 D.16
【解析】 把a=22,b=16代入程序,第5次循环后,a==b,循环结束,b的值为2,选项C正确。
4.针对选考2024·嘉兴一中检测有如下Python 程序段:
a=[] #创建一个空列表a
for i in range(11,31,2):
flag=True
for j in range(2,i):
if i%j==0:
flag=False
break
if flag==True:
a.append(i) #把变量i 的值添加到列表a中
执行该程序段后,列表a 中的元素个数为( B )
A.5 B.6 C.7 D.10
【解析】 程序的功能是将11到31(不含)之间的素数添加到列表a中,有11,13,17,19,23,29,共6个,选项B正确。
5.2024·绍兴鲁迅中学检测如图所示,EAN13标准码共13位数,第1~3位是国家代码,第4~7位是厂商代码,第8~12位是商品代码,第13位是校验码。
计算校验码的方法如下:
①计算前十二位中奇数位的数字之和,如6+0+2+4+6+8=26;
②计算前十二位中偶数位的数字之和,如9+1+3+5+7+9=34;
③将奇数位数字之和与偶数位数字之和的三倍相加,如26+34×3=128;
④用10减去步骤③结果的个位数,如128的个位数为8,10-8=2。
计算校验码的Python程序段如下:
s=input(”请输入EAN13标准码的前12位: ”)
sum=0;sum1=0;sum2=0;f=0
for i in range(len(s)):
if ①________:
sum1+=int(s[i])
else:
sum2+=int(s[i])
sum=②________
f=10-sum%10
print(”校验码为: ”,f)
上述程序段中①、②处应填入的代码分别为( D )
A.①i%2==1 ②sum1+sum2 B.①i%2==0 ②sum1+sum2
C.①i%2==1 ②sum1+sum2*3 D.①i%2==0 ②sum1+sum2*3
【解析】 由方法③得到,sum1为奇数位数字之和,sum2为偶数位数字之和,奇数位的索引i为偶数,则选项D正确。
6.2023·浙江6月选考已排序的列表a 有n 个整型元素,现要查找出现次数最多的值并输出。若出现次数最多的值有多个,则输出最前面的一个。实现该功能的Python程序段如下:
c,m,v=1,1,0
for i in range(1,n):
#
print(a[v])
上述程序段中加框处应填入的代码为( A )
A.if a[i]==a[i-1]:
c+=1
if c>m:
m=c
v=1
else:
c=1
B.if a[i]==a[i-1]:
c+=1
if c>m:
m=c
v=1
else:
c=1
C.if a[i]==a[i-1]:
c+=1
else:
if c>m:
m=c
v=i-1
c=1
D.if a[i]==a[i-1]:
c+=1
else:
if c>m:
m=c
v=i-1
c=1
【解析】 由于列表a 为有序列表,即有“值相同的数都是相邻的”这一逻辑关系,因此计算每个数的出现次数,可以通过检查相邻两个数进行统计。观察程序段和选项中的代码可知:变量v 为次数最多的值在列表a 中的索引,变量c 为当前数值的出现次数,变量m 用于统计出现次数中的最大值。其算法思想为:若相邻两个数相等,则计数器c 加1,否则应该将c 变为初值1。首先可以排除选项B,因为该选项中else 分支不符合逻辑。选项C、D 都存在缺陷,例如最多的一组相同的数出现在列表的最后时,不能准确统计结果。例如a=[2,3,3,3,4,4,4,4,4],此时输出值为3,而正确结果为4。选项A 逻辑结构合理,可以完成各种情况的统计任务。
温馨提示:请完成高效作业9 )
学科网(北京)股份有限公司
$$