我需要将单词转换为RSA密码的数字,所以我找到了可以将文本转换为十进制的代码,但是当我在python 3的终端中运行它时,我得到了:
KotlinJsonAdapterFactory
当我在终端中使用“ python convert_text_to_decimal.py”时,它可以正常工作。
代码:
Traceback (most recent call last):
File "test.py", line 49, in <module>
numberOutput = int(bit_list_to_string(string_to_bits(inputString)),2) #1976620216402300889624482718775150
File "test.py", line 31, in string_to_bits
map(chr_to_bit, s)
File "test.py", line 30, in <listcomp>
return [b for group in
File "test.py", line 29, in chr_to_bit
return pad_bits(convert_to_bits(ord(c)), ASCII_BITS)
File "test.py", line 14, in pad_bits
assert len(bits) <= pad
AssertionError
所以当我只使用python时,他的版本是2.7。请帮我将此代码修复为python 3
答案 0 :(得分:1)
更改第22行,
n = n / 2
到
n = n // 2
这解决了您立即遇到的错误(以及随之而来的另一个错误)。例程的其余部分可能无法满足您的目的;我没有再检查了。
您会得到断言错误,因为从理论上讲,函数convert_to_bits
应该为有效整数在其范围内返回正确的单位值列表。它通过将整数除以2直到剩余0来计算此列表。
但是。
从Python 2.7到3.x的更重要的更改之一是division operator的行为。以前,它总是返回一个整数,但是对于Python 3,决定让它返回一个浮点数。
这意味着简单的位计算循环
while n > 0:
result = [(n % 2)] + result
n = n / 2
不再不返回一个由0
和1
组成的稳定列表,由于源整数用完数字而总是结束,但是您得到的列表超过一千个浮点数。乍一看可能不清楚该列表代表什么,但是以
… 1.03125, 0.0625, 0.125, 0.25, 0.5, 1]
您会看到,是除法继续进行的“二分法”循环,直到其输入 finally 超出了浮点精度并且不再进一步除法。
结果数组不仅比下一个例程期望的大得多,而且其数据的类型也不正确。此列表中的值用作代码顶部BITS
元组的索引。使用浮点除法,即使尝试将值用作舍入0.0
或1.0
,也会在尝试将值用作索引时出错。整数除法再次解决了这个问题。