Я пытаюсь создать функцию, которая принимает значение, представленное в десятичном формате, и преобразует его в значение, представленное двоичным.
Предполагая, что аргумент всегда является целым числом:
import math
def binary_decimal_converter(x):
binary_representation = 0
number = x
while number != 0:
n = 1
while x not in range(n,n*2):
n *= 2
binary_representation += 10**(int(math.log(n,2)))
number -= n
return binary_representation
Проблема:
Если x находится в списке ниже, программа работает нормально.
[1, 2, 4, 8, 16, 32, 64, 128....]
Но если используется любой другой номер, программа застревает в неразрывном цикле.
Почему петля:
while number != 0: #line 24
не может бежать дважды?
Если это не домашнее задание, почему не просто bin(x)[2:]
?
@QuangHoang предположительно, да. Первый раз n = 2
и number -= 2
. Второй раз n = 1
и number -= 1
. Тогда number == 0
@JohnColeman Это домашнее задание.
Вы назначаете number = x
, а затем используете оба:
import math
def binary_decimal_converter(x):
binary_representation = 0
number = x
while number != 0:
n = 1
while x not in range(n,n*2): # CHANGE x TO number
n *= 2
binary_representation += 10**(int(math.log(n,2)))
number -= n
return binary_representation
Если вы измените x
на number
в указанной строке, все заработает. x
не обновляется, number
обновляется.
Может ли
number
быть0
, еслиx=3
?