Skip to content

Latest commit

 

History

History
305 lines (219 loc) · 6.99 KB

File metadata and controls

305 lines (219 loc) · 6.99 KB
Error in user YAML: (<unknown>): could not find expected ':' while scanning a simple key at line 3 column 1
---
- oeasy Python 0392
- 这是 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` 
---

乘方运算

回忆

  • 上次深入了整型的细节
    • python 把复杂的逻辑都留给自己
    • 对我们提供一个近乎无限大的整型变量
    • 可以做绝对精确的计算
    • 还不会溢出
    • 很厉害
  • python 还可以用千分位符分割整数和小数
    • 这有利于观察很大的数字
  • 这些很大的数字都怎么来的?
    • 加法和乘法都比较慢
  • 有乘方运算吗??🤪

搜索乘方

  • 什么不会就搜什么

图片描述

具体运算

图片描述

  • 两种方法都可以计算出乘方的值
  • 前面的是底数
  • 后面的是指数

其他进制形式

图片描述

  • 什么时候 计算机可以算 乘方了呢?

莱布尼茨计算器

  • 莱布尼茨的计算器
    • 可以 算 平方

图片描述

  • 但是不能算 3次方

巴贝奇 和 差分机

  • 巴贝奇 发明了
    • 差分机
    • difference engine
  • diff2(x)
    • 这个是 二次微分
    • 具体值为 4
    • 常量 Constant
    • 如果是 n项式 n次微分之后 也得到 常量
  • diff1(x)
    • 这个是 一次微分
    • = 2(x + 1)2 - 3(x + 1) + 2 - 2x2 + 3x -2
    • = 2x2 + 4x + 2 - 3x - 3 + 2 - 2x2 + 3x -2
    • = 4x - 1
  • 当x=0时
    • diff1(0) = -1

图片描述

  • 根据下图计算方法得到n+1

图片描述

  • 当然不止是 2项式

机械计算总结

  • 机器计算能力不断增强
年代 计算器 人物 功能
1642 帕斯卡计算器 帕斯卡 五位 加减法
1671 莱布尼茨计算器 莱布尼茨 16位 加减乘除
1822 差分机 巴贝奇 可计算多项式 精度达到6位小数
  • 为蒸汽朋克 打下基础

图片描述

  • 巨大的数据量 看起来好长
    • 有什么办法简化一下吗?

科学计数法

图片描述

  • 乘方和前后次序有关
  • 301000 和 100030 结果不同
  • 科学计数法表示的类型是浮点型数字
  • 浮点型数字是有范围的
    • 如果超过 $1e308$ 就会报错
  • 科学计数法支持其他进制么?

其他进制

图片描述

  • 这显然是按照整型变量进行计算的
  • 远远超过了传统的计数规则
Value Symbol English standard 中文
1024 Y yotta 尧 yáo
1021 Z zetta 泽 zé
1018 E exa 艾 ài
1015 P peta 拍 pāi
1012 T tera 太 tài
109 G giga 吉 jí
106 M mega 兆 zhào
103 k kilo 千 qiān
102 h hecta 百 bǎi
101 da deca 十 shí
  • 原来只能说不计其数、恒河沙数
  • 现在真的能写出来
  • 还能算
  • 单个科学计数法支持其他进制么

尝试

图片描述

  • 显然不支持
  • 如果非要使用一定要转化之后进行使用
  • 那我可以把最大的浮点型转化为整数,然后计算么?

转成整型

图片描述

  • 服务器愣住了 😵‍💫
    • 乘方 不愧是 累乘 运算
  • 一般来说 数字的极限 在哪儿呢? 不久前 range 的 stop 好像 也有个崩溃问题?

试试

list(range(1, 99999999))
  • 确实 有问题

图片描述

  • 问题是啥?
    • 怎么 也没报Error?

越过边缘

  • 但如果比9个9还多会如何呢?

图片描述

  • 9个9的时候就报
    • 内存错误
    • MemoryError
  • 系统能处理的最大值是多少??

最大的边缘

import sys
sys.maxsize
  • 可以得到最大的正数

图片描述

  • 如果超过这个数会如何呢?

超过边缘

list(range(sys.maxsize))
list(range(sys.maxsize + 1))
  • 结果

图片描述

  • python的解释器
    • 受到 物理限制 的
  • sys.maxsize
    • 这数 哪来的 呢?

最大正数来源

(2 ** (8 * 8)) // 2 -1
sys.maxsize == (2 ** (8 * 8)) // 2 -1
  • 8-byte
    • 共 64-bit
    • 共 2 64 个数字
    • 正负数各一半

图片描述

  • 当然可以用更大的整数计算
    • 因为 python有特殊的处理方式
  • 小结一下各种运算

运算小结

图片描述

优先级

  • 原来的优先级
  • 从左到右计算
  • 先乘除
  • 后加减
  • 有括号的要优先

图片描述

  • 乘方运算优先级高于乘除运算
  • 除了优先级之外
  • 还需要注意类型转化

隐式转化

图片描述

  • 浮点数和整数运算
  • 属于混合类型的运算
  • 其实系统要先把整型转化为浮点型
  • 然后再计算
  • 这个过程我们对我们隐藏
  • 所以也叫隐式转化
  • 有隐式就有显式

显示转化

  • 浮点型和整型运算
  • 默认是把整型隐式转化为浮点型
  • 也可以把浮点型显示转化为整型
    • 用 int() 函数强制显示转化完成

图片描述

  • 明明白白看得见的转化
  • 叫做显示转化
  • 这样就是两个整型变量的加法了
  • 早期的python是没有这么复杂的
  • 早啥情况啊?
  • 先去总结

总结

  • 乘方运算符是**
    • 优先级高于乘除
    • 浮点型和整型都支持
    • 我们学了好多运算符
      • 加法是最基础的运算
      • 减法是加法的逆运算
      • 乘法是累加
      • 除法是乘法的逆运算
      • 乘方是累乘
      • 对数是乘方的逆运算
  • 为什么先乘除后加减?

图片描述

  • 这就得回忆ast树生成的时候
    • 优先级
    • 结合性
  • 一层层的
    • 就像套娃一样

图片描述

  • 具体到py程序 也是一层层的

    • python3 是 zsh上的 应用
    • math 是 python3 里面的包
  • 我想跳出这个层级

    • 在python程序中
      • 直接执行shell中的命令
  • 可以吗?🤔

  • 下次再说 👋


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