Skip to content

Latest commit

 

History

History
284 lines (200 loc) · 7.26 KB

142-203381-[趣味拓展]逻辑与_and.sy.md

File metadata and controls

284 lines (200 loc) · 7.26 KB
show version enable_checker
step
1.0
true

逻辑与 and

回忆

  • 这次完成了综合案例 - 猜丁壳
  • 猜丁壳中有两个变量
    • 你的选择
    • 电脑的选择
  • 这样就构成了嵌套的条件结构
  • 一般来说这种条件结构无法转化为多分支
  • 是不是绝对无法转化为多分支呢???🤔

世事无绝对

  • 要说绝对的事情很难成立
  • 毕竟道可道,非恒道
  • 物理学框架都没法做到绝对正确
  • 可具体怎么转化为多分支呢?
  • 我们先去趟游乐场

图片描述

布尔运算

图片描述

  • 我们可以用一种逻辑运算
    • 逻辑与是一个运算符
    • 叫做 and
  • 去帮助手册查一下 and 的一手资料

and 逻辑与

图片描述

  • 布尔运算其实有三种
    • 逻辑与 and
    • 逻辑或 or
    • 逻辑非 not
  • not 我们见过了
  • and 其实就是两个 bool 型变量的运算
  • bool 型变量总共就两个
    • True
    • False
  • 我们遍历一下

逻辑与 and 的真值表

图片描述

  • 全都得是真的
  • 这个结果才能是真的
  • 从汇编上如何理解?

指令层面

图片描述

  • 第8行
    • 如果为假
    • 直接短路并返回False
  • 第12行
    • 如果为真
    • 靠的是调用函数完成的逻辑运算
  • 为什么有这种逻辑运算呢?

逻辑来源

图片描述

  • 这种逻辑来源于电路
  • 两个开关量
  • 必须都为 True
  • 整个电路才连通起来

图片描述

  • 只连一个不行
  • 生活中这种例子也常见

有首歌

图片描述

  • 如果你快乐并且感到快乐
  • 那就拍拍手
  • 不快乐不拍
  • 感受不到不拍
  • 都有的时候才拍
  • 一个巴掌拍不响
  • 就和搞对象一样

搞对象

图片描述

  • 比如说俩人搞对象 谈恋爱
  • 必须俩人都认为是谈恋爱 才算是谈恋爱
  • 否则的话 只有一个人认为是谈恋爱
  • 那算是什么
  • 算是追求吧。。。应该是
  • 那什么能追
  • 什么人能追呢?

追求

图片描述

  • 一般来讲有这么两个条件
    • 相同物种
    • 单身的异性
  • 这两条最好都为 True
  • 追求才比较合理

图片描述

  • 最好两条都满足
  • 就像声控灯似的
  • 也要满足两个条件
  • 满足哪两个条件呢?

声控灯

图片描述

  • 光敏开关得满足条件
  • 声控开关也满足条件
  • 得都满足条件
  • 有一个不满足
  • 就不行
  • 有一个不满足就不亮
  • 差一个都不行

图片描述

  • 用户名密码都有都对才行
  • 差一点都不对

旅游

图片描述

  • 大巴得人都上来了
  • 才能开
  • 不能说来一个人就开

图片描述

  • 5v5 得都准备好才开
  • 你说我等不急了
  • 谁先进去谁先开
  • 那不行

地铁

图片描述

  • 地铁人多的时候
  • 什么时候开车
  • 得门都关好之后上车
  • 你说有个门也不知道关门关好
  • 强行开车?

惨剧

图片描述

  • 那就很可能出危险
  • 总之逻辑与就是要保证
  • 条件都满足
  • 猜丁壳的代码怎么改呢?

修改代码

图片描述

  • 确实可以变成多分支
  • 可是原来的嵌套和现在的多分支哪个效率高呢?

比较

比较项目 原来的嵌套条件 现在的多分支条件
if 判断次数 7 9
比较运算符使用次数 7 18
逻辑运算符使用次数 0 9
  • 可以肯定原来的嵌套条件比这个多分支条件效率高得多
  • 是不是嵌套条件就一定比多分支条件效率高呢?
  • 一定、绝对这类词汇太绝对
  • and 左右两边操作数是不是绝对是 bool 型的呢?
  • 绝对不要说绝对啊
  • 试试才知道

数字 and

图片描述

  • 如果有 0 就返回 0
  • 如果都不是零
  • 就返回后面的
  • 最终结果是可以通过 bool 转化的

图片描述

  • 字符串如何呢?

字符串 and

图片描述

  • 有空串返回空串
  • 没空串返回后面的
  • 判断的是是不是空串

图片描述

  • 还有什么数据类型呢?

容器 and

图片描述

图片描述

  • 有空容器返回空容器
  • 没有空容器返回后面的
  • 如果是两个不同类型的空容器呢?

容器

图片描述

  • 其实返回什么空容器不是很重要
  • 各种空容器对应的布尔值是相同的
  • 逻辑判断可能是个复杂运算

拒绝猜测

  • 逻辑运算也像四则运算一样
    • 可以连续计算

图片描述

  • 上图中第二种表述加了括号
    • 逻辑含义更明确
  • 符合禅意
    • In the face of ambiguity, refuse the temptation to guess.
    • 面对不明确的语义时,拒绝猜测
  • 不过这样是否会增加指令呢?

效率验证

图片描述

  • 👆🏻没加括号
  • 👇🏻加了括号

图片描述

  • 不影响程序的效率
  • 可以放心加括号了!
  • 越明确清晰越好
  • 拒绝猜测

总结

  • 这次学习了 and
  • and 是一个逻辑与运算符
  • 都是 True 的时候才返回 True 其余都返回 False
  • 这个运算符变量可以有数字、字符串、容器之类的
  • 逻辑还是零、空串、空容器对应 False
  • 一旦出现 False
  • 就返回逻辑值 False 对应的变量
  • 这样可以对于数字范围进行多重限制
  • 不但让他处于一个合理的区间范围
  • 可以么???🤔
  • 下次再说 👋