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

1

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

Например, когда я вхожу 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.")
    
  • 0
    Ваш обратный код всегда, кажется, получает значение «1».
  • 0
    Возможный дубликат Python int в двоичный файл?
Показать ещё 1 комментарий
Теги:
reverse

1 ответ

1

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

Обратите внимание, когда вы программируете циклы. Вы пытаетесь установить значение, которое построено вдоль итераций в конкретной итерации. Когда ваш скрипт вычисляет значение 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)

Если 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)
  • 0
    Большое вам спасибо @Marco! У меня было чувство, что это связано с тем, что результаты цикла не были объединены, но я не мог понять, как это можно сделать. Я только начинаю работать с Python, поэтому мне еще многое предстоит узнать. Это была моя первая попытка написать программу самостоятельно. Очень ценю отзывы!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню