目录
循环:事物周而复始的运动或变化。
| |
有很多循环题材的电影,例如上面看到的《明日边缘》《源代码》以及《恐怖邮轮》等,这种题材的电影主角都一开始身陷循环中,然后想方设法找出真想,最终逃出循环。
为了让我们的程序重复执行某些指令,我们就需要用到循环语句。
在Python中的循环语句主要有while循环和for循环。
一、while循环
while循环的基本格式如下:
while 条件表达式:
条件满足时,需要执行的语句1
条件满足时,需要执行的语句2
……
条件满足时,需要执行的语句N
敲黑板划重点:while循环的特点是先判断,当条件表达式为真时,再执行循环体内的语句,其执行流程如下图所示。
实例1:输出1到10之间的所有偶数。
number = 1
while number <= 10:
if number % 2 == 0:
print(number)
number += 1
number的初始值为1,while循环中的条件表达式判断number是否还在10以内,如果为真,则执行循环体内的语句。在循环体内,因为我们是要输出所有的偶数,所以需要if语句对每个数进行判断,判断偶数较简单的方法是使该数值与2取余数,如果余数为0(即判定该数为偶数),则输出该数,number+=1的作用是实现从1到10的累加。
如果将number+=1删除会发生什么?
在循环体内number的值将永远为1,且因为number永远为1,number<=10结果将永远为真,从而导致本循环成为死循环(无限循环,就像最开始的电影情节)。
敲黑板划重点*2:每一个循环语句都需要预先设定好退出循环的机制,如上面的number<=10和number+=1形成对循环的控制。在编写循环语句的时候,务必要检查此点。
敲黑板划重点*3:在循环语句中,类似if 语句,同样需要注意冒号和缩进对语句块的控制。
实例2:编写一段程序打印如下图形。
*
**
***
****
*****
******
*******
********
*********
该图形第1行1个*,从第2行开始每行增加一个*,一直到第9行由9个*组成。
代码如下:
n = 1
while n <= 9:
print("*" * n)
n += 1
接下来,我们仔细研究这一段代码的执行过程,然后回答三个问题:
问题1:循环体执行了几次?
问题2:结束循环时,n的值是多少?
问题3:n<=9判断了多少次?
n的初始值为1,碰到while,第一次判断n<=9,此时n=1,n<=9为真,进入第一次循环,执行循环体内的语句,输出*,通过n+=1,n的值变为2;然后再次判断n<=9,此时n=2,n<=9为真,进入第二次循环,执行循环体内的语句,输出**;接下来以此类推,当到了第9此循环时,n的值为9,输出*********(9个*),通过n+=1,n的值变为10,第10次判断n<=9,n=10,n<=9为假,结束循环。
你现在可以回答之前提出的三个问题了吗?你的答案是什么?
接下来还有两个值得思考的地方:
问题4:为什么初始要定义n的值?
问题5:如果初始n=0,代码应进行哪些调整?
二、for循环
在python中,for循环可以遍历任何序列,比如列表、字符串。
![](https://img-blog.csdnimg.cn/20201122111655241.jpeg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwNDA3NzI5,size_16,color_FFFFFF,t_70)
for循环的基本格式如下:
for 变量 in 序列:
循环语句
for循环的执行流程:
实例3:输出字符串中的每一个字母(for in string)
name = "Tom"
for word in name:
print(word)
输出结果:
T
o
m
运行过程:序列为字符串,逐一从name中取出每一个元素存入到word中,遍历完所有元素循环结束。word在退出循环时的值为“m”。
实例4:输出一年四季(for in list)
seasons = ['Spring','Summer','Autumn','Winter']
for season in seasons:
print(season)
输出结果:
Spring
Summer
Autumn
Winter
运行过程:序列为列表,逐一从seasons中取出每一个元素存入到season中,遍历完所有元素循环结束。season在退出循环时的值为“Winter”
实例五:输出0到5之间的所有整数。
for i in range(6):
print(i)
输出结果:
0
1
2
3
4
5
range函数用来返回一个数字序列,例如range(6),将得到[0,1,2,3,4,5],range函数的完整格式为[<start缺省时默认为0>,<end>,<step缺省时默认为1>]。例如range(1,10,2)将得到[1,3,5,7,9],即返回从1开始到10结束步长为2的数字序列。但是要记住end应理解为开区间,数字序列的结束不包含end的值。
在本实例中,for i in range(6)等效于for i in [0,1,2,3,4,5],每次循环返回其中的一个值。(注意range(6)每次生成一个值,如果需要得到所有的值,可使用list(range(6))。)
for index,number in enumerate(range(6)):
print(index,number)
输出结果:
0 0
1 1
2 2
3 3
4 4
5 5
enumerate函数用来返回下标及元素。index获得下标,number获得元素。
words = "hello world"
for index,word in enumerate(words):
print(index,word)
输出结果:
0 h
1 e
2 l
3 l
4 o
5
6 w
7 o
8 r
9 l
10 d
三、while_else和for_else
在python中的while循环和for循环还有一种特殊用法,即while_else和for_else。else可表示为循环条件不满足或循环结束时执行的语句。
实例六:计算1到10000所有偶数的和。
number = 1
total = 0
while number <= 10000:
if number % 2 == 0:
total += number
number += 1
else:
print("1到10000所有偶数的和为%d" % total)
for i in range(1, 5):
print(i)
else:
print('The for loop is over')
输出结果:
1
2
3
4
The for loop is over
四、break、continue、exit()、pass
break语句
在循环语句中,如果遇到了break语句,将立即退出当前循环。(当前循环指的是break所属层级的循环,因为有可能出现多层循环嵌套的情况)
start = 5
while start >= 0:
start -= 1
if start == 3:
break
print(start)
else:
print("Time is over")
print("I am a survivor.")
结果为:
4
I am a survivor.
将break换成continue,continue的作用是结束本次循环进入下一次循环。
start = 5
while start > 0:
start = start - 1
if start == 3:
continue
print(start)
else:
print("Time is over.")
print("I am survive.")
结果为:
4
2
1
0
Time is over.
I am survive.
再将continue换成exit(),exit()的作用是终止整个程序,多用来处理异常。
start = 5
while start > 0:
start = start - 1
if start == 3:
exit()
print(start)
else:
print("Time is over")
print("i am survive")
结果为:
4
再将exit()换成pass,pass的作用不做任何事,只做占位。
start = 5
while start > 0:
start = start - 1
if start == 3:
pass
print(start)
else:
print("Time is over")
print("I am a survivor.")
结果为:
4
3
2
1
0
Time is over
I am a survivor.
五、练习
1.有一分数序列,2/1、3/2、5/3、8/5、13/8、21/13……,求出这个数列的前20项之和。
2.求1+2!+3!+4!+……+20!的值。
3.将“hello world”用相反顺序打印出来。
4.判断字符串中是否有连续三个英文单词。如:"Hello World hello"的结果为True、"He is 123 man"的结果为False、"1 2 3 4"结果为False、"bla bla bla bla"的结果为True。(提醒:可能需要用到split()、isalpha()、isdigit()等函数)
第9课练习参考答案:
1.一年四季。根据输入的月份输出对应的季节。(输入:3月,输出:春季,输入8月,输出:夏季)(春季:3、4、5月,夏季:6、7、8月,秋季:9、10、11,冬季:12、1、2)
month = input("请输入月份")
if month in ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']:
if month in ['3月','4月','5月']:
print("春季")
elif month in ['6月','7月','8月']:
print('夏季')
elif month in ['9月','10月','11月']:
print('秋季')
else:
print('冬季')
else:
print("请输入正确的月份,格式如11月")
2.三只小熊。三只小熊的年龄分别为6、3、4岁,请编程实现对他们年龄从小到大排序。(bear1_old = 6,bear2_old = 3,bear3_old = 4,输出3、4、6)
# 解决方案一:
bear1_old = 6
bear2_old = 7
bear3_old = 4
if bear1_old > bear2_old:
if bear2_old < bear3_old:
if bear3_old < bear1_old:
print(bear2_old,bear3_old,bear1_old)
else:
print(bear2_old,bear1_old,bear3_old)
else:
print(bear3_old,bear2_old,bear1_old)
else:
if bear1_old < bear3_old:
if bear2_old < bear3_old:
print(bear1_old,bear2_old,bear3_old)
else:
print(bear1_old,bear3_old,bear2_old)
else:
print(bear3_old,bear1_old,bear2_old)
# 解决方案二:
bears_old = [bear1_old,bear2_old,bear3_old]
bears_old.sort()
print(bears_old)
3.算数题。已知函数 ,根据输入的x值计算y的值,设计一个程序实现以上算法。
x = float(input("please input x value"))
if x <= 2.5:
y = x**2 + 1
else:
y = x**2 - 1
print(y)
4.儿童票。游乐园儿童购票的规定如下:若身高不超过1.1m,则无需购票;若身高超过1.1m但不超过1.4m,可买半票;如果超过1.4m,应买全票,全票价格为298元。设计一个程序实现以上算法。小明和妹妹小青的身高分别为1.3m和0.9m,请问他们去游乐园玩需要付多少钱的门票?
def count_price(height):
if height <= 1.1:
discount_price = 0
elif height > 1.1 and height <= 1.4:
discount_price = 298 * 0.5
else:
discount_price = 298
return discount_price
summary = 0
for height in [1.3,0.9]:
price = count_price(height)
summary += price
print("应付金额为:",summary)
5.体质指数。体质指数 (Body Mass Index,简称BMI),是国际最常用来量度体重与身高比例的工具。它利用身高和体重之间的比例去衡量一个人是否过瘦或过肥。体制指数的计算公示。其中亚裔成年人的体质指数评判标准如下:
BMI<=18.5 过轻
18.5<BMI<=23.9 正常
24<=BMI<=27.9 超重
BMI>=28 肥胖
设计一个程序实现以上算法。
height = float(input('请输入身高'))
weight = float(input('请输入体重'))
bmi = weight / height ** 2
if bmi <= 18.5:
print(bmi,"体重过轻")
elif bmi > 18.5 and bmi <= 23.9:
print(bmi,"体重正常")
elif bmi >= 24 and bmi <= 27.9:
print(bmi,"超重")
else:
print(bmi,"肥胖")