Skip to content

Latest commit

 

History

History
184 lines (129 loc) · 4.88 KB

138-203374-嵌套条件语句.sy.md

File metadata and controls

184 lines (129 loc) · 4.88 KB
show version enable_checker
step
1.0
true

比较运算符

回忆

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

图片描述

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

嵌套语句

图片描述

  • 这里先判断了
  • score 是否大于 60
  • 如果大于 60
    • 那么判断他是否大于 80
    • 如果大于 80
      • 输出 perfect
    • 否则的话
      • 输出 normal
  • 那你怎么知道这个 else 跟着哪个 if 呢?
  • 看缩进
  • 现在的缩进显示 else 跟着的是第 3 行的 if
  • 如果我就想让他跟第 2 行的 if 配对呢?

图片描述

调整缩进

图片描述

图片描述

  • 调整缩进
  • 其实就是在调整 else 是跟谁 else 的逻辑
  • 为什么缩进可以控制逻辑呢?
  • 我们先看看 python 的前辈 c 语言经常出错误的一个点

错误

图片描述

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

python

  • python 不会出现上面的问题
  • 因为 python 从缩进上
  • 就把逻辑关系整得明明白白的
  • 读者一看就明白
  • 缩进不但控制了代码的样式
  • 同时控制了代码的逻辑
  • 而且 python 当中也可以 tab 和 space 混合使用
  • python 是如何翻译这些空格和 tab 的呢?

语法

图片描述

  • 词法分析器使用一个堆栈来存储语句的缩进等级
  • 0 就是没有缩进
  • 如果下一行有缩进的话
    • 就把一个 token 令牌压入堆栈
    • 文本流中把空格或 tab 替换为<INDENT>
  • 如果下一行同样缩进
    • 就不添加<INDENT>
  • 如果下一行在上一行的基础上添加缩进
    • 就在流中添加<INDENT>
    • 一行最多一个<INDENT>
  • 如果下一行减少缩进
    • 就根据减少缩进的数量
    • 在流中添加相应的<DEDENT>
    • 一行可能有多个<DEDENT>
  • 下图中
    • 左边是流中插入的文本
    • 右边是堆栈中的状态

图片描述

过程

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

图片描述

领先

  • 我觉得缩进方面
  • python 还是明显领先于其他语言的

图片描述

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

流程图

图片描述

  • 我们按照这个流程图编程
  • 可以有如下的程序

图片描述

  • 这个样子就是嵌套的程序
  • 再来一个例子

bmi

图片描述

图片描述

编写代码

图片描述

  • 编写的代码是这样的
  • 逻辑结构如图

图片描述

  • 嵌套条件结构就是一层层的 if 进行嵌套
  • 目前两层
  • 可以有很多很多层

二分法 dichotomy

  • 二分法
    • dichotomy [daɪˈkɒtəmi]
    • dicho-
      • 来自di-的希腊语形式
    • -tomy
      • 砍,切
      • 词源同atom, anatomy
      • 即切成两半的

图片描述

  • 拼音文字
    • 善于分析

多层嵌套

图片描述

  • 而且实际情况是多个用户基于不同角色的各种选择
  • 可能性很多
  • 都要准备好

多个角色

  • 多重角色的选择构成了我们的各种流程

图片描述

  • 我们的生活中面对各种各样的选择

总结

  • 这次看了条件语言的嵌套
  • 条件语句下面还可以有条件语句
  • 缩进结构既是样式也是逻辑关系
  • 嵌套可以有很多很多层
  • 可以把嵌套语句的层数降低么???🤔
  • 下次再说 👋