Skip to content

Latest commit

 

History

History
255 lines (171 loc) · 6.21 KB

178-234327-二重循环.sy.md

File metadata and controls

255 lines (171 loc) · 6.21 KB
show version enable_checker
step
1.0
true

二重循环

回忆

  • 上次研究了 enumerate()
    • enumerate()是个特殊的 zip 函数
    • enumerate()把列表和编号缝在一起
    • 还可以设置起始值 start
  • 几列可迭代对象可以缝合成 zip 对象
    • enumerate 可以给缝合好的 zip 对象缝上编号
    • 这样可以把 zip 组转化为为有编号的 zip 组
  • 遍历过程iterable的过程中还可以
    • 增删改iterable
  • 可迭代的可迭代对象
    • 就是列表的嵌套
    • 得到个二维列表
    • 如何遍历二维列表呢??🤔
  • 首先得有一个二维列表

二维数组

图片描述

  • 我们用了一个 for 循环遍历了这个数组
  • 但是这个数组是一个二维数组啊
  • 我可以来一个二重循环么?

二重循环

图片描述

  • 这就是一个二重循环
  • 循环两次
  • 通过缩进可以看出到底语句属于那一重循环
  • 这个行内的格式可以控制得好一点吗?

进化

图片描述

  • 二重循环的缩进很重要
  • 可以看出语句属于哪一重
  • 不过这种\b的方法其实不太好理解
  • 能否变成好理解的方式?

遍历

图片描述

  • 通过元素序号的方式
    • 能知道当前元素是列表中的第几个元素

图片描述

  • 如果是列表中最后一个话
    • 就需要特殊处理

处理

图片描述

图片描述

  • 可是最后一行还有点问题,怎么处理呢?

最后一行

图片描述

  • 这样的方式不是拼拼补补
  • 而是用python的语句、列表的语法进行逻辑思考
  • 然后写出的代码
  • thinking in python!

图片描述

l = [[1, 2],[3, 4]]
print("[")
for i in range(len(l)):
    print("\t[",end="")
    for j in range(len(l[i])):
        if j != len(l[i])-1:
            print(str(l[i][j])+" ,",end="")
        else:
            if i != len(l)-1:
                print(str(l[i][j])+"],")
            else:
                print(str(l[i][j])+"]")
print("]")
  • 我们再来个复杂点的

遍历

图片描述

  • d 是一个字典
  • 我把字典 d 给遍历了
  • 如果我还想把里面的字典项 values 按照自己的方式显示
  • 应该怎么办呢?

二重遍历

图片描述

  • 字典项的值是一个字典
  • 这就需要二重循环了
  • 注意每一重的缩进效果不同
  • 列表、元组、字典都是 iterable 的
  • 还有什么是 iterable 的呢?

字符串

图片描述

图片描述

  • 可以直接输出字符若干次
  • 如果是 a 的话我想跳出
  • 应该怎么办?

跳出

图片描述

图片描述

  • 如果是 a 可以结束内层循环
  • 但是还是要打印一个换行符
  • 我想换行符也不打
  • 怎么办?
  • 不要在内层想办法
  • 跳出循环想办法

跳出

图片描述

图片描述

  • 这有点太猛了
  • 直接跳出去
  • 其实后面我还想继续
  • 只是跳出本轮

继续

图片描述

图片描述

  • 这就是二重循环

二重循环有个经典例子

图片描述

  • 这个能做么?
  • 又突然想做一个红绿灯 🚥

红绿灯

  • 首先红绿灯各 10 秒
  • 都是倒计时的
  • 而且要 figlet 变大
  • 怎么做?

图片描述

新建文件

  • 新建 traffic.py
  • 先来一个红灯倒数 9 个数字

图片描述

  • 有红灯就得有绿灯
  • 照猫画虎就可以

绿灯

图片描述

  • 然后外层加个死循环
  • 让他无限循环起来

循环

  • 这其实不难
  • 循环外面再套一层
  • 就是一个二重循环

图片描述

  • 我想把这个改成一个做操喊号
  • 可以么?

做操喊号

  • 什么是做操喊号呢?
  • 1234
  • 2234
  • 3234
  • 4234

图片描述

  • 问题来了
  • 程序怎么改?

喊号子

图片描述

  • 字体区分
  • 不过要想颜色也有区分
  • 现在都是 41 红的
  • 我想在 16,231 之间随机一个颜色
  • 来吧
  • 想起来就干

变颜色

图片描述

  • 四个四拍我还是觉得不够
  • 最好是八个八拍
  • 然后无限循环
  • 这是一个三重循环了

总结

  • 这次研究了二重循环
    • 二重循环其实很简单
  • 就是用 for 或者 while 再循环里面
    • 再构建一个循环
    • 甚至可以做三重甚至更多重的循环
  • 我们曾经玩过随机输出混乱颜色

图片描述

  • 现在我们可以输出一些好玩的东西吗?
  • 下次再说 👋