循环

循环是编程语言常见的流程控制。

所谓循环 就是反复的执行一段代码。

我们人类语言要让别人反复的做一些事,可以这样说: 请你一直怎样怎样,或者请你反复怎样怎样。

Python语言要让计算机反复的做一些事 就要使用循环语句。

Python中有两种类型的循环: while 循环 和 for 循环


while 循环

while循环 是当一个条件满足(条件表达式计算结果为True) 时, 反复执行下面缩进的代码。

比如:

command = input("请输入命令:")
while command != 'exit':
    print(f'输入的命令是{command}')
    command = input("请输入命令")

上面 while command != 'exit'会判断用户输入的命令 (存在command 变量中) 是否等于字符串 'exit'

如果不等于, 就执行下面缩进的代码。下面缩进的代码就是循环体内的代码,还会再次让用户输入命令到变量command中。

如果等于字符串 'exit', 就结束循环。

如果用户输入的命令一直都不是字符串 'exit', 就会一直执行循环。

大家可以运行一下看看。


用 while 循环要注意的是,循环条件要处理好,不然就可能变成死循环,也就是循环的条件始终都是成立的。

比如,我们要打印出 从 1 到 100 的数字,应该写成下面这样

i = 1
while i <= 100:
    print(i)
    i += 1

如果不小心,漏掉最后一句,变成

i = 1
while i <= 100:
    print(i)

这样 i 的值始终不变, 循环的条件 i <= 100 一直都是满足的,就变成死循环了。程序一直打印 i 值为 1 ,永不结束。

for 循环

for 循环 通常是从一个sequence类型,比如 字符串、列表 或者 元组中 依次取出每个元素进行操作。

比如,我要打印出 一个学生年龄 列表中所有的学生信息, 可以这样写

studentAges = ['小王:17', '小赵:16', '小李:17', '小孙:16', '小徐:18']

for student in studentAges:
    print(student)

注意,for student in studentAges 这里的 student 变量就依次代表了 studentAges里面的每一个元素,执行下面 缩进的代码 print(student)

这里有5个学生的信息, 那么这个循环就执行了5次。

从循环的第1次到第5次,student 变量的值分别为:

'小王:17'
'小赵:16'
'小李:17'
'小孙:16'
'小徐:18'

所以上面的循环可以依次打印出上面的元素。


当然上面的例子用while循环也一样可以达到目的,就是稍微复杂一些

studentAges = ['小王:17', '小赵:16', '小李:17', '小孙:16', '小徐:18']

idx = 0
while idx < len(studentAges):
    currentEle = studentAges[idx]
    print(currentEle)
    idx += 1

上面的代码里,我们用一个变量idx代表 列表当前元素的索引。 在循环体里面 每执行一次就 让idx 的值加1。 这样的循环,变量 currentEle就依次等于 列表里面的每个元素。



for 循环通常还用来 循环 指定次数 地执行某段代码。

比如,我们要打印出 ‘python,我爱你’ 100次。

这时,我们可以借助一个内置函数 range,如下所示

# range里面的参数100 指定循环100次
# 其中 n 依次为 0,1,2,3,4... 直到 99
for n in range(100):  
    print(n)      
    print('python,我爱你')


break 终止循环

有时,我们循环体内的代码在发现某种条件满足的时候,需要终止循环。

比如,本文开头的例子

用户输入的命令如果等于字符串 'exit' 就结束循环

当然像面那上样的代码也是可以的

command = input("请输入命令:")
while command != 'exit'
    print(f'输入的命令是{command}')
    command = input("请输入命令")

print('程序结束')

只是,这样 代码有写啰嗦, command = input("请输入命令")写了两次。

我们可以使用关键字 break ,就可以这样

while True:
    command = input("请输入命令:")
    if command == 'exit':
        break
    print(f'输入的命令是{command}')

print('程序结束')

注意,解释器执行到 循环内的 break 语句,就会从循环while 退出,

接着执行while 循环下面的代码 print('程序结束')



break 对 for 循环也一样有效,如下:

for i in range(100):
    command = input("请输入命令:")
    if command == 'exit':
        break
    print(f'输入的命令是{command}')

print('程序结束')


函数中的 break 和 return

很多初学者,经常会搞不清 break 和 return的区别。

首先, return 只能用在函数里面, 表示 从函数中返回。

代码主体部分是不能用return的。

比如,下面的代码执行起来就会报错

while True:
    command = input("请输入命令:")
    if command == 'exit':
        return
    print(f'输入的命令是{command}')

print('程序结束')

提示

SyntaxError: 'return' outside function

因为 return 是表示从函数中返回,它 是不能用在 函数外面的。


函数中的循环体内的代码, 使用 return 和 break 都可以从循环中跳出。

但是,break 只是 跳出循环, 如果循环后面还有代码, 会进行执行,如下

def inputCommand():
    while True:
        command = input("请输入命令:")
        if command == 'exit':
            break
        print(f'输入的命令是{command}')


    print('末尾语句')

inputCommand()

执行该函数,输入 exit 发现,还会打印出 末尾语句 这句话


return 则会从函数里面立即返回, 函数体内的后续任何代码都不执行了,我们把上面的代码中的break 换成return, 如下

def inputCommand():
    while True:
        command = input("请输入命令:")
        if command == 'exit':
            return
        print(f'输入的命令是{command}')


    print('末尾语句')

inputCommand()

执行该函数,输入 exit 发现,就不会打印出 末尾语句 这句话


continue 跳过当前这次循环

有时,我们循环体内的代码在发现某种条件满足的时候,不是要终止整个循环,而是只结束当前这一轮循环,后面还要继续循环的执行

还是上面的例子,我们增加一个功能:

用户输入的命令如果等于字符串 'exit' 就结束程序;

而用户输入的命令如果等于字符串 'cont' 就不打印这个命令,但是还让用户继续输入下一个命令

我们可以使用关键字 continue ,就可以这样

while True:
    command = input("请输入命令:")
    if command == 'exit':
        break
    if command == 'cont':
        continue
    print(f'输入的命令是{command}')

print('程序结束')

运行一下看看。

再强调一遍:

continue 只是当前这次循环结束,就是这次循环 continue 后面的代码不执行了, 后续的循环还要继续进行。

break 是结束整个循环


列表生成式

如果我们要把一个列表里面的每个元素经过简单的处理生成另一个列表,怎么办?

当然可以用for循环处理。

比如:要把得到一个列表中每个元素的平方,放入到一个新的列表中

可以这样

list1 = [1,2,3,4,5,6]
list2 = []
for num in list1:
    list2.append(num*num)

Python还有更方便的语法,可以这样写

list1 = [1,2,3,4,5,6]
list2 = [num**2 for num in list1]

这种写法,通常叫做列表生成式。

就是把一个列表里面的每个元素经过简单的处理生成另一个列表的操作。

其中 for 前面的部分,就是要对取出的元素进行的处理操作, 上面的例子是计算平方。

如果我们 得到的 list1 里面每个元素的 立方呢?

对了,就可以这样

list1 = [1,2,3,4,5,6]
list2 = [num**3 for num in list1]




课后练习

去做练习

上一页 下一页