(共29张PPT)
4.4
运用循环结构描述问题求解过程
高中信息技术
必修1
新知导入
本节主要内容:
1、for循环的应用。
2、while循环的应用。
3、循环嵌套的应用。
4、循环控制的应用。
新知讲解
4.4.1
for循环的应用
新知讲解
格式:
for
循环变量
in
列表:
语句或语句组
注意:1、for循环依次把列表中的每个元素逐个迭代出来
2、冒号“:”代表下一行是循环的第一行,循环体在书写时需要缩进
新知讲解
for循环列表的表达方式:
(1)直接罗列的方式。如:
for
value
in
[1,2,3,4,5]:
(2)先定义后使用的方式。
如:
values=[1,2,3,4,5]
for
value
in
values:
(3)使用range(
)函数,
注意:
①range函数从第一个值开始到第二个值止(不包括第二个值)。
②可指定步长。
③数值列表可以是降序。
新知讲解
for循环流程图
执行过程:
当判定条件满足时,重复执行代码段,否则结束循环,跳转出循环体。
课堂练习
【例】
写出下列程序的输出结果。
for
letter
in
("Python"):
print("当前字母
:",
letter)
课堂练习
【例】
写出下列程序的输出结果。
fruits
=
['banana',
'apple',
'mango']
for
fruit
in
fruits:
print
("当前水果
:",
fruit)
print
("Good
bye!")
课堂练习
【例】计算斐波那契数列的前30项之和。斐波那契数列:1,1,2,3,5,8,13,21,
34,55,.….提示:除了前两项,后面的每一项是其前两项之和。
a=b=1
s=2
for
n
in
range(3,30):
t=a
a=b
b=t+a
s=s+b
print(s)
新知讲解
4.4.2
while循环的应用
新知讲解
格式:
while
(表达式):
语句或语句组
注意:
(1)表达式一般是一个关系表达式或一个逻辑表达式,表达式的值应该是一个逻辑值真(True)或假(False)
(2)每次循环都是执行完循环体语句后回到表达式处重新开始判断,重新计算表达式的值。一旦表达式的值为假就退出循环,为真时就继续执行循环体语句。
(3)循环体中必须有改变条件表达式值的语句,否则将成为死循环。
新知讲解
执行过程:
当表达式的值为真时,执行循环体语句;当表达式的值为假时,退出循环,执行循环体外的下一条语句(即while后面没有缩进的第一条语句)。
上条语句
表达式?
循环语句
下条语句
N
Y
课堂练习
【例】
写出下列程序的输出结果。
i
=
1
while
i
<
7:
print(i)
i
+=
1
课堂练习
【例】
写出下列程序的输出结果。
i
=
1
while
i
<
7:
print(i)
i
+=
2
PS:通过修改步长可以的到不同的结果
课堂练习
【例】
写出下列程序的输出结果。
i
=
1
while
i
<
6:
print(i)
i
+=
1
else:
print("i已经比6大")
新知讲解
4.4.3
循环嵌套的应用
新知讲解
循环嵌套的定义:在一个循环体内又包含另一个循环。嵌套可以分为多层,每一层循环在逻辑上必须是完整的。在编写程序代码时,循环嵌套的书写要采用缩进形式,内循环中的语句应该比外规律地向右缩进4列。
循环嵌套的作用:解决复杂的问题。
新知讲解
循环嵌套的执行过程:
(1)当外层循环条件为True时,则执行外层循环结构中的循环体;
(2)外层循环体中包含了普通程序和内循环,当内层循环的循环条件为True时会执行此循环中的循环体,直到内层循环条件为False,跳出内循环;
(3)如果此时外层循环的条件仍为True
,则返回第2步,继续执行外层循环体,直到外层循环的循环条件为False;
(4)当内层循环的循环条件为False,且外层循环的循环条件也为False,则整个嵌套循环才算执行完毕。
课堂练习
例:实现九九乘法表。
方法一:for实现
for
row
in
range(1,
10):
for
col
in
range(1,
row+1):
print('{}
{}={}'.format(col,
row,
col
row),
end='\t')
print()
课堂练习
例:实现九九乘法表。
方法二:while实现
row
=
1
while
row
<10:
col
=
1
while
col
<=
row:
print('{}
{}={}'.format(col,
row,
col
row),
end
=
'\t')#见for循环的分析
col
+=
1
print()
#换行
row
+=
1
#内循环结束,外循环加一
课堂练习
例:求所有水仙花数。水仙花数是指一个三位数,其个位、十位、百位3个数字的立方和等于这个数本身(for循环中嵌入if语句)。
for
i
in
range(100,1000):
a=i
%
10
#个位
b=int(i
%
100
/
10)
#十位
c=int(i
/
100)
#百位
if
(a
a
a+b
b
b+c
c
c==i):
print("水仙花数为:",i)
for
i
in
range(1000,10000):
a=i
%
10
#个位
b=int(i
%
100
/
10)
#十位
c=int(i
/
100)
#百位
if
(a
a
a+b
b
b+c
c
c==i):
print("水仙花数为:",i)
新知讲解
循环类型
对比
while
循环
在给定的判断条件为
true
时执行循环体,否则退出循环体。
for
循环
重复执行语句
嵌套循环
在循环体中再嵌套循环
循环类型对比
新知讲解
4.4.4
循环控制的应用
新知讲解
循环控制的作用:循环控制包含控制循环变量的变化方式和控制循环的跳转,简单地说循环控制语句可以更改语句执行的顺序。
控制语句
描述
break
语句
在语句块执行过程中终止循环,并且跳出整个循环
continue
语句
在语句块执行过程中终止当前循环,跳出该次循环,执行下一次循环。
pass
语句
pass是空语句,是为了保持程序结构的完整性。
新知讲解
【例】break
实例应用。
for
letter
in
'Python':
if
letter
==
'h':
break
print('当前字母
:',
letter)
新知讲解
【例】
continue
实例应用。
for
letter
in
'Python':
if
letter
==
'h':
continue
print
('当前字母
:',
letter)
新知讲解
【例】pass实例应用。
#
输出
Python
的每个字母
for
letter
in
'Python':
if
letter
==
'h':
pass
print(
'这是
pass
块')
print
('当前字母
:',
letter)
print(
"Good
bye!")
谢谢
21世纪教育网(www.21cnjy.com)
中小学教育资源网站
有大把高质量资料?一线教师?一线教研员?
欢迎加入21世纪教育网教师合作团队!!月薪过万不是梦!!
详情请看:
https://www.21cnjy.com/help/help_extract.php中小学教育资源及组卷应用平台
4.4
运用循环结构描述问题求解过程
一、选择题
1、关于
for循环和
while循环的说法哪个正确(
)
A、while循环先判断后执行,for循环先执行后判断。
B、while循环判断条件一般是程序结果,for循环的判断条件一般是非程序结果
C、两种循环任何时候都不可以替换
D、两种循环结构中都必须有循环体,循环体不能为空
2、执行以下程序得到的结果是(
)
i=-1?
while(i<0):
i=i+1?
print(i)?
A、-1
B、0
C、1
D、i
3、有以下程序段:
sum=1
for
i
in
range(1,5):
sum=sum
i
print(sum,i)
程序的运行结果为(
)。
A、24
5
B、120
5
C、24
4
D、120
4
4、下列循环结构用法错误的是(
)
A、for
i
in
range(20):
B、for
i
in
range(0,10):
C、for
i
in
range(10,0,2):
D、while
s<50:
5、若k为整型,下列while循环执行的次数为
(
)
k
=
1000
while
k
>
1:
print(k)
k
=
k
/2
A、9
B、10
C、11
D、100
6、执行下列程序以后i的值是(
)
for
i
in
range(-3,-21,-4):
print(i,end="
")
print(end="\n")
A、-3
B、-4
C、-19
D、-21
7、下面的代码,哪些会输出1,2,3,三个数字(
)
A、for
i
in
range(3):
Print(i)
0,1,2
B、aList
=
[1,2,3]
for
i
in
aList:
print(i+1)
2,3,4
C、i
=
1
while
i<3:
print(i)
1,2
i+=1
D、for
i
in
range(3):
Print(i+1)
1,2,3
8、python中表示跳出循环的函数是(
)
A、continue
B、break
C、ESC
D、close
9、以下程序要求输出偶数,则在空白处的语句为(
)
import?math?
def?func(list):?????
for?x?in?list:?
????????
if(_______):?
print(x)??
A、x%2==0??
?B、x%2??
??C、x?is?even???
?D、x/2
10、14.
下面的语句哪个会无限循环下去
()
A、for
a
in
range(10):
time.sleep(10)
B、while
1<10:
time.sleep(10)
C、while
True:
break
D、a
=
[3,-1,’,’]
for
I
in
a[:]:
if
not
a
:
break
二、编程题
1、使用for循环输出1
2
3
4
5
6
8
9
10。(注意:数字6和数字8之间,跳过了数字7。)
2、求1-100的所有数的和。
3、求1-2+3-4+5
...
99的所有数的和。
4、模拟银行用户密码登陆(三次机会重试)。(注意:默认账号为cgc,密码123。)
5、猜年龄游戏。要求:允许用户最多尝试3次,每尝试3次后,如果还没猜对,就问用户是否还想继续玩,如果回答Y或y,
就继续让其猜3次,以此往复,如果回答N或n,就退出程序,如果猜对了,就直接退出。
6、使用循环语句打印如下金字塔:
。
试题答案
一、选择题
1
2
3
4
5
6
7
8
9
10
B
B
C
C
B
C
D
B
A
B
解析:
1、for循环执行末尾循环体后将再次进行条件判断,若条件还成立,则继续重复上述循环,当条件不成立时则跳出当下for循环。while循环当满足条件时进入循环,进入循环后,当条件不满足时,执行完循环体内全部语句后再跳出(而不是立即跳出循环)。
2、i的初值是-1,while(i<0)当i小于0的时候执行i=i+1=0,所以选B。
3、range(1,5)所以i的取值从1到4,sum=sum
i表示i的累乘积,也就是1
2
3
4=24,所以结果sum=24,i=4,选C。
4、range(10,0,2):,步长的值要改为负值range(10,0,-2):,表示从10开始到0结束,但是不包括0,每次减少步长为2。
5、当k>1
的时候,程序会一直执行下去,每次将k的值减半,因为k为整型所以依次为1000,500,250,125,62,31,15,7,3,1,共计10次。
6、因为for
循环变量
in
range(start,
stop[,step]):,所以for
i
in
range(-3,-21,-4):表示从-3开始到-21结束(不包含-21),步长为-4,执行结果为-3
-7
-11
-15
-19,因此i的值最后为-19。
7、A执行结果是0,1,2;B执行结果是2,3,4,C执行结果是1,2,D执行结果是range(3)从1开始每次i+1,所以结果是1,2,3。
8、break
语句功能是:在语句块执行过程中终止循环,并且跳出整个循环。
9、x%2==0表示x除以2的余数是0,也就是该数为偶数。
10、循环条件while
1<10恒为真,所以此循环会无限循环。
二、编程题
解析:
1、
for
i
in
range(10)
:
if
i==6
:
print('
',end='
')
continue
print(i+1,end="
")
2、
s=0
for
i
in
range(101)
:
s+=i
print(s)
3、
s=0
print(-1
49+99)
s=0
for
i
in
range(100)
:
if
i
%
2
==0
:
s-=i
else:
s+=i
print(s)
4、
km=float(input("请输入千米数:"))
if
km<=0:
print("千米数输入错误,重新输入")
elif
km<=3:
print("您需要支付10元车费")
elif
km<=10:
cost=10+(km-3)
1.2
print("您需要支付{:.1f}元车费".format(cost))
else:
cost=18.4+(km-10)
1.5
print("您需要支付{:.1f}元车费".format(cost))
5、
import
random
rand
=
random.randint(1,18)
now
=
'y'
while
now
=='y'
or
now
=='Y'
:
for
i
in
range(3):
a
=
int(input('请输入要猜的年龄:'))
if
a==rand
:
print('猜对了')
rand
=
random.randint(1,
18)
break
elif
a:
print('猜小了')
elif
a>rand
:
print('猜大了')
now=input('是否继续玩y/n?')
6、
方法一:while循环实现
current_level=1
max_level=5
while
current_level<=max_level:
print('
'
(max_level-current_level),end='')
print('
'
(2
current_level-1))
current_level+=1
方法二:for循环实现
a
=
5
for
i
in
range(a):
print('
'
(a
-
1
-
i)
+
'
'
(i
+
1)
+
'
'
i)
PS:自己指定金字塔的层数代码如下。
a
=
int(input('请输入层数:'))
for
i
in
range(a):
print('
'
(a
-
1
-
i)
+
'
'
(i
+
1)
+
'
'
i)
21世纪教育网
www.21cnjy.com
精品试卷·第
2
页
(共
2
页)
HYPERLINK
"http://21世纪教育网(www.21cnjy.com)
"
21世纪教育网(www.21cnjy.com)