martinfilikas Ответов: 2

Как преобразовать десятичные числа в двоичные и двоичные в десятичные в Python без операторов bin и int ?


Мне нужно преобразовать десятичные числа в двоичные и двоичные в десятичные, но я все время получаю неправильные ответы. Мне не разрешается использовать bin и другие встроенные операторы в Pycharm, которые могли бы помочь мне преобразовать ответ.

"""Converter."""


def dec_to_binary(dec: int) -> str:
    """
    Convert decimal number into binary.

    :param dec: decimal number to convert
    :return: number in binary
    """
    if dec > 1:
        dec_to_binary(dec // 2)
        print(dec % 2, end='')
        return
def binary_to_dec(binary: str) -> int:
    """
    Convert binary number into decimal.

    :param binary: binary number to convert
    :return: number in decimal
    """
    decimal, i, n = 0, 0, 0
    while (binary != 0):
        dec = binary % 10
        decimal = decimal + dec * pow(2, i)
        binary = binary // 10
        i += 1
    print(decimal)


if __name__ == "__main__":
    print(dec_to_binary(145))  # -> 10010001
    print(dec_to_binary(245))  # -> 11110101
    print(dec_to_binary(255))  # -> 11111111

    print(binary_to_dec("1111"))  # -> 15
    print(binary_to_dec("10101"))  # -> 21
    print(binary_to_dec("10010"))  # -> 18


Что я уже пробовал:

Я пробовал эти коды, но обычно получаю 2 десятичных знака, в конце концов он говорит, например, 100011 и ни одного...

2 Ответов

Рейтинг:
2

Richard MacCutchan

Попробовать следующее. Возможно, вам придется изменить какую-то его часть, чтобы соответствовать вашим собственным критериям, но он делает основы.

def binary_to_dec(binary: str) -> int:
    """
    Uses the ord() builtin to get the numeric value of a character
    Subtracting the ord('0') gets the integer value of the digit
    """
    tot = 0;
    for i in binary[:]:
        num = ord(i) - ord('0')
        tot *= 2
        tot += num
    return tot

def dec_to_binary(dec: int) -> str:
    """
    Adds the ord('0') to 0 or 1 to get the value of the digit
    and uses the chr() builtin to convert back to a character
    """
    bin = ""
    while dec != 0:
        num = (dec & 1) + ord('0')
        bin = chr(num) + bin
        dec >>= 1
    return bin


Рейтинг:
0

Patrice T

Конечно, я могу просто дать вам полное взрывное решение, но я не уверен, что вы чему-то научитесь. Поскольку это очень базовое понимание Python и программирования, я думаю, что лучше дать вам ссылки и ссылку на хороший учебник.

# Because of
    print(dec_to_binary(145))  # -> 10010001
# and
    print(binary_to_dec("1111"))  # -> 15
# you need to define functions with "return values" instead of print the partial result

Прочтите эту страницу и обратите внимание на "возвращаемые значения" и "рекурсию": Функции Python[^]
-----
Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

27.3. ПДБ — отладчика Python — питон 3.6.1 документации[^]
Отладка в Python | Python покоряет Вселенную[^]
pdb – интерактивный отладчик - Python модуль недели[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.