循环

学到这里,或许有的朋友已经准备放弃了。 很多东西看上去很美,比如音乐、绘画、编程。但是学习它们过程中不仅仅是快乐,也有困惑、迷茫,需要你的坚持。坚持学习下来,就会受用一生 —- 白月黑羽


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

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

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

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

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


while 循环

while循环 是: 检查一个条件表达式,只要条件表达式计算结果为True 时, 就执行下面缩进的代码。

如此反复,直到条件表达式计算结果为False时,结束 循环。

比如:

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

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

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

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

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

大家可以运行一下看看。


用 while 循环要注意 循环条件的设置,处理不当,有可能导致 循环的条件始终为True,循环永远不会结束,变成了死循环。

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

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

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

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

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

视频讲解


白月黑羽教Python学习视频 - 循环

for 循环

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就依次等于 列表里面的每个元素。

循环n次

开发程序时,我们经常需要 循环执行某段代码 n次

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

这时,我们可以使用for 循环 和 一个内置类型 range ,如下所示

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

注意:

和Python 2 不同, Python 3 中的range 并不是一个函数,不会返回一个数字列表。 Python 3 中的range 是一个 类

如果你想返回一个 从 0到99的数字列表, 可以这样写 : list(range(100))


如果我们想打印出从50 到 100 所有的数字,怎么办?

可以这样

for n in range(50,101):  
    print(n) 

range里面可以放入两个参数。

如果有两个参数,前面的数字是起点的数字,后面必须 小于 的的数字。每次取出一个数字都是依次+1, 就是50,51,52… 100

所以 到100, 最后必须写101, 否则就只会 到 99了。


如果我们想打印出从50, 55, 60, 65… 这样每次增加5, 直到 100,怎么办?

可以这样

for n in range(50,101,5):  
    print(n) 

range里面可以放入3个参数。

如果有3个参数,前面2个参数的含义和上面一样,第3个参数用例指定 步长

这里参数值为 5,就是每次增加5, 而不是增加1。

视频讲解


白月黑羽教Python学习视频 - for循环

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 发现,就不会打印出 末尾语句 这句话

视频讲解


白月黑羽教Python学习视频 - break终止循环

continue

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

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

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

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

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

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

print('程序结束')

运行一下看看。

再强调一遍:

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

break 是结束整个循环

列表推导式

我们经常需要这样处理一个列表:把一个列表里面的每个元素, 经过相同的处理 ,生成另一个列表。

比如:一个列表1,里面都是数字,我们需要生成一个新的列表B,依次存放列表A中每个元素的平方

怎么办?

当然可以用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]

视频讲解


白月黑羽教Python学习视频 - 循环中的continue

循环嵌套

我们来看一个编程题:

下面有两个列表 分别代表 刘备 和 曹操 麾下的猛将。

list1 = ['关羽','张飞','赵云','马超','黄忠']
list2 = ['典韦','许褚','张辽','夏侯惇','夏侯渊']

要求大家编写一段代码,让 list1中每员大将和list2中的每员大将 都互相厮杀一次,打印出 A 大战 B。


这是典型的 2个列表元素两两组合的问题, 需要用到循环的嵌套。

所谓循环的嵌套,就是循环里面还有循环。

对应的代码如下

list1 = ['关羽','张飞','赵云','马超','黄忠']
list2 = ['典韦','许褚','张辽','夏侯惇','夏侯渊']

for member1 in list1:
    for member2 in list2:
        print(f'{member1} 大战 {member2}')

输出结果如下:

关羽 大战 典韦
关羽 大战 许褚
关羽 大战 张辽
关羽 大战 夏侯惇
关羽 大战 夏侯渊
张飞 大战 典韦
张飞 大战 许褚
张飞 大战 张辽
张飞 大战 夏侯惇
张飞 大战 夏侯渊
赵云 大战 典韦
赵云 大战 许褚
赵云 大战 张辽
赵云 大战 夏侯惇
赵云 大战 夏侯渊
马超 大战 典韦
马超 大战 许褚
马超 大战 张辽
马超 大战 夏侯惇
马超 大战 夏侯渊
黄忠 大战 典韦
黄忠 大战 许褚
黄忠 大战 张辽
黄忠 大战 夏侯惇
黄忠 大战 夏侯渊

具体的讲解请看下面的视频:

视频讲解


白月黑羽教Python学习视频 - 循环嵌套


扫码分享给朋友,一起学更有动力哦




课后练习

去做练习

上一页 下一页