Skip to content

Latest commit

 

History

History
325 lines (252 loc) · 8.23 KB

147-203409-[趣味拓展]数字区间范围_range.sy.md

File metadata and controls

325 lines (252 loc) · 8.23 KB
show version enable_checker
step
1.0
true

比较运算符

回忆

  • 上次研究了 限号规则 真的太复杂啦
  • 你还见过什么复杂的规则吗?
  • 可以做成python程序吗?
  • 生活中很多数值都是天然有范围限制的
  • 对于这些数值 应该如何判断呢?

合理范围

  • 人类的身高体重大致是有个合理范围的
  • 再高也没见过 4 米以上的
  • 再低也没见过 0.2 米的以下的
  • 相差在 10 倍以内
  • 属于一个数量级
  • 比恒星质量的差距小得多

图片描述

  • 生命的发展
  • 有其自身的规律

发展

图片描述

  • 这是客观的的规律
  • 发展的过程
  • 不光是人类个体身高
  • Python 的版本演化也有自身的节奏

python 节奏

  • Implementation started - December, 1989
  • Internal releases at Centrum Wiskunde & Informatica, 1990
  • 0 年代
    • Python 0.9.0 - February 20, 1991
    • Python 0.9.1 - February, 1991
      • Python 0.9.2 - Autumn, 1991
    • Python 0.9.4 - December 24, 1991
    • Python 0.9.5 - January 2, 1992
    • Python 0.9.6 - April 6, 1992
    • Python 0.9.8 - January 9, 1993
    • Python 0.9.9 - July 29, 1993
  • 1 年代
    • Python 1.0 - January 1994
    • Python 1.2 - April 10, 1995
    • Python 1.3 - October 12, 1995
    • Python 1.4 - October 25, 1996
    • Python 1.5 - December 31, 1997
    • Python 1.6 - September 5, 2000
  • 2 年代
    • Python 2.0 - October 16, 2000
    • Python 2.1 - April 15, 2001
    • Python 2.2 - December 21, 2001
    • Python 2.3 - July 29, 2003
    • Python 2.4 - November 30, 2004
    • Python 2.5 - September 19, 2006
    • Python 2.6 - October 1, 2008
    • Python 2.7 - July 3, 2010
  • 3 年代
    • Python 3.0 - December 3, 2008
    • Python 3.1 - June 27, 2009
    • Python 3.2 - February 20, 2011
    • Python 3.3 - September 29, 2012
    • Python 3.4 - March 16, 2014
    • Python 3.5 - September 13, 2015
    • Python 3.6 - December 23, 2016
    • Python 3.7 - June 27, 2018
    • Python 3.8 - October 14, 2019
    • Python 3.9 - October 7, 2020

规律

  • 初期的时候,变化剧烈,迅速
  • 后期,相对稳定,缓慢
  • 创新减少,稳定提升

图片描述

  • 3 之后进入了稳定期
  • 人们提交各种请求希望进化 python
  • 但是都希望只添加自己需要的特性
  • 其他的不要动
  • 新版本迭代的时间
  • 在 18 个月到 24 个月之间
    • 太短了,更新频繁,跟不上
    • 太长了,新特性没有了实效性
  • 都是在一个范围内
  • 具体到生命的各种指标也是

体检

图片描述

  • 各种数据都有个大致的参考范围
    • 太高了
    • 或者太低了
    • 都不好
  • 在正常范围内比较健康

bmi

  • 其实各种数据都有一个大致范围
  • 比如 bmi

图片描述

图片描述

  • 如果我只想判断他是否属于 Normal range
  • 应该如何

代码

height = float(input("height(m):"))
weight = float(input("weight(kg):"))
bmi = weight / (height*height)
if (18.5 < bmi) and (bmi < 24.9):
	print("healthy!")

图片描述

  • 前后两个比较结果是布尔类型变量
  • 进行逻辑与运算
  • 得到结果作为 if 的条件
  • 这个代码其实可以改写得更明确

图片描述

范围

图片描述

  • 这样就可以确认 bmi 在(18.5,24.9)这个区间里面
  • 非常明确
  • 当然也可以有闭区间比如[18.5,24.9]
    • 通过 >= 、<= 实现
  • 这些在手册上写了么?

手册

图片描述

  • 以下两个是等价的
    • x < y <= z
    • x < y and y <= z
  • 如果 y 是表达式
  • y 只被计算一次
  • 如果 x < y 是假的
  • 那么 y <= z 就不被计算了
  • 其实很多东西都在一个区间范围内

宇宙速度

图片描述

  • 太大了不行
  • 太小了也不行
  • 想要满足一定的要求
  • 大致应该在一定的区间
  • 万事万物其实道理都是一致的
  • 比如做饭也是这样

火候

  • 中餐做饭讲究火候
    • 火是火的文武
    • 候是时间短长
    • 都很有讲究
    • 这两个是要配合起来的
  • 先说火
    • 分为旺火、文火
    • 爆炒煎炸讲究外焦里嫩
    • 火就要旺
    • 讲究又脆又嫩

图片描述

  • 文火也有文火的用处
    • 比如慢炖煲粥熬汤
    • 虽然微弱单慢慢持续
    • 煨到酥烂脱骨

图片描述

  • 这些虽然不像宇宙速度那么精密
    • 但是也是要用心才能掌握的
    • 光看菜谱不行
    • 要反复地失败才能掌握
    • 是经验的总结
    • 蒸米饭为什么要搁一指的水
    • 怎么样才能真正把米饭蒸得好吃
    • 是很讲究火候的
  • 包括搞对象其实也讲究个火候

搞对象

  • 古话说来得早不如来得巧
  • 巧指的就是不早不晚
  • 时机把握的其实是一个时间窗口
  • 在合适的时间出现
  • 用合适的步伐同行
  • 目的地也是同一个方向
  • 很难不走到一起

图片描述

  • 不光要努力实践
  • 也要掌握理论知识
  • 就像学 python 一样
  • 我们回过头看看
  • python 手册还说了什么?

继续

图片描述

  • 好家伙
  • 赶紧试试

图片描述

  • 真的可以
  • 看起来是把 4 个比较运算符的结果做了逻辑与 and 运算
  • 手册还说了什么

手册

图片描述

  • 不光是一个方向
  • 另一个方向也可以

图片描述

  • 甚至 1<5>2<4>3 也会输出 true
    • 看来这种只要相邻两个大小没比错就会输出 true
  • 同样的内容有两种方式表示
    • 直接把不等式连起来
    • 用 and 把不等式连起来
  • 哪种方式好呢?

选择

  • 既然他们的逻辑上是等价的
  • 那么就要看哪种方式更可读
  • 我觉得连成一个条件的情况下
  • 可读性更好
  • 所以要使用连在一起的方式

图片描述

  • Readability counts
    • 可读性很重要
  • 我们可以优化代码

原始代码

ch = input("please input one character:")
if ord('a')<=ord(ch) and ord(ch)<=ord('z'):
    print("lower")
if ord('A')<=ord(ch) and ord(ch)<=ord('Z'):
    print("upper")
if ord('0')<=ord(ch) and ord(ch)<=ord('9'):
    print("number")
  • 这个程序可以判断输入字符是什么类型
  • 显然 and 的形式,可以从写法上优化一下

更新后的代码

ch = input("please input one character:")
if ord('a') <= ord(ch) <= ord('z'):
    print("lower")
if ord('A') <= ord(ch) <= ord('Z'):
    print("upper")
if ord('0') <= ord(ch) <= ord('9'):
    print("number")
  • 这样子还可以再优化么?
  • 其实没有必要使用 ord 序号函数的吧?
  • 去掉试试

再优化

ch = input("please input one character:")
if 'a' <= ch <= 'z':
    print("lower")
if 'A' <= ch <= 'Z':
    print("upper")
if '0' <= ch <= '9':
    print("number")
  • 既优化了写法
  • 又优化了效率
  • 这就是最终的代码么?
  • 其实还是可以进行一些容错处理
    • 要确保输入的确实是一个字符

总结

  • 这次学习了多个比较运算符的拼合
  • 多个比较运算符就像是分别运算
  • 最后再取逻辑与 and 运算
  • 除了逻辑与之外还有什么逻辑运算符么?
  • 还有逻辑非啊
  • 那除了逻辑非呢???🤔
  • 下次再说 👋