Преобразование из десятичного в двоичное без использования bin () без печати - PullRequest
0 голосов
/ 12 октября 2018

Я попытался создать алгоритм, который печатает двоичное значение числа, но по какой-то причине он выходит вместо печати. ​​

exponent = 4
binary = ""
def decToBin(userInput):
    global exponent, binary
    while (2**exponent) == 0:
        if (2**exponent) <= userInput:
            userInput = userInput - (2**exponent)
            binary = binary + "1"
        else:
            binary = binary + "0"
        exponent = exponent - 1
    return binary
print(decToBin(16))

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Вам нужно изменить while (2**exponent) == 0 на while exponent >= 0, иначе вы никогда не попадете внутрь или снаружи цикла while, потому что 2**exponent всегда> 0, несмотря на уменьшение exponent на каждой итерации.Также нет необходимости в global exponent, binary;просто поместите их в функцию.

Обратите внимание, что при выборе exponent = 4 значение userInput должно быть ограничено диапазоном [0, 2 ** (экспонента + 1) - 1] = [0, 31].

Вот альтернативный алгоритм (при условии, что userInput является положительным целым числом):

def decToBin(userInput):
    if userInput == 0:
        return '0'
    binary = ''   
    while userInput > 0:
        binary = str(userInput % 2) + binary
        userInput //= 2
    return binary
0 голосов
/ 12 октября 2018

Зачем это нужно делать?

Вы начинаете с userInput из 16 и exponent из 4.2**4 == 16.16 is! = 0, поэтому ваш while 2**exponent == 0 никогда не срабатывает и никогда не входит в свой блок ...

Вам нужно

while exponent > 0: 

, чтобы получить ваш результат.Вы уменьшаете показатель степени в каждом цикле, поэтому, как только он пересекает 0 в отрицательный, вы закончите - не один раз 2 ** показатель делает что-то.

...