Измените строку 22,
n = n / 2
на
n = n // 2
Это решает немедленную ошибку, которую вы получаете (и еще одну, вытекающую из нее).Остальная часть рутины может или не может работать для ваших целей;Я больше не проверял.
Вы получаете ошибку подтверждения, потому что функция convert_to_bits
должна теоретически возвращать правильный список значений одного бита для действительногоцелое число в его диапазоне.Он рассчитывает этот список путем деления целого числа на 2 до тех пор, пока не останется 0.
Однако.
Одним из наиболее значительных изменений с Python 2.7 до 3.x было поведение оператора деления .До этого всегда возвращалось целое число, но в 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]
, вы можете видеть, что это цикл деления на два, который продолжает делить до его ввода наконец истекает с точностью с плавающей запятой и прекращает деление дальше.
Полученный массив не только намного больше, чем ожидают следующие подпрограммы, его данные также неверны тип .Значения в этом списке используются в качестве индекса для кортежа BITS
в верхней части вашего кода.С делением с плавающей запятой вы получаете ошибку при попытке использовать значение в качестве индекса, даже если это раунд 0.0
или 1.0
.Целочисленное деление, опять же, исправляет это.