show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
ord(c)
和chr(i)
- 这是俩函数
- 这俩函数是一对
- 相反相成的⚖️
ord
通过字符
找到对应的序号
chr
通过序号
找到对应的字符
字符
的本质是数字序号
- 每个字符都 对应着 一个数字序号
a
对应 97b
对应 98c
对应 99
- 每个字符都 对应着 一个数字序号
- 字母序号连号
- 好像应该是 天经地义 的
- 但为什么 小写a 从
97
开始?
- 除了 小写字母外
- 还有 很多字符
- 都是 如何分布 的呢?🤔
- 还有 很多字符
- a、b、c 都是挨着的
- 26个字母都挨着吗?
- 从a开始
- 到z结束
- 从0到25
- 总共26个字母
- 对应序号
都
是挨着的
- 对应序号
- 总共26个字母
- 26个 英文字母
- 都是挨着的
- 但 为什么是从 97 开始?
- 都是挨着的
- 前面 还有 什么别的字符?
- 低头看一下 键盘
- 除 小写字母 之外
- 大写字母
- 数字
- 符号
- 都加在一起
- 大概有
多少个
呢?
- 大概有
-
总共大概 有100个 字符
- 这些字符 是如何存储呢?
-
这些字符 存储在
字节(byte)
当中- 什么是
字节(byte)
呢?
- 什么是
- 一个
字节(byte)
由 8-bit 构成- 什么是
bit
呢?
- 什么是
- bite 咬
- 咬下来一小片就是bit
- 小量,小块
- 一部分
- bait
- 让鱼咬的东西
- 鱼饵、诱饵
- 让鱼咬的东西
- abet
- 让狗去咬人
- 教唆
- 让狗去咬人
- bitter
- 咬到的味道
- 苦苦的味道
- 咬到的味道
- beetle
- 咬人的小虫子
- 甲壳虫
- 咬人的小虫子
- 每一位(
bit
)是- 一个 二进制(
b
inary) 数字(digit
)
- 一个 二进制(
- 从
8个0
到8个1
相当于- 从
0
到255
- 从
- 每一个字符
都
会- 对应一个序号
- 序号 用二进制的方式
- 存储在 字节(byte)中
- 一个字节(byte)总有8位(bit)
- 存储在 字节(byte)中
-
想要
- 把 一个字节中 所有的字符
- 全都 列举一遍
- 把 一个字节中 所有的字符
-
就先要
- 把 一个字节中
- 所有的数字序号
- 全都 列举一遍
- 所有的数字序号
- 把 一个字节中
- 先键入exit()
- 从游乐场 退回到 战场
-
键入
vi ascii.py
-
按i进入插入模式
- 并开始输入程序
- 这个程序可以运行吗?
-
esc
- 退出插入模式
-
:w|!python3 %
- 保存
- 并 用python3 运行当前程序
- 运行程序有什么结果呢?
- 循环范围 是
- range(2**8)
- 从0开始 到28结束
- 也就是 从0到255
- 也就是
- 从 全零字节(00000000)2进制
- 到 全一字节(11111111)2进制
- 挨个儿 数一遍
- range(2**8)
- 这下 把一个字节内
- 所有的数字
都
挨个数出来了
- 所有的数字
- 如何理解这个程序呢?
-
for循环语句
- 让 n 循环 起来
- 循环范围 是range(2**8)
- 从0到255
- 循环范围 是range(2**8)
- 让 n 循环 起来
-
注意!
- 本句 结尾处 有一个冒号(:)
- 冒号(:) 的意思是
- 循环开始了
- 下面缩进的
- 都是我的循环体
- 第二行
- 是 循环体
- 先用Tab
- 在前面 缩进4个空格
- 每次 都将n进行输出
- end=" "
- 结束符 使用空格
- 结束时 不输出 换行
- 输出 一个空格
- 结束时 不输出 换行
- 结束符 使用空格
- 可以把数字对应的字符输出吗?
- 通过序号 找到 字符
- 靠的是 chr函数
- 按i进入插入模式
- 修改程序
- chr(n)
- 输出n的字符状态
- chr(n)
- 修改程序
- esc从插入模式 切换到 正常模式
- esc 从正常模式 切换到 底行命令模式
- 方向键↑ 找到上一条命令
- :w|!python3 %
- 方向键↑ 找到上一条命令
- esc 从正常模式 切换到 底行命令模式
- 结果呢?
- 效果比较松散
-
可以紧凑一点吗?
-
回车后
- 从 shell 切换回 vim
- 将结束符end
- 设置为啥也没有
- 然后运行
- 确实够紧凑了
- 但是字符堆在一行
- 分不清楚
- 但是字符堆在一行
- 可以尝试换行吗?
- 我想让每行十六个字符
- 然后就换行
- 应该怎么做呢?
- 然后就换行
- 我想让每行十六个字符
- 需要 对n进行判断
- 如果 当前循环中
- n可以被16整除
- 那么 就输出一个回车
- n可以被16整除
- 如果 当前循环中
- 按i进入插入模式
- 然后修改代码
-
后面两行程序
- 是新添加的
-
if n % 16 == 0:
- 如果 n能 被16整除
- print()
- 那么 输出换行
- print()
- 如果 n能 被16整除
- 注意if语句
- 属于循环体的一部分
- 也缩进在 for循环的范围内
- 第2、3、4行 都是
- 第1行 for循环的 循环体
- if语句结尾处
- 要有一个冒号(:)
- 意味着 下面缩进的
- 都是if的条件体
- 意味着 下面缩进的
- 要有一个冒号(:)
- 下一句print()
- 是 if条件语句 的 条件体
- 需要进行更深层的缩进
- 2个tab
- 或者 8个空格
- 结果 如何呢?
- 上面
- 黑了一大片
- 好像黑暗丛林
- 黑了一大片
- 下面
- 字母和数字还是挺完整的
- 而且还挺连续
- 字母和数字还是挺完整的
- 这套 字符和序号 的 对应关系
- 有没有
名字
呢?
- 有没有
- 这套对应关系
- 叫做
ASCII
A
mericanS
tandardC
ode forI
nformationI
nterchange- 美国信息交换标准代码
- 叫做
- 这 建立起了
字符
和序号
的 固定映射关系
- 为什么 要建立
字符
和序号
的固定映射关系 呢? 字符
和序号
的映射关系
- 如果
不
固定 会如何呢?
- 如果
字符
和序号
的对应关系
如果不固定- 面对 同一个序号
- 就会 映射到 不同的字符
- 就会形成 乱码
- 就会 映射到 不同的字符
- 面对 同一个序号
- 这套 ascii标准
- 在 各种计算机系统中 是
统一
的
- 在 各种计算机系统中 是
- 否则
无法
通信
- 这套 ASCII 映射关系 是什么时候
- 开始 有的 呢?
- 1967年
- 就有了最初这个 ASCII 码表🔡
- 低电平表示 0
- 高电平表示 1
- 电子计算机中所有的数据都是 0 和 1
- 就有了最初这个 ASCII 码表🔡
-
先是 由美国国家标准学会 制定
- (American National Standard Institute , ANSI )
- 最早是 美国的 国家标准
- 被称作 美国信息交换标准代码
-
美国之外的国家
- 如何存储基本字符 呢?
- 国际标准化组织
- International Organization for Standardization
- ISO
- ISO 将ASCII定为 国际标准
- 称为 ISO 646 标准
- 最新一次更新 在 1986 年
- 到目前为止 总共定义了 128个字符
- 能否完整、系统地看到
- 整个ascii码表 的 对应关系 呢?
- :q
- 从vim退出
- 回到shell环境
- 从vim退出
sudo apt install ascii
- 下载个ascii程序
- 上面的命令
- 可以安装 ascii这个应用
- 如下图所示
- 可以安装 ascii这个应用
- 每一字符 有三个部分组成
- Dec 对应的是 10 进制数
- Hex 对应的是 16 进制数
- 最后一列 对应的是 具体字符或功能
- 字符包括
- 符号
- 英文大写字母
- 英文小写字母
- 控制字符
- 这样就把
- 各种字符 和 二进制数字
- 对应起来了
- 各种字符 和 二进制数字
-
找到小写的
a
- 这个小写的
a
- 在电脑中存储的时候
- 对应着 一个字节
- 8位 2进制数
- 也就是 8位 (0或者1)
- 这个小写的
-
到底是多少呢?
-
先沿着下图中1的方向
- 向上找到
110
- 这是他的高三位
765
位
- 向上找到
- 再沿着2的方向
- 向左找到
0001
- 这是他的低四位
4321
位- 在前面加一个
0
- 向左找到
- 得到(
01100001
)2进制
- 这次 我们了解了
ASCII
码表ASCII
码表就是A
mericanS
tandardC
ode forI
nformationI
nterchange
- 美国信息交换标准代码
- ASCII 码表范围
48-57
这个范围是数字
65-90
这个范围是大
写字母97-122
这个范围是小
写字母
- 字符
- 在计算机当中
- 是用
二进制
形式存储的
- 是用
- 在计算机当中
- 每个字符
- 都有自己的字符序号
- 字符序号 是一个数字
- 这个数字 用二进制形式 存储在计算机中
- 可以看看 这个数字的
二进制
形态 么?🤔
- 可以看看 这个数字的
- 这个数字 用二进制形式 存储在计算机中
- 我们下次再说👋