gpt4 book ai didi

python - 使用 ord 函数 (ord(B[0]) - ord ('0' ))

转载 作者:太空宇宙 更新时间:2023-11-04 01:20:07 25 4
gpt4 key购买 nike

我最近开始学习 Python。我正在阅读 Mark Lutz 第 4 版。在一本书中,我看到了该代码(如下)。这段代码中发生了什么?我不理解第 4 行。你能解释一下吗?抱歉我的英语不好。

B = '1101'
I = 0
while B != '':
I = I * 2 + (ord(B[0]) - ord('0'))
B = B[1:]
print(I)

最佳答案

此算法将二进制数转换为其十进制表示形式。二进制数 1011 等于 11,因为:

1      0      1      1
^ ^ ^ ^
2^3 + 0 + 2^1 + 2^0 = 11

因此,计算是通过将 I 乘以 2(二进制向左移动)并加上 0 或 1 来完成的。

1    ->   1
11 -> 1 * 2 + 1 = 3
011 -> 3 * 2 + 0 = 6
1011 -> 6 * 2 + 1 = 11

ord 在这里不是很有用:它返回单字符字符串的整数序号。但是,如果字符串为“1”,我们需要 1;如果字符串为 0,我们需要 0。因此,使用 int(B[0]) 会更好。

>>> ord("1") - ord("0")
1
>>> ord("0") - ord("0")
0

奖励:一种更 Pythonic 的方式

如果您喜欢 Python、列表理解和 sum 函数,这里是所提供算法的单行代码:

>>> sum(2**i for i, x in enumerate(reversed(B)) if x == '1')
11

但是,最好的解决方案仍然是使用 int 内置方法:

>>> int(B, base=2)
11

关于python - 使用 ord 函数 (ord(B[0]) - ord ('0' )),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21804437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com