Программа для вычисления двоичного числа для целого числа - нужна помощь, обращая выходную строку - PullRequest
0 голосов
/ 18 октября 2018

Я пишу программу для вычисления двоичного числа из целочисленного ввода.Я не могу понять, как перевернуть выходной код, чтобы показать, каким будет двоичное число.Программа ниже работает, но не выводит биты в правильном порядке.

Например, когда я ввожу 156, ответ должен быть обратным 00111001, но я не могу заставить программу выводить это в обратном порядке, показывая 10011100.

  1. Это должна быть программа для вычисления двоичного числа из целого числа.
    Она должна предлагать пользователю ввести целое число number = int(input("Enter number: ")) и вычислить двоичное число или выдать предупреждение, если был введен неправильный тип числа.

    if number > 0:
      while number != 0:
        if number % 2 == 0:
            code = "0"
            new_number = number //2
            number = new_number
        else:
            code = "1"
            new_number = number //2
            number = new_number
        reverse_code = code[::-1]
        print(reverse_code, end='') else:
      print ("Invalid Input. System will now self-destruct.")
    

1 Ответ

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

Вы печатаете каждый элемент (1 или 0) в цикле.Вы должны объединить все 1/0 и повернуть вспять в конце.

Обратите внимание при программировании циклов.Вы пытаетесь установить значение, которое строится по итерациям в конкретной итерации.Когда ваш скрипт вычисляет значение code (например, 1), он переворачивает это число и переходит к следующей итерации, повторяя процесс.

Решением будет создание обратной строки на всех итерациях,постепенно.Следующий код определяет пустую строку и объединяет 0 или 1 перед предыдущим результатом.

Пример:

# Initialize reverse_code variable
reverse_code = ""

while number != 0:
    if number % 2 == 0:
        code = "0"
        new_number = number //2
        number = new_number
    else:
        code = "1"
        new_number = number //2
        number = new_number
    reverse_code = code + reverse_code
print(reverse_code)

If number = 10:

1010

Пояснение

Когда цикл while начинает повторяться, он делит число на 2, и мы хотим обратить результат деления на обратный, чтобы получить двоичный код.Вместо вычисления результата мы можем создать результат во время расчета.Для этого мы определяем reverse_code как пустую строку.В каждой итерации мы будем помещать новый элемент (1 или 0) перед строкой, получая обратную строку.

reverse_code значения в итерациях, когда number=10:

Итерация 0: code = 0 reverse_code = code + reverse_code = "0" + "" ="0"

Итерация 1: code = 1 reverse_code = code + reverse_code = "1" + "0" = "10"

....

Итерация N:

code = 1 reverse_code = code + reverse_code = "1" + "010" = "1010"

ДругойВопрос к комментарию - это ваша оптимизация кода.Просмотр вашего кода, если в другом случае, если у вас есть new_number и number присваивание переменных, на которые не влияли предыдущие переменные code.Вы можете извлечь общий фактор и упростить код.Код должен быть следующим:

# Initialize reverse_code variable
reverse_code = ""

while number != 0:

    # Calculate the `code` value
    if number % 2 == 0:
        code = "0"
    else:
        code = "1"

    # Putting this here simplifies duplicate instructions
    new_number = number //2
    number = new_number

    # Putting 0 or 1 (code) before semi-built string (reverse_code) 
    reverse_code = code + reverse_code

print(reverse_code)
...