Python使用while循环来处理满足一定条件进行的循环,while循环一般不用来处理可迭代对象,while循环语句可以实现无限循环。
while循环常用来处理满足一定条件的循环,语法如下:
while condition:
statements
……
else:
statements
每循环一次都会对condition进行判断,condition返回值为True时进入while循环执行statements,condition返回值为False时,则不执行while下的statements,执行else下的statements,其中else可以省略。如果condition返回值一直为True,while循环成为无限循环,也叫"死循环"。while循环执行流程图如图:
示例如下:
例:统计1~100之间奇数的个数
i = 1 # 开始值
count = 0 # 统计频数
while i <= 100: # 结束条件
if i % 2 != 0: # 如果满足不能被2整除的条件
count += 1 # count加1
i += 1 # 增减量,如果没有增减量则i=1一直成立,成为死循环
print('1~100之间有{}个奇数'.format(count))
1~100之间有50个奇数
注意:while循环的三要素:开始值,结束条件,增减量。如果缺少增减量,开始值不会发生变化,结束条件会永远返回True,此时while会成为无限循环。
Python允许在while循环内部使用while循环。例如打印九九乘法表,示例如下:
a = 1 # 外层循环的开始值
while a < 10: # 外层循环的结束条件
b = 1 # 内层循环的开始值
while b <= a: # 内层循环的结束条件
print('%d*%d=%2d' % (a, b, a * b), end=' ') # 打印,打印完后不换行
b += 1 # 内层循环的增减量
print() # 内层结束后进行换行
a += 1 # 外层循环的增减量
运行后输出的结果如下:
1*1= 1
2*1= 2 2*2= 4
3*1= 3 3*2= 6 3*3= 9
4*1= 4 4*2= 8 4*3=12 4*4=16
5*1= 5 5*2=10 5*3=15 5*4=20 5*5=25
6*1= 6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1= 7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1= 8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1= 9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
for循环和while循环都可以实现循环功能,但是for循环常用于循环可迭代对象,也就是结尾已知的情况。而while循环常用于结尾未知的情况。这两种循环都可以嵌套使用,但是需要注意嵌套循环的效率不是很高,嵌套循环实际上进行的是笛卡尔积运算,如果循环的次数比较多时等待时间会比较长。
某些情况下需要使用无限循环也就是死循环,使用while循环可以实现这一需求。只要将while后的条件永远固定为一个真值即可,示例如下:
import time
while True:
print('这是一个无限循环')
time.sleep(1)
输出结果:
这是一个无限循环
这是一个无限循环
这是一个无限循环
这是一个无限循环
这是一个无限循环
....
在编辑器中无限循环无法自动停止,只用通过手动停止,在PyCharm编辑器中可以使用快捷键Ctrl+C停止循环。
为了能够更好的控制循环,在for循环和while循环中可以使用break和continue语句对循环进行控制。
break语句用于跳出当前循环,即提前结束循环,else也会被跳过。示例如下:
# 统计1~100之间奇数的个数
i = 1 # 开始值
count = 0
while True: # 结束条件为True
if i % 2 != 0:
count += 1
i += 1 # 增减量
if i > 100: # 满足if条件执行break语句
break # 跳出循环
else:
print('while循环结束!') # else也会被跳过,该句不执行
print('while循环由break语句跳出,else未执行!')
# while循环由break语句跳出,else未执行!
print(count)
运行结果:
while循环由break语句跳出,else未执行!
50
注意:break语句也可以使用在嵌套循环中,当使用在嵌套循环的内层循环中时仅从内层循环中跳出,不会影响外层循环继续运行。
continue语句用于跳过本次循环,继续进行下一次循环,示例如下:
# 计算1~100之间能被3整除的数的和
total = 0
for i in range(1, 101):
if i % 3 != 0: # 条件:不能被3整除
continue # 如果满足以上条件就跳出本次循环,进行下一次循环
total += i
print(total)
输出结果:
1683