> 文档中心 > Python零基础入门篇 - 30 - Python中的循环

Python零基础入门篇 - 30 - Python中的循环


前言
✌ 作者简介:渴望力量的哈士奇,大家可以叫我 🐶哈士奇🐶 。(我真的养了一只哈士奇)
📑 个人主页:渴望力量的哈士奇主页
📫 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
🔥 如果感觉博主的文章还不错的话,还请不吝👍关注、点赞、收藏三连支持👍一下博主哦
💬 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。💬

📕系列专栏::
               👍 Python全栈系列 - [更新中]    ➡️➡️➡️ 【 本文在该系列】
               👋 网安之路系列
​                       🍋 网安之路踩坑篇
​                       🍋 网安知识扫盲篇
​                       🍋 Vulhub 漏洞复现篇
​                       🍋 Shell脚本编程篇
​                       🍋 Web攻防篇  ➡️➡️➡️ 2021年9月3日停止更新,转战先知等安全社区
​                       🍋 渗透工具使用集锦  ➡️➡️➡️ 2021年9月3日停止更新,转战先知等安全社区
​                ⭐️ 点点点工程师系列
​                       🍹 测试神器 - Charles 篇
​                       🍹 测试神器 - Fiddler 篇
​                       🍹 测试神器 - Jmeter 篇
​                       🍹 自动化 - RobotFrameWork 系列
​                       🍹 自动化 - 基于 JAVA 实现的WEB端UI自动化
                       🍹 自动化 - 基于 MonkeyRunner 实现的APP端UI自动化
​                🤗 2019年之前学习Python留下的乱七八糟系列

                                                                                  🎉🎉欢迎持续关注🎉🎉

Python零基础入门篇 - 30 - Python中的循环

文章目录

    • for 循环
      • 字典利用 items 内置函数进行 for 循环
      • Python 的内置函数 -- range
      • else 在 for 循环中的使用
      • for 循环删除列表元素的避坑指南
      • 嵌套 for 循环
    • while 循环
    • 拓展:列表推导式
      • 常见的推导式方法
    • 循环的继续与退出(continue 与 break)
      • continue 的使用
      • break 的使用
      • 条件语句 与 continue、break 的关系
    • 循环实现九九乘法表
    • 如何使用一行代码实现九九乘法表

文章目录

    • for 循环
      • 字典利用 items 内置函数进行 for 循环
      • Python 的内置函数 -- range
      • else 在 for 循环中的使用
      • for 循环删除列表元素的避坑指南
      • 嵌套 for 循环
    • while 循环
    • 拓展:列表推导式
      • 常见的推导式方法
    • 循环的继续与退出(continue 与 break)
      • continue 的使用
      • break 的使用
      • 条件语句 与 continue、break 的关系
    • 循环实现九九乘法表
    • 如何使用一行代码实现九九乘法表

什么是循环? —> 循环是有着周而复始的运动或变化的规律;在 Python 中,循环的操作也叫做 ‘遍历’ 。 与现实中一样,Python 中也同样存在着无限循环的方法与有限循环的方法。接下来我们就先看看有限循环的方法 —> for 循环

for 循环

for 循环的功能:通过 for 关键字将列表、元组、字符串、字典中的每个元素按照序列顺序进行遍历(循环),当读取到最后一个元素循环也就结束了。

for 循环的用法:示例如下

for item in iterable:# for循环语句块    print(item)# 每次循环对应的代码块    # 代码块所需要的缩进 # >>> iterable : 可循环的数据类型,如列表、元组、字符串、字典# >>> item : iterable 中的每一个成员(元素)# >>> 返回值 : for循环是语句,没有返回值;但是在一定的特殊情况下,是有返回值的。books = ['Python不秃头', 'PHP是最美的语言', 'DBA从入门到删库', '面向监狱的爬虫']for book in books:    print(book)print('finish')# >>> 执行结果如下:# >>> Python不秃头# >>> PHP是最美的语言# >>> DBA从入门到删库# >>> 面向监狱的爬虫# >>> finishstr_demo = 'Python'for i in str_demo:    print(i)    # >>> P# >>> y# >>> t# >>> h# >>> o# >>> nusers = {'name': 'Neo', 'age': '18'}for user in users:    print(user, users[user])# >>> 执行结果如下:    # >>> name Neo# >>> age 18# >>> 该循环的每一次遍历取 kay 的 value 不是很友好,有没有更好的方法方便我们取值呢?继续往下看。

字典利用 items 内置函数进行 for 循环

items() 内置函数的功能:将字典转成伪列表,每个 key 、 value 转成元组。

items() 内置函数的用法:示例如下

for key, value in dict.items():    print(key, value)    # >>> items : 无参数# >>> key : for 循环体中获取的字典当前元素的 key# >>> value : for循环体中对应的 key 的 value 的值# >>> 返回值 : for 循环是语句,没有返回值;items 返回一个列表dict_users = {'name': 'Neo', 'age': '18'}for key, value in dict_users.items():    print(key, value)    # >>> 执行结果如下:    # >>> name Neo# >>> age 18# 如果是一个列表内存在着字典元素呢?user_list = [{'name': 'Neo'}, {'name': 'Jack'}]for user in user_list:    print(user.get('name'))    print(type(user))    print(user.get('age'))    # >>> 执行结果如下:    # >>> Neo# >>> # >>> None# 因为 age 并没有被定义,所以返回的是 Node# >>> Jack# >>> # >>> None

Python 的内置函数 – range

range() 内置函数的功能:返回的是一个一定范围的可迭代对象(即可进行 for 循环),元素为整型。它不是列表,无法打印信息,但是可以循环。range() 函数一般帮助我们执行一定次数的循环而使用,比如设定循环5次。

range() 内置函数的用法:示例如下

for item in range(start, stop, step=1):    print(item)    # >>> start : 开始的数字,类似索引的左边    # >>> stop : 结束的数字,类似索引的右边# >>> step : 跳步,类似索引中的第三个参数# >>> 返回值 : 返回一个可迭代(循环的)以整型为主的对象# >>> 需要注意的是 range() 也是 左含右不含的方式test_int = range(5)for item in test_int:    print(item)    # >>> 执行结果如下:# >>> 0# >>> 1# >>> 2# >>> 3# >>> 4

else 在 for 循环中的使用

  • else 语句只能在 for 循环正常退出后执行
  • 也就是说循环没有报错,没有中途停止的情况下, else 语句 才会发生作用

示例如下:

'''for 变量 in 序列:    代码块 1else:    代码块 2'''test_int = range(5)for item in test_int:    print(item)else:    print('for循环成功结束')

重点

  • 若想执行 else 里面的代码块,必须是触达到循环条件且为假
  • 如果在循环里面提前结束了循环(break),则不会执行 else 里面的代码块

for 循环删除列表元素的避坑指南

首先,我们定义一个列表,使用 for 循环 删除列表中偶数(即能够被2整除的元素)

test_list = [3, 6, 8, 9, 25, 36, 100, 105]for item in test_list:    if item % 2 == 0: test_list.remove(item)print(test_list)# 执行结果如下:# >>> [3, 8, 9, 25, 100, 105]

这里我们会发现 元素 8 、元素 100 仍然存在,删除 偶数 元素的操作存在了遗漏。这是为什么呢?

其实,这是因为 remove() 函数在执行删除一个元素之后,后边的元素会自动补位到上一个被删除元素的位置上去。然而此时的 for 循环 在正向的往下运行,会略过这个补位的元素,由此就造成了遍历的遗漏。

所以正确的遍历代码如下:

test_list = [3, 6, 8, 9, 25, 36, 100, 105]for item in test_list[::-1]:    if item % 2 == 0: test_list.remove(item)print(test_list)# 执行结果如下:# >>> [3, 9, 25, 105]

嵌套 for 循环

什么是嵌套 for 循环? —> 即 for 循环中还有 for 循环

示例如下:

for i in range(3):    for j in range(2): print('内层循环:', j) print('外层循环:', i)# >>> 执行结果如下:# >>> 内层循环: 0# >>> 外层循环: 0# >>> 内层循环: 1# >>> 外层循环: 0# >>> 内层循环: 0# >>> 外层循环: 1# >>> 内层循环: 1# >>> 外层循环: 1# >>> 内层循环: 0# >>> 外层循环: 2# >>> 内层循环: 1# >>> 外层循环: 2name = ['Neo', 'Jack', 'Lily']age = [17, 18]for a in name:    # print(a)    for b in age: print('姓名:', a, '年龄:', b) # >>> 执行结果如下:# >>> 姓名: Neo 年龄: 17# >>> 姓名: Neo 年龄: 18# >>> 姓名: Jack 年龄: 17# >>> 姓名: Jack 年龄: 18# >>> 姓名: Lily 年龄: 17# >>> 姓名: Lily 年龄: 18

while 循环

什么是 while 循环? —> 以一定条件为基础的循环,条件满足的情况下无限循环,条件不满足则退出循环。

while 循环 不依赖可迭代的数据类型,而 for 循环依赖。

while 循环的功能:在满足条件的情况下,会无限循环;不满足条件后,将停止循环。

while 循环的用法:示例如下

while bool_result:    do    # >>> bool_result : 布尔类型,此处与 if 语法完全一直# >>> do : while 循环体的代码块;需要缩进# >>> 返回值 : while 循环是语句,没有返回值test_int = 1while test_int < 5:    print(test_int, end='\n')    test_int += 1# >>> 执行结果如下:# >>> 1# >>> 2# >>> 3# >>> 4
users_list = ['Neo', 'Jack', 'Lily', 'Adem']index = 0length = len(users_list)while index <= length - 1:    print('当前循环到的用户名为:', users_list[index])    index += 1print('while循环结束')# >>> 执行结果如下:# >>> 当前循环到的用户名为: Neo# >>> 当前循环到的用户名为: Jack# >>> 当前循环到的用户名为: Lily# >>> 当前循环到的用户名为: Adem# >>> while循环结束

注意:应避免 while True: 的情况,否则会进入死循环

拓展:列表推导式

列表推导式也叫做列表解析式,是一种快速创建列表的简洁语法。

列表推导式以[]中括号为标志,一般由表达式、循环语句、条件语句组成(条件语句非必须)。

Python零基础入门篇 - 30 - Python中的循环

列表推导式 和 for 循环明显存在的关联,下面我们看一下对比。

# 20以内所有偶数的平方list_1 = []for x in range(20):    if x % 2 == 0: list_1.append(x2)print(list_1)   # 运行结果:[0, 4, 16, 36, 64, 100, 144, 196, 256, 324]# 列表推导式,20以内所有偶数的平方print([x  2 for x in range(20) if x % 2 == 0])# 运行结果:[0, 4, 16, 36, 64, 100, 144, 196, 256, 324]

列表推导式对 for 循环语句的格式做了一下简单的变形,并用 [ ] 括起来,最终将循环过程中计算表达式得到的一系列值组成一个列表。

常见的推导式方法

元组推导式如下:

# 元组推导式t_1 = (x for x in range(10))  # 结果是生成器对象,使用tuple()函数将其转换为元组print(tuple(t_1))   # 运行结果:(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

字典推导式如下:

# 字典推导式print({x:x2 for x in range(10)})# 运行结果:{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}

集合推导式如下:

# 集合推导式print({x for x in range(10)}) # 运行结果:{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

循环的继续与退出(continue 与 break)

前面我们学习了 for 循环while 循环 , 它们可以帮助我们自动处理一些业务。但是在循环中难免会出一些意外的状况,这个时候如果再继续循环下去,就会对我们的业务不利,这个时候就需要使用到 continuebreak 来帮助我们河狸的退出循环。

continue 的使用

continue 的功能:循环遇到 continue 将停止本次数据循环,进行下一次循环

continue 的用法:示例如下

while bool:    continuefor item in iterable:    continue    print(item)    # >>> continue : 属于语法,不需要加 () 即可执行;无参数# >>> 返回值 : continue 是语法,没有返回值。count = 1while count < 5:    print(count)    continue    count += 1    # >>> 执行结果如下:# >>> 1, 1, 1, 1, ...  无限循环,一直是1

break 的使用

break 的功能:是循环正常停止循环(遍历),这时如果循环配合了 else 语句,else语句将不执行。

break 的用法:示例如下

while bool:    breakfor item in iterableprint(item)    break    # >>> break :属于语法,不需要加 () 即可执行;无参数。# >>> 返回值 : break 是语法,没有返回值。count = 1while count < 5:    print(count)    count += 1    break    # >>> 执行结果如下:# >>> 1

条件语句 与 continue、break 的关系

  • continu 与 break 通常伴随着循环语句中的条件语句,满足某些条件可以继续执行,不满足某些条件提前结束循环。
  • 在 while 循环中,break 语句的优先权要大于 while 逻辑块的判断结果 (比如上文中的 count += 1)

示例如下:

count = 1while count < 5:    print(count)    count += 1    if count == 2:    break# >>> 执行结果如下:# >>> 1

循环实现九九乘法表

代码示例如下:

# for 循环 实现九九乘法表for i in range(1, 10):    for j in range(1, i + 1): print('{} * {} = {}'.format(i, j, i * j), end=' ')    print('')    # >>> 执行结果如下:# >>> 1 * 1 = 1 # >>> 2 * 1 = 2 2 * 2 = 4 # >>> 3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 # >>> 4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16 # >>> 5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25 # >>> 6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36 # >>> 7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49 # >>> 8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64 # >>> 9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81 
# while 循环 实现九九乘法表i = 0j = 0while i < 9:    i += 1    while j < 9: j += 1 print('{} * {} = {}'.format(j, i, i * j), end=' ') if i == j:     j = 0     print('')     break     # >>> 执行结果如下:# >>> 1 * 1 = 1 # >>> 1 * 2 = 2 2 * 2 = 4 # >>> 1 * 3 = 3 2 * 3 = 6 3 * 3 = 9 # >>> 1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16 # >>> 1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25 # >>> 1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36 # >>> 1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49 # >>> 1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64 # >>> 1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81 

如何使用一行代码实现九九乘法表

print('\n'.join([' '.join(['{} * {} = {} '.format(item_1, item_2, item_1 * item_2) for item_2 in range(1, 10) if item_2 <= item_1]) for item_1 in range(1, 10)]))# 利用了 列表推导式 及 列表转字符串# 但使用这种方式的阅读性极差, 项目中绝不能使用