Python教程-循环控制
循环控制
很多时候,我们在处理业务的时候,并不是如果怎么样就怎么样,而是一直做某件事,直到全部做完,甚至永远做不完.....
循环控制是在处理业务逻辑时常用的一种结构,它允许我们重复执行一段代码,直到满足退出条件才停止循环。
在 Python 中,我们可以使用关键字 for
和 while
进行循环控制,但没有像其他编程语言中的 do...while
语句。
for
循环用于遍历可迭代对象(如列表、元组、字符串等),按顺序依次取出其中的元素,并执行相应的代码块。while
循环在满足指定条件的情况下,重复执行代码块,直到条件不再满足时才停止循环。
while循环
while循环语句的控制结构图如下所示:
语法格式:
while 判断表达式:
内部代码块
“while”翻译成中文就是“当...”的意思,while循环用伪代码描述就是“当条件满足的时候,就一直运行while所管理的代码块,当条件不满足的时候,就结束while循环。”看个例子:
n = 100
sum = 0
counter = 1
while counter <= n:
sum = sum + counter
counter += 1
print("1 到 %d 之和为: %d" % (n,sum))
这段代码的目的是计算从1到100的所有数字的总和。首先,我们定义了三个变量:n、sum和counter,并为它们分别赋予初始值。接下来,通过while循环来检查条件,判断counter是否小于等于n。如果条件成立,就执行循环体内的代码:将当前的counter值加到sum中,并将counter自增1。执行完循环体后,程序会再次回到while条件判断处,继续检查条件是否满足。只要条件依然成立,就会继续执行循环体内的代码,将counter的值加到sum中,并使counter自增1。这个过程会一直持续,直到条件不再满足,循环结束。最后,我们打印出sum的值,即1到100的总和。
在编写循环时,通常需要设置退出条件,以避免进入死循环。然而,在某些情况下,我们可能需要使用无限循环,例如Web服务器实时响应客户端请求。下面的代码示例展示了一个没有退出机制的死循环,它永远不会打印出"Good bye"。
while True: # 表达式永远为 true
s = input("输入点什么吧: ")
print ("你输入的是: ", s)
print ("Good bye!")
while的else从句:
while循环还可以增加一个else从句。当while循环正常执行完毕,会执行else语句。但如果是被break等机制强制提前终止的循环,不会执行else语句。注意else与while平级的缩进方式!
number = 10
i = 0
# i = 11
while i < number:
print(i)
i += 1
else:
print("执行完毕!")
下面是被打断的while循环,else不会执行:
number = 10
i = 0
while i < number:
print(i)
i += 1
if i == 7:
break
else:
print("执行完毕!")
for循环
虽然与while一样都是循环的关键字,但for循环通常用来遍历可迭代的对象,如一个列表或者一个字典。其一般格式如下:
for <variable> in <sequence>:
<statements>
for ... in ....:
属于固定套路。其实我们在前面的章节已经或多或少的介绍过for的用法,尤其是遍历一些数据类型的时候。
sum = 0
for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
sum = sum + x
print(sum)
for循环的else 子句:
就像使用while循环一样,for循环也可以配备一个else子句。当for循环正常完成(即没有遇到break语句)时,else子句将被执行。但是,如果在循环过程中遇到了break语句,else子句将不会执行。
循环的嵌套
此外,循环可以进行嵌套。就像if语句可以嵌套一样,while循环和for循环也可以相互嵌套。然而,请注意不要嵌套过多层级,建议不要超过3层。因为嵌套层级过多会导致效率降低。下面是一个示例,演示了嵌套的for循环以及如何结合使用else子句:
# 这是一个判断质数的程序
for n in range(2, 100):
for x in range(2, n):
if n % x == 0:
print(n, '等于', x, '*', n//x)
break
else:
# 循环中没有找到元素
print(n, ' 是质数')
break语句
通常情况下的循环要么执行出错,要么死循环,要么就只能老老实实等它把所有的元素循环一遍才能退出。如果想在循环过程中退出循环,怎么办?用break语句!
break只能用于循环体内。其效果是直接结束并退出当前循环,剩下的未循环的工作全部被忽略和取消。注意当前两个字,Python的break只能退出一层循环,对于多层嵌套循环,不能全部退出。
for letter in 'Hello world': # 第一个实例
if letter == 'd':
break
print ('当前字母为 :', letter)
--------------------------------------------
var = 10 # 第二个实例
while var > 0:
print ('当期变量值为 :', var)
var -= 1
if var == 5:
break
continue语句
与break不同,continue语句用于跳过当前循环的剩余部分代码,直接开始下一轮循环。它不会退出和终止循环,只是提前结束当前轮次的循环。同样的,continue语句只能用在循环内。
for letter in 'Hello world': # 第一个实例
if letter == 'o': # 字母为 o 时跳过输出
continue
print ('当前字母 :', letter)
-------------------------------------------------------
var = 10 # 第二个实例
while var > 0:
var -= 1
if var == 5: # 变量为 5 时跳过输出
continue
print ('当前变量值 :', var)
Python没有goto语法
前面说了,在嵌套循环中,break只能跳出当前层的循环,无法全部跳出。在C语言中有goto语法,可以实现这一功能,但是Python没有goto。那有需求的时候怎么办呢?设置flag!
flag = False # 用于控制外层循环的标志
for i in range(10):
if flag: # 当flag被内层循环设置为True的时候,跳出外层循环
break
for j in range(10):
if j==7:
flag = True
break
print(i,j)