Я пишу программу для вычисления двоичного числа из целочисленного ввода. Я не могу понять, как изменить выходной код, чтобы показать, каким будет двоичное число. Программа ниже работает, но не выводит биты в правильном порядке.
Например, когда я вхожу 156
, ответ должен быть обратным 00111001
, но я не могу заставить программу выводить это назад, чтобы показать 10011100
.
Это должна быть программа для вычисления двоичного числа из целого числа.
Он должен побудить пользователя ввести целое 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) в цикле. Вы должны конкатенировать все 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)