pyhton基础【5】循环
在Python中,循环是一种用于重复执行一段代码直到满足某个条件为止的控制结构。Python主要提供了两种类型的循环:for循环和while循环。
一. while
while 条件:条件满足时,做的事情1条件满足时,做的事情2条件满足时,做的事情3...(省略)...
i = 0
while i < 10000:print("hello word")i += 1
i = 0
while i < 5:print("当前是第%d次执行循环" % (i + 1))print("i=%d" % i)i += 1输出:
当前是第1次执行循环
i=0
当前是第2次执行循环
i=1
当前是第3次执行循环
i=2
当前是第4次执行循环
i=3
当前是第5次执行循环
i=4
说明
- 先判断i < 5条件是否为真,此时i为0所以,i < 5结果为真
- 接下来执行2个print语句,然后执行i+=1,此时i变成了1
- 再执行i < 5此时相当于1 < 5结果为True,所以继续执行2次print,接下来i变为2。剩下的就是重复的过程了,我们不再赘述
- 当执行i += 1后i的值为5的时候,接下来执行while i < 5此时i < 5结果为假,所以while条件不满足,此时while循环结束
总结
- while和if的用法基本类似,区别在于:if条件成立,则执行一次;while条件成立,则重复执行,直到条件不成立为止。
- 一般情况下,需要多次重复执行的代码,都可以用循环的方式来完成
- 循环不是必须要使用的,但是为了提高代码的重复使用率,所以有经验的开发者都会采用循环
注意
Python中没有do-while循环,只有while和for
代码练习一要求:计算1~100的累积和(包含1和100)
sum = 0
i = 1
while i <= 100:sum += i;i += 1
print("1~100的累积和为:%d" % sum)二要求:计算1~100之间偶数的累积和(包含1和100)
sum = 0
i = 1
while i <= 100:if i % 2 == 0:sum += i;i += 1
print("1~100之间偶数和为:%d" % sum)三要求:实现计算1~100之间能被3整除且能够7整除的所有数之和
sum = 0
i = 1
while i <= 100:if i % 3 == 0 and i % 7 == 0 :sum += i;i += 1
print("1~100之间能被3整除且能够7整除的所有数之和:%d" % sum)四要求:使用while循环编写代码试如下效果
1--->1
2--->4
3--->9
4--->16
5--->25i = 1
while i <= 5:print("%d--->%d" % (i,i**2))i += 1
二. 嵌套循环 - while
"""打印行和列都为5的*号正方形"""size = 5 # 正方形的大小(行数和列数)
line = "* " * size # 创建一个星号行,星号之间有空格
count = 0 # 初始化计数器while count < size:print(line)count += 1
将上述单个循环修改为循环嵌套的形式:
size = 5 # 正方形的大小(行数和列数)# 初始化行计数器
row = 1
while row <= size:# 对于每一行,初始化列计数器col = 1while col <= size:# 打印一个星号,但不换行print("*", end=" ")# 列计数器递增col += 1# 当内层循环完成一行的星号打印后,换到下一行print()# 行计数器递增row += 1
while嵌套代码示例
while 条件1:条件1满足时做的事情1条件1满足时做的事情2条件1满足时做的事情3...while 条件2:条件2满足时做的事情1条件2满足时做的事情2条件2满足时做的事情3...
注意
- while循环嵌套运行时的特点:每次外层循环执行1次,内层循环执行全部步骤
- while循环嵌套可以无限次的嵌套,但一般情况下不超过3层while循环嵌套
- 当外层while条件不满足时表示整个while循环嵌套结束
要求:打印如下图形 - 九九乘法表
1*1=11*2=2 2*2=41*3=3 2*3=6 3*3=91*4=4 2*4=8 3*4=12 4*4=161*5=5 2*5=10 3*5=15 4*5=20 5*5=251*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=361*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=491*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=641*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81i = 1
while i <= 9:j = 1while j <= i:print("%d*%d=%d " % (j, i, j*i), end = '')j += 1print("\n")i += 1
三. for
for 临时变量 in 列表或者字符串等可迭代对象:循环满足条件时执行的代码
range(x)
当range中只有一个数字时,for循环取到的数据是0....x-1
如果想要循环输出0、1、2、3、4,使用for循环来实现的代码如下
for i in range(5):print(i)输出
0
1
2
3
4
range(x, y)
当range中有两个数字时,此时for循环取到的数据是x....y-1
for i in range(3, 5):print(i)输出:
3
4
range(x, y, z)
当range中有三个数字时,此时for循环能取到的数据是从x...y-1但是每次间隔的数据是z
for i in range(1, 5, 1):print(i)
运行结果:
1
2
3
4 for i in range(1, 5, 2):print(i)
运行结果:
1
3for i in range(5, 1, -1):print(i)
运行结果:
5
4
3
2
sum_ret = 0 # 用来存储总和
for i in range(1, 101):sum_ret += iprint("1~100的和为:%d" % sum_ret)运行结果如下:
1~100的和为:5050
四. break与continue
- break,用来结束整个循环
- continue,用来结束本次循环
while中使用break
未使用break的效果
i = 0
while i<5:print('----')print(i)i = i + 1
运行结果:
----
0
----
1
----
2
----
3
----
4使用break的效果
i = 0
while i<5:print('----')i = i+1breakprint(i)
运行结果:
----
说明:
当程序执行到第六行时,遇到了break,那么此时break就会将它所在的while循环结束,所以只输出了一次----
for循环中使用break
未使用break的效果
web_site = 'www'
for x in web_site:print(x)
运行结果:
w
w
w
使用break的效果
web_site = 'www'
for x in web_site:print(x)break
运行结果:
w
说明:
当程序执行到第五行break时,break会让整个for循环结束,所以只输出了第一个字母w。
while中使用continue
使用continue的效果
i = 0
while i < 3:i = i + 1print('----')continueprint(i)
运行结果:
----
----
----
for中使用continue
web_site = 'www'
for x in web_site:print(x)continue
运行结果:
w
w
w
说明:
当程序遇到continue时,会导致本次for循环体中剩下的代码不会执行,而是进入下一次的循环
常见的用法
通过上面的案例,我们知道break、continue是可以直接放到循环中使用的
但是,在循环中直接运行break、continue有意义吗?其实你也会感觉到有些不舒服,我们一般的用法是在判断语句中使用break、continue
i = 3
while i > 0:password = input("请输入密码:(还剩%d次机会)" % i)if password == "123456":print("密码输入正确")breaki -= 1
说明:
- 如果密码输入正确,那么就不需要再次让用户输入密码,直接结束这个循环即可
- 一般情况下break、continue会在判断中使用,这样就能够实现该怎样循环的就怎样循环,不该循环的时候能立刻结束
在循环嵌套中使用
i = 0
while i < 3:print("i=%d" % i)i += 1j = 0while j < 3:print("---")j += 1break
最终输出结果为:
i=0
---
i=1
---
i=2
---
到上述输出结果,我们发现:break作用在当前的循环体,并不会影响到外层循环!
continue在循环嵌套中的作用于break几乎一样,只不过它是结束本次循环,而break是结束整个循环
切记口诀:break、continue在哪个循环中就对哪个循环起作用
break与continue使用总结
- break、continue只能用在循环中,除此以外不能单独使用
- break、continue在嵌套循环中,只对最近的一层循环起作用
- break能够立刻结束所在的循环
- continue的用来结束本次循环,紧接着执行下一次的循环
- 无论break放到while循环体中的任何位置,只要被执行一次,那么整个循环立刻结束
五. 循环语句 - else
想要实现在 "密码不正确" 时提示相应的信息,普通的做法是:
login_flag = False # 定义一个变量,用来存储是否登录成功,True表示成功 False表示不成功
i = 3
while i > 0:password = input("请输入密码:(还剩%d次机会)" % i)if password == "123456":login_flag = True # 如果登录成功,那么这里就改为Truebreaki -= 1# 当上述的while循环结束后,判断login_flag的值,来输出对应的信息
if login_flag == True: # 简单的写法是if login_flag:print("密码输入正确")
else:print("密码输入不正确,今日3次机会已用完,请明天再试...")
while...else...的使用方式
格式:
while 条件:# 条件满足时执行的代码...
else:# 如果上述的while循环没有调用break,就执行的代码...
有break时:
i = 1
while i <= 3:print("这是一段测试信息...")if i == 1:print("调用了break")breaki += 1
else:print("我是else中的代码")
运行结果:
这是一段测试信息...
调用了break没有break时
i = 1
while i <= 3:print("这是一段测试信息...")i += 1
else:print("我是else中的代码")
运行结果:
这是一段测试信息...
这是一段测试信息...
这是一段测试信息...
我是else中的代码
for...else...的使用方式
格式:
for 变量 in 可迭代对对象:# 正常执行的代码
else:# for未使用break时执行的代码
未使用break
for i in range(5):print("i=%d" % i)
else:print("我是else中的代码...")
运行结果:
i=0
i=1
i=2
i=3
i=4
我是else中的代码....使用break
for i in range(5):print("i=%d" % i)if i == 1:print("我是break哦...")break
else:print("我是else中的代码...")
运行结果:
i=0
i=1
我是break哦...
代码案例
for i in range(3, 0, -1):password = input("请输入密码:(还剩%d次机会)" % i)if password == "123456":print("密码输入正确")break
else:print("密码输入3次全部错误,请明日再试")
验证continue
我们知道continue的作用是结束本次循环,那么既然break在for...else...和while...else...中都起作用,那么continue呢?
接下来我们就验证一下。
验证一:
i = 0
while i < 3:i += 1print("来了老弟...")continueprint("一起学Python啊,别忘了来 www.tulingxueyuan.com 网站哈")
else:print("我是else中的代码...")
运行结果:
来了老弟...
来了老弟...
来了老弟...
我是else中的代码...
验证二:
for i in range(3):print("来了老弟...")continueprint("一起学Python啊,别忘了来 www.tulingxueyuan.com 网站哈")
else:print("我是else中的代码...")
运行结果:
来了老弟...
来了老弟...
来了老弟...
我是else中的代码...
结论:
- 在while...else...与for...else...中,break会让else中的代码不执行,而continue没有这个功能