(共31张PPT)
第3章
课时11 循环结构的程序实现
信息技术
课标梳理·微知著
教材重点 课标要求 学业质量水平
循环结构 掌握for语句以及while语句的使用方法 2-2
教材研析·固基础
循环结构流程图
首先,为循环变量设置初始值,然后判断循环条件。
若条件为真,则执行循环体同时更改循环变量、继续循环;否则结束循环。
1
循环结构的程序实现
1.程序实现:通过for语句和while语句来实现。
2.for语句
(1)格式
for <变量> in <序列>:
<循环体>
(2)通过遍历序列中的元素实现循环,并通过序列的元素数量来控制循环次数 循环次数等于序列的元素个数;从第1个元素开始,每次循环从序列中按序取1个元素作为本次循环的变量值,并执行一遍循环体中的代码。
(3)注意点
①序列后的冒号不要遗忘
②循环体缩进
(4)遍历字符串
每次循环,变量依次指向字符串中的一个字符。格式如下:
for<变量>in<字符串>:
<循环体>
典例1 有如下Python程序段:
s='为学须先立志'
for i in s:
print(i,end=',')
执行上述代码,输出的结果为________________。
为,学,须,先,立,志,
解析 for遍历字符串s中的每个字符,且每次以,结束。
典例2 将字符串s中的大写英文字母转换成小写字母,实现上述功能的Python代码如下:
s=″Hello World!″
s2=″ ″
for ①__________:
if'A'<=ch<='Z':
s2=②________________#大写字母转换成小写字母ord('A'):65
ord('a'):97
else:
s2=s2+ch
print('转换成小写字母:',s2)
请回答下列问题:
ch in s
s2+chr(ord(ch)+32)
(1)将划线处代码补充完整。
(3)请给出②处的另外一种表达式。
(2)for循环体中的if语句执行总次数等于( )
A.s串中大写字母的个数
B.s串中小写字母的个数
C.s串中字符个数
D.s串中大小写字母的总数
C
s2+chr(ord(ch)-ord('A')+ord('a'))
(4)请写出用for循环逆序输出字符串s中小写字母的代码。
s2=″ ″
for ch in s[::-1]:
if 'a'<=ch<='z':
s2+=ch
print(″逆序输出小写字母:″,s2)
解析 (1)①枚举s中的每个字符ch;②大写英文字母的ASCII码值比相应的小写字母ASCII码值小32,因此其表达式如上。(2)if语句是在整个循环语句中的,因此是s中全部的字符数。
典例3 (2022浙江7月学考)某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
解析 由代码可知,若是数字字符,则用9减去该数字,若是小写字母,则转换为相应的大写字母,若是其他情况则不进行任何处理,直接按顺序连接到变量c。因此当输入字符串为“Tel-114”,最后输出字符串为“TEL-885”,故选D。
D
(5)遍历列表
每次循环,变量依次指向列表中的一个元素。格式如下:
for<变量>in<列表>:
<循环体>
(6)range函数
①作用:指定序列中元素的个数和范围。
②格式:如下
range(start,stop,step)
③参数
<1>start:计数从start开始。默认是从0开始。例如range(5)等价于range(0,5)。
典例4 有如下Python程序段:
x=0
for i in range(1,9,2):
x=x+i
该程序段执行后,变量x的值是( )
A.9 B.16 C.25 D.36
解析 本题考查循环结构程序求值。for循环语句中的一个重要部分即步长2,随着每一次循环的执行,循环变量都要在[初值,终值]的范围内增加或减少,直至循环结束。题中循环变量i的值在满足[1,8]范围内的分别是1、3、5、7,通过循环体“x=x+i”语句将i的值不断累加到变量x上,最后得到x的值为16。
B
典例5 有如下Python程序段:
s=0
for i in range(5,________,-1):
s=s+1
若要使语句s=s+1执行10次,则循环变量i终值应为( )
A.-4 B.-5
C.-6 D.-7
解析 本题考查循环结构。模拟后可知循环应该到-5,-4~0共5次,1~5共5次。故选B。
B
(7)遍历整数序列
①若for语句遍历的序列中的元素为有序整数,则可以利用内建函数range()来创建。
②每次循环,变量依次指向序列中的一个整数。格式如下:
for变量in range(start,stop,step):
<循环体>
典例6 (2023浙江7月学考)某Python程序如下:
a=input(″输入数字字符串:″)
s=″ ″
flag=1
for i in range(0,len(a)-1,2):
d1=int(a[i])
d2=int(a[i+1])
t=d1+flag d2
if t<0:
t+=10
elif t>=10:
t-=10
s=str(t)+s
flag=-flag
if len(a)%2==1:
s+=a[len(a)-1]
print(s)
程序运行时,若输入“48135”,则输出的结果是( )
A.528
B.582
C.825
D.285
C
解析 由代码可知,将字符a中的数字每两个字符为一组进行分组处理,t=d1+flag*d2,且flag的值将变号。然后将t逆序连接到字符s中。最后不能成对的一个字符顺序连接到字符串s中。计算如下:第一组,flag=1,4+8= 12,因此t=2,s=“2”;第二组,flag=-1,1-3=-2,所以t=8,故s=“82”。最后一个字符“5”,顺序进行连接,故s=“825”,因此本题选C。
3.while语句
(1)格式
while <条件>:
<循环体>
(2)执行过程:首先判断条件是否为真,若条件为真,则执行一次循环体,再次判断条件是否为真,若仍为真,则再执行一次循环体,以此类推,直到条件为假时退出while语句。
(3)作用:已知次数的循环用for(循环次数即遍历序列的元素个数)。在循环执行前不知道其需要执行的次数时用while循环。
典例7 要将1个十进制数转二进制数。实现上述功能的Python程序如下,请在划线处填上合适的代码。
d=int(input('请输入1个十进制正整数:'))
#方法:除二取余(循环执行直至被除数为0)
ans=''
b=d
①________________________
y=b % 2
②________________________
ans=str(y)+ans
print('十进制数',d,'的二进制值为:',ans)
while b!=0:
b=b // 2
解析 ①十进制转二进制前不知道需要除二取余几次才能得到结果 用while不用for。除二取余终止的条件是被除数为0 反之只要被除数不为0,则继续除二取余(循环) 满足条件b!=0(被除数不为0)时循环。②每次循环得到本次除二取余的余数后,要为下次循环做好准备 更新下次除二取余的被除数的值 用当前的被除数除以2取整数部分得到b=b // 2。
4.break和continue语句
(1)while循环在条件为假时结束,for循环在遍历完序列后结束。若循环条件仍然为真或者序列没有遍历完时,想要强行跳出循环,可以用break语句。
(2)continue语句,功能:结束当前的当次循环,但不跳出循环结构,继续判断下一次执行循环的条件是否成立。
典例8 判断一个正整数是否为素数(在大于1的自然数中,除了1和其本身以外,不能被任何一个数整除)的Python程序如下,请在划线处填上合适的代码。
num=int(input('请输入1个十进制正\整数:'))
cs=2
flag=False
while ①________________:
if ②___________________:
flag=True
③__________
cs=cs+1
if ④________________:
print(num,'是素数')
else:
print(num,'不是素数')
cs<=num-1
num % cs==0:
Break
flag==False
解析 ①除数的范围是2 num-1 ②循环内部判断数num是否能被当前除数cs整除 num % cs==0 ③只要num能被2 num-1之间任何一个除数cs整除,就不是素数,后面的除数不用再验证了,所以要终止循环 break ④循环中被整除 num不是素数时,flag True,所以flag为True代表着不是
素数。
5.循环嵌套
循环结构中,允许在一个循环体里面嵌入另一个循环。
典例9 输出当前序列中所有素数的Python程序如下,请在划线处填上合适的代码。
b=int(input('请输入一个正整数作为\序列起点:'))
e=int(input('请输入一个正整数作为\序列终点:'))
①________
for i in range (②________________):
cs=2
flag=False
#以下while循环(内循环)嵌套在for循环(外循环)中
ans=''
b,e+1,1(或b,e+1)
while cs <=i - 1:
if i%cs==0:
flag=True
break
cs=cs + 1
if flag==False:
ans=ans+' '+str(i)
print(b,'~',e,'中的素数有:',ans)
解析 ①变量在使用前要先赋值 结果字符串ans在循环前要先赋值空串。②题目要检测序列中每个数是否是素数,所以要遍历序列中的每个数 step为1;start为输入的起点b;遵循“前闭后开”规则,stop为输出的终点e的后一个数 e+1。
典例10 将一张长a厘米、宽b厘米的长方形纸沿直线剪开,剪出一个正方形,再在剩下的部分上继续裁剪,每次只剪一刀,但必须剪出一个正方形。这样最多能剪几次 (正方形边长必须是整厘米数)
n=int(input(″请输入长:″))
m=int(input(″请输入宽:″))
c=0
方框中的代码将会是以下语句:
①n!=m ②n=m ③nm
实现程序要求的正确选项是( )
A.①③
B.①④
C.②③
D.②④
解析 本题的算法思想是:当长宽不同时,可以继续剪,原则是较长边减较短边,直到两条边相等为止,退出循环。因此答案为B。
B