当需要重复做一件事或者多件事时,且不知道要重复多少次,这时候就需要使用到循环
python中循环有两种,while循环和for循环,下面会详细介绍这种循环的用法、以及使用场景
while 语句
根据一定条件,重复的执行一条语句或多条语句。while常使用于不确定循环次数或者定时执行的情况
# 常见表达式
# wxgzh: PyGo学习笔记
while 真值表达式:
执行语块1
else:
执行语块2
说明:
1、先执行真值表达式, 测试布尔值是否为True
2、如果真值表达式的值为True,则执行语块1,然后再返回到第1步,重复进行测试
3、 如果真值表达式的值为False,则执行else子句中的语句块2,然后结束此while语句,如果没有else子句,则直接结束此while语句的执行
4、else 子句部分可以省略
示例一
使用循环处理用户输入的名字,直到用户输入 "quit"退出输入功能,并且打印之前输入的所有名字
# 用户输入多少个名字未知,也不知道用户什么时候结束,这个时候就可以用while循环解决这个问题
# wxgzh: PyGo学习笔记
# 方式一, 使用while ... else ... 的方式
input_name = input("请输入名字:")
all_name_record = ""
while input_name != "quit":
all_name_record += input_name + " "
input_name = input("请输入名字:")
else:
print(all_name_record)
# 方式二,使用whil配合break 的方式
all_name_record = ""
while True:
input_name = input("请输入名字:")
if input_name == "quit":
break
all_name_record += input_name + " "
print(all_name_record)
上面这两个都简单粗暴的示例了while 的使用,但使用while循环需要格外注意条件控制,避免死循环导致cpu爆满导致死机
1、用真值表达式退出循环 ,例如每执行一次都更新真值表达式的判断条件,如下面例子
# wxgzh: PyGo学习笔记
i = 0
while i < 10:
print(i)
i += 1
这样子当打印执行了十次后, i < 10 这个条件就会不符合,从而退出了循环
2、达到特定条件后退出循环
# wxgzh: PyGo学习笔记
i = 0
while True:
if i >= 10:
break
print(i)
i += 1
日常使用都需要判断循环是否会进入死循环,如果是业务需求,则需要判断死循环是否会导致进程崩溃、死机。
如果循环内部是 cpu 密集型,就会导致代码一直在循行,cpu 爆满、进程崩溃的现象,比如下面的例子
# wxgzh: PyGo学习笔记
i = 0
while True:
if i >= 10:
break
print(i)
# 这个代码片段忘记更新i变量,使得i一直等于0, i >= 10的条件永远达不到,就会出现一直打印0无法退出,导致代码cpu爆满
但是也不是所有的死循环都会导致进程崩溃,如示例一的方式二,如果用户一直不输入"quit",其实也是会进入死循环的,但是input是交互型函数,代码执行到这里会等待用户输入内容,如果用户不输入,代码就会一直在这里等着,不会接着往下走,就不会出现cpu爆满导致进程崩溃的现象
3、死循环的else子句永远不会执行
练习
打印1~20的整数,每行打印5个,打印四行
如:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
…
(提示: if语句可以嵌入while语句中使用)
答案
# wxgzh: PyGo学习笔记
i = 1
while i <= 20:
if i % 5 == 0:
print(i)
else:
print(i, end=" ")
i += 1
while 语句嵌套
while 语句本身也是语句,和其它语句一样,可以嵌入if语句和while语句
# wxgzh: PyGo学习笔记
while 真值表达式:
外部执行语句1
while 真值表达式2:
内部执行语句
else:
内部循环结束执行语句
外部执行语句2
else:
外部循环结束执行语句
练习
输入一个整数n,打印指定宽度的正方形
如: 输入5打印如下:
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
输入4打印如下:
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
答案
# wxgzh: PyGo学习笔记
n = int(input("请输入一个整数:"))
i = 0
while i < n:
j = 1
while j <= n:
print(j, end=" ")
j += 1
print()
i += 1
break 语句
如果在循环过程中我不想再继续此循环语句的执行了,但真值表达式又为真,怎么办?
此时就可以使用break来终止当前循环语句的执行
说明说明:
1、 当break语句执行后,此循环语句break之后的语句将不再执行
2、 break 语句通常和if语句组合使用
3、 break 语句终止循环时,循环语句的else子句的语句不会被执行
4、 break 语句只能终止当前循环语句的执行,如果有循环嵌套时,不会跳出嵌套的外重循环
5、 break 语句只能用在循环语句(while或for)内部使用
for 循环
用来遍历可迭代对象的数据元素(可迭代对象是指能依次获取数据元素的对象)
常见可迭代对象包括: 字符串(str)、列表(list)、元组(tuple)、字典(dict)、集合(set)、range函数返回的对象等
# wxgzh: PyGo学习笔记
# 语法
for 变量 in 可迭代对象:
语句块1
else:
语句块2
# for 循环的else语句也是可以省略的
for 变量 in 可迭代对象:
语句块1
示例
# wxgzh: PyGo学习笔记
# 用for 语句打印 1 ~ 20, 打印在一行内
for i in range(1, 21):
print(i, end=" ")
# 执行结果: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
# 用for 语句打印 1 ~ 20, 每5个打印在一行内
for i in range(1, 21):
if i % 5 != 0:
print(i, end=" ")
else:
print(i)
# 执行结果
# 1 2 3 4 5
# 6 7 8 9 10
# 11 12 13 14 15
# 16 17 18 19 20
练习
计算 1 + 3 + 5 + 7 + … +97 + 99的和, 分别用for 和 while 两种循环实现
答案
# wxgzh: PyGo学习笔记
# for 循环 实现
total = 0
for i in range(1, 100, 2):
total += i
print("1 + 3 + 5 + 7 + .... +97 + 99 =", total)
# 执行结果:1 + 3 + 5 + 7 + .... +97 + 99 = 2500
# while 循环实现
total = 0
i = 1
while i <= 99:
total += i
i += 2
print("1 + 3 + 5 + 7 + .... +97 + 99=", total)
# 执行结果:1 + 3 + 5 + 7 + .... +97 + 99 = 2500
for语句嵌套
for 语句本身也是语句,和其它语句一样,可以嵌入if语句和for语句
# wxgzh: PyGo学习笔记
for 变量 in 可迭代对象1:
语句块1
for 变量 in 可迭代对象2:
语句2
示例
# wxgzh: PyGo学习笔记
for x in "ABC":
for y in '123':
print(x + y)
# 执行结果:
# A1
# A2
# A3
# B1
# B2
# B3
# C1
# C2
# C3
练习
用for循环、while 循环打印乘法口诀表
# wxgzh: PyGo学习笔记
# 口诀表的样式
# 1 X 1 = 1
# 1 X 2 = 2 2 X 2 = 4
# 1 X 3 = 3 2 X 3 = 6 3 X 3 = 9
# 1 X 4 = 4 2 X 4 = 8 3 X 4 = 12 4 X 4 = 16
# 1 X 5 = 5 2 X 5 = 10 3 X 5 = 15 4 X 5 = 20 5 X 5 = 25
# 1 X 6 = 6 2 X 6 = 12 3 X 6 = 18 4 X 6 = 24 5 X 6 = 30 6 X 6 = 36
# 1 X 7 = 7 2 X 7 = 14 3 X 7 = 21 4 X 7 = 28 5 X 7 = 35 6 X 7 = 42 7 X 7 = 49
# 1 X 8 = 8 2 X 8 = 16 3 X 8 = 24 4 X 8 = 32 5 X 8 = 40 6 X 8 = 48 7 X 8 = 56 8 X 8 = 64
# 1 X 9 = 9 2 X 9 = 18 3 X 9 = 27 4 X 9 = 36 5 X 9 = 45 6 X 9 = 54 7 X 9 = 63 8 X 9 = 72 9 X 9 = 81
# 用for 循环实现
for i in range(1, 10):
for j in range(1, i + 1):
print(j, "X", i, "=", i * j, end="\t")
print()
# 用while 循环实现
i = 1
while i < 10:
for j in range(1, i+1):
print(j, "X", i, "=", i * j, end="\t")
print()
i += 1
continue 语句
用于循环语句(while,for语句)中,不再执行本次循环 continue之后的语句,重新开始一次新的循环
说明:
1、在for 语句中执行continue语句,将会从可迭代对象中取下一个元素,绑定变量后再次开始执行
2、在while语句中执行continue,将会直接跳转到 while语句的真值表达式处重新判断循环条件
示例
# wxgzh: PyGo学习笔记
# 打印 1 ~ 20的单数, 打印在一行内
# for 循环
for i in range(1, 20):
if i % 2 == 0:
continue
print(i, end=" ")
# 执行结果: 1 3 5 7 9 11 13 15 17 19
# while 循环
i = 1
while i < 20:
if i % 2 == 0:
i += 1
continue
print(i, end=" ")
i += 1
# 执行结果: 1 3 5 7 9 11 13 15 17 19
练习
# wxgzh: PyGo学习笔记
# 阅读下面代码,思考x、i 最终值等于多少
x = 10
for x in range(1, 9):
print(x, end=" ")
i = 1
for i in range(4, 0):
print(i, end=" ")
print('x=', x, ", i=", i)
# 答案 x=8、i=1
# for 循环执行过程中,会对变量赋值
# range(1, 9)取到8的时候是最后一个元素,赋值完给x,执行完语句会退出循环
# range(4, 0)是空的可迭代对象,取不到值,不会给i赋值,也不会执行循环语句
# 阅读下面代码,思考打印结果是什么:
i = 6
for x in range(1, i):
i -= 1
print('x =', x, 'i=', i)
# 答案 x = 5 i= 1