Skip to content

Latest commit

 

History

History
362 lines (254 loc) · 7.38 KB

File metadata and controls

362 lines (254 loc) · 7.38 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 0282
- 这是 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` 
---

二进制(binary)

回忆上次内容

  • 数制可以转化
  • 十进制可以转化为二进制

图片描述

  • 二进制也可以转化为十进制

图片描述

  • 二进制形式

    • 有的时候有引号
    • 有的时候 没有引号
  • 为什么 bin(97)

    • 不加双引号 了呢???
  • 要给 97

    • 加一个双引号?!😏

类型

  • 报错了!!!❌

图片描述

  • 报的不是 NameError
    • 名字错误
  • 而是 TypeError
    • 类型错误
  • 如何理解这个
    • TypeError呢?

查看帮助

  • 查 bin函数的 帮助手册
    • help(bin)

图片描述

  • bin函数的参数 要求是
    • 是 integer(整数)
    • 而不是 字符串(string)
      • 不能有双引号

类型错误

  • TypeError

    • 类型错误
  • 字符串(str)类型

    • 不能被解释为
      • 整数(integer)

图片描述

  • bin函数
    • 要的参数是
      • 整数97
      • 类型本应为
        • 整数(integer)

图片描述

  • 但是给的参数
    • "97"
      • 类型实际为
        • 字符串(string)
  • 类型(type)不匹配
    • 就报了 TypeError
  • 所以说
    • 类型(type)很重要!!

类型(type)

  • 同样都是把97作为参数
    • 传递给bin函数

图片描述

  • 不带引号的97
    • 是整数类型(type)
    • 是可以转化为 二进制形式字符串的
  • 带引号的97
    • 是字符串类型(type)
      • 会发生 类型错误
      • 就不让往下执行了

再看看 报错

  • 要的是

    • 整数(integer)
  • 给的是

    • 字符串(str)
  • 字符串(str)

    • 能 被解释为整数(int)

图片描述

  • 所以报错了
    • TypeError了
  • 其他函数
    • 有 类型的限制 吗?
  • 记得 ord函数 也有类型要求

ord函数的参数类型

  • 查一下 ord的帮助

图片描述

  • ord的参数 要的是
    • one-character string
    • 单字字符串
      • 需要有引号的
  • 如果 偏给他一个整数(integer)
    • 会如何呢?

图片描述

  • 要的是字符(str)
    • 给的是整数(int)
  • 又报TypeError了

报错

  • 不要害怕报错

  • 报错

    • 是我们努力的见证
    • 而不是我们无能的见证
    • 更是 进步的阶梯
  • 程序员 要做的就是

    • 报错
      • 变成 不报错!
  • ord("a")得到的 结果类型是整数(int)

图片描述

  • 把这个结果
    • 送到bin函数里面
      • 当参数会如何?

嵌套调用

  • 类似于
    • ord(chr(97))
    • chr(ord("a"))
    • 括号内的 要进行运算
#找到a对应的序号的二进制形式
bin(ord("a"))
  • 0b1100001 是二进制数 1100001
    • 0b是 2进制数的 前缀标志

图片描述

  • 0b1100001 是什么类型呢?

查看类型

  • 带引号 是 字符串
  • 不带引号 是 整数

图片描述

  • 不论 二进制 还是 十进制 形态
    • 数字 都是 数字

图片描述

  • 这两种表示方法 是等值的

思考

  • 为什么 ord生成的数字
    • 默认使用十进制呢?

图片描述

  • 计算机里面用的不都是二进制吗?

十进制基础

  • 因为我们日常都用十进制

图片描述

  • 为什么我们日常都用十进制呢?

十进制

  • 默认使用 十进制
    • 是因为我们 有十根手指

图片描述

  • 那计算机
    • 为什么 使用二进制 呢?

计算机

图片描述

  • 计算机只有 两根手指

图片描述

两种状态

  • 就像电路只有
  • 电灯只有

图片描述

  • 电路只有
    • 高电平
    • 低电平
  • 所以 只能用二进制
  • 在计算机中
    • 把十进制数
      • 转化为 二进制字符串形态
    • 展示的时候
      • 再以十进制的形态进行展示

二进制

  • 在打印输出的时候 使用十进制
    • 这符合 我们的生活习惯
    • 因为 我们有 个手指头
  • 但是计算机用的是 进制
    • binary

图片描述

  • 在电脑存储和运算的时候
    • 使用二进制(binary)
    • 一切东西在电脑内 都是用二进制方式存储的
    • 因为计算机里 只有高低电平(0 和 1)
    • 相当于 两个手指头
  • 不管你有几个手指头
    • 同样是数 41 棵树
    • 数出来的数字是不会变的
    • 只是使用不同的表示方式而已
  • 真的么?

二进制十进制转化

  • (41)10 进制 和 (101001)2 进制 是相等的
    • 互相之间可以相互转化
  • 其中的bin
    • 代表 binary 二进制

图片描述

  • 不论用 10 个手指头、还是 2 个手指头
    • 41 个苹果的数量本身不会变
    • 只是计数方法变了

图片描述

  • int(bin(i_age),2)
    • 这是什么意思呢?
  • 先看括号里面
    • bin该如何理解来着?

二进制(binary) 转 十进制(decimal)

  • help(bin)

图片描述

  • bin(41)

图片描述

  • '0b101001'
    • 这是一个二进制形式的字符串
    • 其中 0 明确这是一个数字
    • b 明确这是一个二进制数字

进制转化

  • bin(i_age)

    • 就是将整型变量i_age 转化为 二进制的字符串形态
    • 就是 "0b101001"
  • 再查询int帮助

图片描述

  • int(bin(i_age),2)
    • "0b101001" 从二进制转化十进制

图片描述

二进制 binary字符串 转 十进制整数

  • 用int函数
    • 将二进制的字符串形态
    • 转化为整型数字
int("0b101001", base = 2)
int("101001", base = 2)
int("101001", 2)
  • int的意思是integer
    • 整数

图片描述

  • 这三条其实是等价的
    • "0b..."明确是二进制数字
    • base 是参数的名字
      • 标识着 用的是多少进制

总结

  • 数据类型很重要

    • 参数 必须按照 要求的类型 给出
    • 否则就会出现
      • 类型错误
      • TypeError
  • 目前了解的类型

    • 字符串
      • 'a'、"oeasy"
    • 整数
      • 0、97、0b1101

图片描述

  • 二进制(binary) 和 二(two)
    • 怎么看起来
      • 好像 一点关系都没有呢?🤔
  • 我们下次再说!👋

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