反复处理用于将相同的处理重复一定次数或在满足一定条件的情况下进行。在 Python 中,您可以使用 while 和 for 语句进行迭代。在这里,我们将解释如何在 Python 中进行迭代。
目录
9-1 while语句处理流程
9-2 反复使用 for 语句
9-3 在for语句中使用range函数重复指定次数
9-4 使用break语句强制终止循环处理
9-5 使用 continue 语句跳过迭代
while 语句
我将解释如何使用在 Python 中执行迭代处理时,使用的 while 语句。while 语句在条件表达式为真时重复以下块中的处理。
while 条件式:
当条件表达式为真时执行的语句
如果条件表达式为真,则依次执行其后描述的块中的语句。如果要执行多条语句,将它们写在一个块中。
while 条件式:
当条件表达式为真时要执行的语句1
当条件表达式为真时要执行的语句2
当条件表达式为真时要执行的语句3
※在 Python 中,块是使用缩进定义的。有关详细信息,请参阅 “在 Python 中使用缩进定义块”。
以下示例
num = 0
while num < 2:
print("num = " + str(num))
print("End")
此时执行的流程如下。
1) 将 0 赋值给变量 num
2) 评估while 语句的条件表达式。变量 num 小于 2,所以条件表达式为真。
3)输出变量num的值
4) 由于到达了块的末尾,while 语句的条件表达式被再次求值。
5)条件表达式为真,因为变量num小于2
6) 输出变量num的值
7)无限次重复(4)到(6)
这样,while 语句对条件表达式求值,如果为真,则执行块中的处理并返回再次对条件表达式求值。在这个例子中,块中没有改变条件表达式的处理,因此重复将无限重复。
让我们稍微修改一下前面的例子。
num = 0
while num < 2:
print("num = " + str(num))
num += 1
print("End")
这次我们将 1 添加到分配给块内变量 num 的值。这个过程的流程如下。
1) 将 0 赋值给变量 num
2) 评估while 语句的条件表达式。变量 num 小于 2,所以条件表达式为真。
3)输出变量num的值
4)给变量num加1(num为1)
5) 因为到达了块的末尾,while 语句的条件表达式被再次求值。
6)条件表达式为真,因为变量num小于2
7) 输出变量num的值
8) 变量num加1(num为2)
9) 由于到达块末尾,while 语句的条件表达式再次求值。
10) 条件表达式为假,因为变量 num 不小于 2
11)结束while语句,进入下一个流程
12)输出“结束”
每次重复 while 语句时,变量 num 的值都会改变。结果while语句的条件表达式第三次变为false,while语句结束。
示例代码
请看下面的示例。
num = 1
print("Start")
>> Start
while num < 6:
print("num = " + str(num))
num += 1
>> num = 1
>> num = 2
>> num = 3
>> num = 4
>> num = 5
print("End")
>> End
我们改变变量num的值,不断迭代,直到num的值变成5或者更大。
在while语句(while..else语句)的最后描述要执行的过程
while 语句在指定的条件表达式为真时重复执行过程,但是当条件表达式变为假时要执行的过程可以在 else 子句之后描述。
while 条件式:
当条件表达式为真时要执行的语句1
当条件表达式为真时要执行的语句2
else:
条件表达式为假时执行的语句 1
条件表达式为假时执行的语句 2
这与简单地将其写在 while 语句之后基本相同。这是因为当 while 语句结束时,会执行 while 语句后面的语句。
while 条件式:
当条件表达式为真时要执行的语句1
当条件表达式为真时要执行的语句2
要执行的语句1
要执行的语句2
唯一的区别是何时在 while 语句内执行 break 语句。这是因为在执行 break 语句时,不执行 else 子句之后描述的块中的处理,而是转移到下一个 while 语句。如果不使用 else 子句,则无论是否执行 break 语句,都会执行 while 语句之后描述的处理。
示例代码
请看下面的示例。
num = 1
total = 0
print("Start")
>> Start
while num < 6:
print("num = " + str(num))
total += num
num += 1
else:
print("Total = " + str(total))
>> num = 1
>> num = 2
>> num = 3
>> num = 4
>> num = 5
>> Total = 15
print("End")
>> End
使用 else 子句来描述在 while 语句结束时执行的过程。
我们将解释如何使用在 Python 中迭代时可以使用的 for 语句。for 语句在逐个取出与单独指定的可迭代对象的元素数量一样多的元素的同时进行迭代。
for语句处理流程
for 语句将过程重复指定的次数。基本格式如下。
for 变量 in 可迭代对象中:
要执行的语句
执行可迭代对象的元素个数之后描述的块中的语句,依次从可迭代对象中逐一检索元素。如果要执行多条语句,将它们写在一个块中。
可迭代对象是可以按顺序检索元素的对象,字符串、列表、元组、字典等都是可迭代对象。
for 变量 in 可迭代对象中:
要执行的语句1
要执行的语句2
要执行的语句3
※ 在 Python 中,块是使用缩进定义的。有关详细信息,请参阅 “在 Python 中使用缩进定义块”。
以下示例。
mylist = ["Orange", "Peach", "Lemon"]
for val in mylist:
print(val)
print("End")
此时执行的流程如下。
1) 定义一个列表并赋值给变量mylist
2) 从 mylist 中取出一个元素赋值给 val (val is "Orange")
3) 输出变量val的值
4) 从 mylist 中取出一个元素赋值给 val (val is "Peach")
5) 输出变量val的值
6) 从 mylist 中获取一个元素并将其赋值给 val (val is "Lemon")
7) 输出变量val的值
8) 结束for语句,因为所有的元素都已经从可迭代对象中获取了
9) 输出“结束”
这样就对for语句中指定的可迭代对象的元素个数进行了迭代。
示例代码
请看下面的示例。
mylist = ["Orange", "Peach", "Lemon", "Apple"]
for val in mylist:
print("value:" + val)
>> value:Orange
>> value:Peach
>> value:Lemon
>> value:Apple
mydict = {"L":"Lemon", "O":"Orage", "G":"Grapes"}
for mykey, myvalue in mydict.items():
print("key:" + mykey + ", value:" + myvalue)
>> key:L, value:Lemon
>> key:O, value:Orage
>> key:G, value:Grapes
我们使用 for 语句从列表和字典对象中获取每个元素并将它们打印到屏幕上。
在for语句(for..else语句)的最后描述要执行的过程
for语句迭代多少次可迭代对象中的元素个数,但是你可以在else子句后面写上获取到所有元素后的最后处理。
for 变量 in 可迭代对象中:
要执行的语句1
要执行的语句2
else:
要执行的语句1
要执行的语句2
这基本上就好像它只是写在 for 语句之后一样。这是因为当 for 语句结束时,会执行 for 语句后面的语句。
for 变量 in 可迭代对象中:
要执行的语句1
要执行的语句2
要执行的语句1
要执行的语句2
唯一的区别是 break 语句何时在 for 语句内执行。这是因为在执行 break 语句时,不执行 else 子句之后描述的块中的处理,而是转移到下一个 for 语句。如果不使用 else 子句,则无论是否执行 break 语句,都会执行 for 语句之后描述的处理。
示例代码
请看下面的示例。
count = 0
mylist = ["Orange", "Peach", "Lemon", "Apple"]
for val in mylist:
print("value:" + val)
count += 1
else:
print("元素个数 = " + str(count))
>> value:Orange
>> value:Peach
>> value:Lemon
>> value:Apple
>> 元素个数 = 4
使用 else 子句来描述在 for 语句末尾执行的处理。
for语句从可迭代对象中逐一取出元素并重复,但是通过使用range函数,可以轻松重复指定次数。在这里,我们将解释如何在 for 语句中使用 range 函数来重复指定的次数。
使用range函数重复该过程指定的次数
在Python中,for语句是用来重复处理的,但是如果你想重复指定的次数,比如重复10次,结合range函数会很方便。
例如:
for i in range(10):
要执行的语句 1
要执行的语句 2
range 函数实际上是一个范围类型的构造函数,它创建一个对象,其元素是从 0 到不超过参数中指定的数字的连续数字。例如,range(10) 有 10 个元素 0 1 2 3 4 5 6 7 8 9。for 语句在逐个获取元素的同时进行迭代,因此前一个 for 语句将重复 10 次作为结果。
如果你想对列表对象做类似的事情,你可以这样写:
for i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:
要执行的语句 1
要执行的语句 2
这样描述10次还是可以的,但是重复次数大的时候用range函数就方便了,比如100次或者1000次。
示例代码
请看下面的示例。
num = 1
for i in range(10):
old = num
num *= 2
print(str(old) + " * 2 = " + str(num))
>> 1 * 2 = 2
>> 2 * 2 = 4
>> 4 * 2 = 8
>> 8 * 2 = 16
>> 16 * 2 = 32
>> 32 * 2 = 64
>> 64 * 2 = 128
>> 128 * 2 = 256
>> 256 * 2 = 512
>> 512 * 2 = 1024
使用 range 函数迭代了 10 次。
如果在while语句或for语句的迭代处理中使用break语句,可以强制终止重复处理。在这里,我们将解释如何在 while 语句或 for 语句中使用 break 语句来强制终止迭代处理。
使用 break 语句强制终止循环处理
当在 while 语句或 for 语句块中执行 break 语句时,循环处理被强制终止并且处理移动到下一个语句。
break
break 语句与 if 语句结合使用,如下所示。
while 条件表达式:
当条件表达式为真时要执行的语句1
当条件表达式为真时要执行的语句2
if 条件表达式:
break
当条件表达式为真时要执行的语句3
如果是while语句,块中的处理在条件表达式为真时重复执行,但是在块中写一个if语句,当if语句的条件表达式为真时写一个break to do。当执行 break 语句时,while 语句被强制终止。
具体来说,请考虑以下示例。由于while语句的条件表达式设置为True,所以总是为真,变成死循环。只需在块中使用 if 语句,如果条件表达式为真,则使用 break 语句结束迭代过程。
num = 0
while True:
print("num = " + str(num))
num += 1
if num >= 2:
breaak
print("End")
此时执行的流程如下。
1) 将 0 赋值给变量 num
2) 评估while 语句的条件表达式。由于条件表达式为True,因此条件表达式始终为真
3)输出变量num的值
4)给变量num加1(num为1)
5) 评估if语句的条件表达式。条件表达式为假,因为变量 num 小于 2
6) 由于到达块末尾,while 语句的条件表达式再次求值。
7) 输出变量num的值
8) 变量num加1(num为2)
9) 评估 if 语句的条件表达式。变量 num 不小于 2,所以条件表达式为真。
10)结束while语句,进入下一个流程
11)输出“结束”
通过以这种方式使用 break 语句,您可以在达到特定状态时退出 while 或 for 语句。
示例代码
请看下面的示例。
num = 1
while True:
print("num = " + str(num))
num *= 2
if num > 10:
break
>> num = 1
>> num = 2
>> num = 4
>> num = 8
print("While End")
>> While End
初始值的值翻倍,当超过10时,while语句以break语句结束。
如果在while 语句或for 语句的迭代处理中使用continue 语句,则可以跳过其余的迭代处理,继续判断条件表达式。在这里,我们将解释如何在 while 语句或 for 语句中使用 continue 语句来跳过循环处理。
使用 continue 语句跳过迭代
在 while 语句或 for 语句块中执行 continue 语句时,将跳过迭代过程并继续执行条件表达式的计算。
continue
continue 语句与 if 语句结合使用,如下所示。
for 变量 in 可迭代对象中:
要执行的语句1
要执行的语句2
if 条件表达式:
continue
要执行的语句3
如果是for语句,block中的处理重复次数与list或tuple等可迭代对象中包含的元素个数一样多。write to execute continue times。当continue语句执行时,块中if语句后的“待执行语句3”不执行,流程跳转到用for语句从iterable对象中提取下一个元素。
具体来说,请考虑以下示例。for 语句按顺序从列表中检索元素并将值显示在屏幕上。但是,如果元素的值是一个字符串,则跳过它并获取下一个元素。
for val in [3, "ab", 7]:
if isinstance(val, str):
continue
print("val = " + str(val))
print("End")
此时执行的流程如下。
1) 将列表中的一个元素分配给变量 val(val 为 3)
2) 在if条件表达式中检查val的数据类型是否为字符串类型 --> False
3)输出变量val的值
4) 将列表中的一个元素分配给变量 val(val 是“ab”)
5) 在if条件表达式中检查val的数据类型是否为字符串类型 --> true
6) 跳过块中的其余语句
7) 将列表中的一个元素分配给变量 val(val 为 7)
8) 在if条件表达式中检查val的数据类型是否为字符串类型 --> False
9) 输出变量val的值
10)输出“结束”
通过像这样使用 continue 语句,您可以在特定状态发生时跳过块中的进一步处理。
示例代码
请看下面的示例。
total = 0
for num in [35, 25, "OK", 45, "Pass", 28]:
if isinstance(num, str):
continue
print("num = " + str(num))
total += num
>> num = 35
>> num = 25
>> num = 45
>> num = 28
print("Total = " + str(total))
>> Total = 133
仅将列表的数字元素打印到屏幕,最后打印数字的总和。如果从列表中获取元素时它是一个字符串,则使用 continue 语句跳过它。