4.4运用循环结构描述问题求解过程之for
和while循环
1.列表range(7,10)中元素的个数是(
C
)
A.7
B.3
C.4
D.10
2.在Python中表示“x属于区间[a,b)”的正确表达式是(
A
)。
A、
a<=x
And
xB、
a<=x
Or
xC、
?a≦x
And
xD、
a<=x3.在Python语言中,如果a是一个集合,以下哪个语句可以添加一个元素?
A.
a.append(1)
B.
a.extend(1)
C.
a[1]=3
D.
a.add(1)
4.阅读程序,写出运行结果:
s=0
for
i
in
range(1,10,4):
print
("#")
s=s+i
print
(s)
上述程序运行后,输出“#”的个数是__3____;输出s的值是___15___。
5.程序阅读题:执行下列程序后的结果是(C
)
s=0
for
i
in
range(1,5):
i=i+2
s=s+i
print(s)
A.3
B.
8
C.
18
D.10
6.阅读程序,写出运行结果
a=98
b=63
r=a
%
b
while
r
!=0:
a=b
b=r
r=a
%
b
print
(b
)
程序运行后,输出结果为:____7_______。
6.程序实现:
?猴子吃桃问题:
一天,小猴子从树上摘下若干个桃子,当即吃了一半,仍觉得不过瘾,又吃了一个。第二天小猴子接着吃剩下的一半,还觉得不过瘾,又吃了一个。第三天也是第二天剩下的一半,就再多吃一个。到第四天,只剩下一个桃子。试设计一算法并编写程序,求小猴子第一天摘下多少个桃子。
d=1
for
i
in(2,3,4):
d=2
(d+1)
print("小猴子第一天摘下了%d个桃子"%d)
7.编写一个程序,将任一个正整数N的立方分解为N个连续的奇数之和。例如:输入4,输出13,15,17,19.即4^3=13+15+17+19.
N=int(input())
i=N
N-N+1
print(N,"^3=",i,end="+")
for
j
in
range(1,N):
i=i+2
if
j==N-1:
print(i)
else:
print(i,end="+")(共13张PPT)
4.4运用循环结构描述问题求解过程
导入问题:
百钱百鸡问题
今有鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。凡百钱买鸡百只。问鸡翁母雏各几何?
【故事】
相传在南北朝时期(公元
386
年——公元
589
年),我国北方出了一个“神童”,他反映敏捷,计算能力超群,许多连大人一时也难以解答的问题,他一下子就给算出来了。远远近近的人都喜欢找他计算数学问题。
“神童”的名气越来越大,传到当时宰相的耳中。有一天,宰相为了弄清“神童”是真是假,特地把“神童”的父亲叫了去,给了他
100
文钱,让第二天带
100
只鸡来。并规定
100
只鸡中公鸡、母鸡和小鸡都要有,而且不准多,也不准少,一定要刚好百钱百鸡。
当时,买
1
只公鸡
5
文钱,买
1
只母鸡
3
文钱,买
3
只小鸡才
1
文钱。怎样才能凑成百钱百鸡呢?“神童”想了一会,告诉父亲说,只要送
4
只公鸡、
18
只母鸡和
78
只小鸡就行了。
第二天,宰相见到送来的鸡正好满足百钱百鸡,大为惊奇。他想了一下,又给了
100
文钱,让明天再送
100
只鸡来,还规定不准只有
4
只公鸡。
这个问题也没有难住“神童”。他想了一会,叫父亲送
8
只公鸡、
11
只母鸡和
81
只小鸡去。还告诉父亲说,遇到类似问题,只要怎样怎样就行了。第二天,宰相见到了送来的
100
只鸡,赞叹不已。他又给了
100
文钱,要求下次再送
100
只鸡来。
岂料才一会儿,“神童”的父亲就送来了
100
只鸡。宰相一数:公鸡
12
只、母鸡
4
只、小鸡
84
只,正好又满足百钱百鸡……。
这个“神童”就是张丘建。他继续勤奋学习,终于成为一个著名的数学家。他的名著《张丘建算经》里,最后一个题目就是这个有趣的“百鸡问题”。
分析问题
变量(几个?)
变化范围
验证条件(几个?)
3个,设公鸡为x,母鸡为y,小鸡为z
x:1----100?
y:1----100?
z:1----100?
x+y+z=100
5x+3y+z/3=100
设计算法
算法描述:
①令a=0
②令b=0
③令c=3
④如果a+b+c=100且5a+3b+c/3=100,那么输出a,b,c,若不是则转⑤
⑤如果c<100,则c+1
返④
⑥如果b<33,则b+1返③
⑦如果a<20
,则a+1返②
⑧结束
问1:我们可以用什么程序结构来解决这个问题呢?
for循环的应用
for循环语句的一般格式
:
for
循环变量
in
列表:
语句或语句组
for循环依次把列表中的每个元素逐个迭代出来。冒号“:”代表下一行是循环的第一行,但是循环体在书写时需要缩进。在for循环中,从for语句末尾的冒号开始到其下面没有缩进代码之间都是其包含的需要重复执行的部分。因此,for循环所包含的语句是以缩进为标志的。
自主探究:
课本86页表4----9
缩进循环示例(有缩进与无缩进),感受for循环内外缩进体的不同
问题:编程求
1-10的和?(参考课本86:列表的几种表达方式)
方法一:列表直接罗列
sum=0
for
i
in
[1,2,3,4,5,6,7,8,9,10]:
sum=sum+i
print(sum)
方法二:列表先定义后使用
a=[1,2,3,4,5,6,7,8,9,10]
sum=0
for
i
in
a:
sum=sum+i
print(sum)
小试牛刀
小试牛刀
方法三:使用range()函数
s=0
for
i
in
range(1,11):
sum=sum+i
print(sum)
方法四:使用range()函数,数值列表降序且定义步长
s=0
for
i
in
range(10,0,-1):
sum=sum+i
print(sum)
练习:
有以下程序段:
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
指出下面程序中的错误并解释:
(1)求1+2+3+4+5的和。
s
=1
for
i
in
[
1,2,3,4,
5]
s
=
s
+
i
print
s
(2)求5
4
3
2
1的值。
s
=0
for
i
in
range(1,5):
s
=
s
i
print
(s)
(3)求7
5
3
1的值
s
=
1
for
i
in
range(7,0,-2)
s
=
s
i
print
("s=",s
)
暑假里假日小队的同学帮助计算居民楼内每户的电费,楼内共有10户居民,每度电0.7元,编一个程序,输入每一户的用电量,然后计算应缴纳的电费输出,再输入下一户的用电量,计算应缴纳的电费……一直重复下去直到全部用户计算完毕。
问题:编程计算出以下每户居民的电费?
学以致用
1户
3986度
2户
5477度
3户
6561度
4户
8796度
5户
3668度
6户
4712度
7户
8631度
8户
9164度
9户
8157度
10户
1661度
for
i
in
range(1,11):
A=eval(input())
S=0.7
A
print
('电费
S
='
,S)
小结:
1.for循环的一般格式
2.for循环的缩进
3.for循环的列表表达方式
谢谢(共20张PPT)
4.4运用循环结构描述问题求解过程之while循环
for
循环变量
in
列表:
语句或语句组
说明:(1)重复循环次数由列表决定。
(2)语句或语句组(含两个以上语句)
必需缩进。
原理:把列表中第一个元素赋值给循环变量,循环体(循环语句或语句组)执行一次,执行完成后,把列表下一个元素赋值给循环变量,再次执行循环体…
…直到所有列表元素遍历结束为止。
循环次数
循环体
复习:
一、问题导入:
陈婷今年17岁了,她的生日正好是3月12日植树节。今年植树节老师带同学们到公园里去植树。陈婷很高兴,一个人就栽了3棵树,过了一个很有意义的生日。她想,如果从明年开始每年过生日的时候都去植树,并且每一年都要比前一年多栽一棵树,这样下去,到多少岁时才能累计种到或超过100棵树呢?
用for循环可以解决吗?
分析问题:
设年龄为age,种树的总数为tree,则tree可以用如下的式子表示:
tree=3+4+5+6+......
(相应的age=17,18,19...)
于是这个问题就可以转化为:当tree>=100时,求age的值。
设计算法:
①令age=17;
②令tree=3;
③age=age+1;
④tree=tree+age-14;
⑤如果tree<100,则返回第③步;
⑥输出age的值;
⑦结束
编写程序:
用for循环无处下手,因为for是知道循环次数的循环。这时我们可以选择while循环,while循环不用知道循环次数。
while循环:当型循环,只要条件满足,就不断循环;否则,退出循环。
格式:
while(表达式):
语句或语句组(循环体)
①表达式一般是一个关系表达式或一个逻辑表达式,表达式的值应该是一个逻辑值(True)或假(False)。判断条件可以是任何表达式,任何非零、或非空(null)的值均为true。
②当表达式的值为真时,执行循环体语句;当表达式的值为假时,退出循环,执行循环体外的下一条语句(即while后面没有缩进的第一条语句)
③每次循环都是执行完循环体语句后回到表达式处重新开始判断,重新计算机表达式的值。一旦表达式的值为假就退出循环,为真时就断续执行循环体语句。
循环体中必须有改变条件表达式值的语句,否则将成为死循环。
⑤while循环可以用流程图来演示执行过程
循环语句
表达式?
N
Y
下条语句
上条语句
age=17
tree=3
while
tree<100:
age=age+1
tree=tree+age-14
print("当陈婷{}岁时种到{}棵树".format(age,tree))
①令age=17;
②令tree=3;
③age=age+1;
④tree=tree+age-14;
⑤如果tree<100,则返回第③步;
⑥输出age的值;
⑦结束
练习
1.若
k为整数,下述while循环执行的次数为(
)
k=100
while
k>1:
print(k)
k=k//2
A.
9
B.
12
C.
25
D.
6
练习
编程题:一张白纸的厚度大约为0.05毫米,对折1次的厚度为多少?对折多少次白纸的厚度超过1米?
算法:
设厚度为s,折叠次数为i
①s=0.05,
i=0
②i=i+1
③s=s
2,如果s<=100,那么转到④,否则转到⑤
④i=i+1
⑤输出i
⑥结束
s=0.05
i=0
while
s<=100:
i=i+1
s=2
s
print(i,s)
思考题:
能用while循环求1-----100的和吗?
先看for循环:
for
i
in
range(1,101):
s=s+i
print(s)
i<=100?
s=s+i
i=i+1
S=0
i=1
Y
N
print
s
s=0
i=1
while
i<=100:
s=s+i
i=i+1
print(s)
i<=100
s=s+i
i=i+1
print
s
i=1
s=0
N
Y
编程:
1.求1-----100的和
仔细观察,你发现什么秘密了吗?
2已知S=1+2+…..+N,找出一个最大的整数N,使得S<30000。编写程序解决这个问题。
①令S=0
②令N=1
③S=S+N
④N+=1
⑤如果S<3000,那么转到③,否则转到⑥
⑥输出S,N
⑦结束
S=0
N=1
while
S<3000:
S=S+N
N+=1
print(“当N={}时,S的值为{}”.format(N,S))
思考:我们得到的这个N的值是正确的吗?
2已知S=1+2+…..+N,找出一个最大的整数N,使得S<30000。编写程序解决这个问题。
i=0
while
i<7:
if
i==3:
i+=1
break
print(i)
i+=1
运行结果是:
A.
0
1
2
B.
0
1
2
3
C.
0
1
2
3
4
5
6
D.
0
1
2
4
5
6
i=0
while
i<7:
if
i==3:
i+=1
continue
print(i)
i+=1
运行结果是:
A.
0
1
2
B.
0
1
2
3
C.
0
1
2
3
4
5
6
D.
0
1
2
4
5
6
谢
谢