Skip to content

Latest commit

 

History

History
223 lines (164 loc) · 4.45 KB

File metadata and controls

223 lines (164 loc) · 4.45 KB
Error in user YAML: (<unknown>): found a tab character that violate indentation while scanning a plain scalar at line 3 column 3
---
- oeasy Python 0154
- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。
- 本教程同步发布在: 
	- 个人网站: `https://oeasy.org` 
	- 蓝桥云课: `https://www.lanqiao.cn/courses/3584` 
	- GitHub: `https://github.com/overmind1980/oeasy-python-tutorial` 
	- Gitee: `https://gitee.com/overmind1980/oeasypython` 
---

比较运算符

回忆

  • 上次研究了 三目运算符
    • 根据条件 是否满足
    • 可以得到 不同的结果值
  • 三目运算符
    • 一定 可以转化成 if语句

图片描述

  • 如果if有三个分支
    • 怎么办??🤔

嵌套语句

  • 先判断
    • score 是否大于 60
score = 70
if score >= 60:
    if score >= 80:
        print("perfect!")
    else:
        print("normal")
  • 如果大于 60
    • 再判断他 是否大于 80
    • 如果大于 80
      • 输出 perfect
    • 否则的话
      • 输出 normal

图片描述

  • 怎么知道这个 else 跟着哪个 if 呢?

缩进

  • 看缩进
    • 缩进相同的 几行
    • 其实就是一个 block
score = 70
if score >= 60:
    if score >= 80:
        print("perfect!")
    else:
        print("normal")
  • 现在的缩进显示
    • else 跟着的是 第 3 行的 if
    • 进去调试一下

图片描述

  • 如果我就想让他
    • 跟第 2 行的 if 配对呢?

调整缩进

图片描述

score = 40
if score >= 60:
    if score >= 80:
        print("perfect!")
else:
    print("not pass")
  • 重新调试

缩进 与 逻辑

  • 调整缩进
    • 其实就是
      • 调整 逻辑

图片描述

  • 为什么缩进可以控制逻辑呢?

错误

  • 先看看 python 的前辈 c 语言
    • 经常 出错误的一个点

图片描述

  • 在以上的 c 语言伪代码中
    • else 并不会 和想象中的 外层if 配对
    • 而是 和他离得最近的 if配对
    • 除非 用大括号强行控制
  • python 又如何 呢?

python

  • python 不会出现 上面的问题
    • 因为 python 从缩进上
    • 就把逻辑关系 整得明明白白
    • 一看就明白

图片描述

  • 缩进
    • 不但 控制 代码的逻辑
    • 而且 控制 代码的视觉效果

结构

  • 使用缩进
    • 明确代码 从属关系
    • 清晰 看到 逻辑

图片描述

  • python 是如何翻译 缩进 的呢?

语法

  • 词法分析器
    • 使用 一个堆栈
    • 来存储语句的 缩进等级

图片描述

  • 初始情况 0
    • 就是没有缩进
  • 如果 下一行 有缩进的话
    • 就把一个 token 令牌压入堆栈
    • 文本流中 把空格或 tab 替换为<INDENT>
  • 如果 下一行 同样缩进
    • 就不添加<INDENT>
  • 如果下一行 添加缩进
    • 就在流中 添加<INDENT>
    • 一行最多一个<INDENT>
  • 如果下一行 减少缩进
    • 就根据 减少缩进的数量
    • 在流中 添加相应的<DEDENT>
    • 一行可能有多个<DEDENT>

图片描述

  • 上图中
    • 左边是 流中插入的 文本
    • 右边是 堆栈中的 状态

过程

  • 这一步 发生了之后
    • <INDENT><DEDENT>已经成为了文本流中的一部分
    • 然后 再去 语法分析
    • 控制 语法树中逻辑

图片描述

  • 缩进方面
    • python 的 缩进
    • 领先于 大括号

领先

图片描述

  • 能把上面三种可能性
    • 都处理了么?

流程图

  • 按照这个流程图的逻辑

图片描述

  • 落实到代码
score = 50
if score >= 60:
    if score >= 80:
        print("Perfect!")
    else:
        print("Normal!")
else:
    print("Not Pass")

  • 在if语句里面
    • 嵌套了if语句

总结

  • 这次 在条件 里面添加了 条件
    • 缩进结构
      • 既是样式
      • 也是逻辑关系

图片描述

  • 嵌套可以有很多很多层
    • 判断谁
    • 判断谁
    • 有什么说法吗?🤔
  • 下次再说 👋

  • 本文来自 oeasy Python 系统教程。
  • 想完整、扎实学 Python,
  • 搜索 oeasy 即可。