【发布时间】:2022-01-19 01:13:04
【问题描述】:
我是 Python 新手,正在学习编码/编码、unicode、ascii 等。 我想根据它们的代码并使用 chr() 函数打印 ASCII 字符。
def table_ascii():
"procédure imprimant une table des caractères ascii avec leur valeurs"
i = 127
while i < 258:
print(f"{i} -> {chr(i)}")
i += 1
table_ascii()
不幸的是,结果是错误的。它在代码 157 处停止:
127 ->
128 ->
129 ->
130 ->
131 ->
132 ->
133 ->
134 ->
135 ->
136 ->
137 ->
138 ->
139 ->
140 ->
142 ->
143 ->
144 ->
146 ->
147 ->
148 ->
149 ->
150 ->
151 ->
152 ->
154 ->
155 ->
157 ->
我知道这些代码返回空白,但为什么它们会停止该过程?
设置:
- Python 3.8.10(默认,2021 年 9 月 28 日,16:10:42) [GCC 9.3.0] 在 Linux 上
- 使用 VIM - Vi IMproved 8.1
当我在 Visual Studio Code 中运行此代码时,脚本会通过 256 生成输出。但在我的控制台 (Linux Mate) 中,它会阻塞。这对我来说很难理解......
【问题讨论】:
-
你的任务的前提是有缺陷的。 ASCII 仅定义整数值 0-127 的字符。 没有对应于整数 128-160 的 ASCII 字符。将 128-160 解释为字符严格要求使用 ASCII 以外的编码(尽管可能是 ASCII 的超集)。
-
chr返回 Unicode 字符串,并且由于历史原因,没有为代码点 127 到 159 定义(可打印)字符。 -
运行此代码会为我生成 257 的输出
-
另外说明,由于您正在学习,因此您可以在一个范围内循环,而不是手动增加
i,例如for i in range(0, 128)。 -
我在我的机器(Ubuntu 20.4,python 3.9)上确认了相同的效果:在 ipython 中运行代码或作为显示在终端中的脚本,它在 157 处停止。