将文本转换为十进制python3

时间:2018-11-13 09:28:04

标签: python-3.x assert

我需要将单词转换为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

1 个答案:

答案 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

不再返回一个由01组成的稳定列表,由于源整数用完数字而总是结束,但是您得到的列表超过一千个浮点数。乍一看可能不清楚该列表代表什么,但是以

结尾
… 1.03125, 0.0625, 0.125, 0.25, 0.5, 1]

您会看到,是除法继续进行的“二分法”循环,直到其输入 finally 超出了浮点精度并且不再进一步除法。

结果数组不仅比下一个例程期望的大得多,而且其数据的类型也不正确。此列表中的值用作代码顶部BITS元组的索引。使用浮点除法,即使尝试将值用作舍入0.01.0,也会在尝试将值用作索引时出错。整数除法再次解决了这个问题。