Как перевести десятичное число в двоичное python
Перейти к содержимому

Как перевести десятичное число в двоичное python

  • автор:

Как перевести десятичное число в двоичное на python?

Хочу написать алгоритм по переводу числа из десятичной сс в двоичную, но столкнулся с проблемой — код ниже заходит в бесконечный цикл. Если помните, нужно делить число на 2. Весь алгоритм писать не нужно, опишите проблему и её решение кода ниже

a = int(input()) x = [] integer = [] result = [] x = list(str(a))[::-1] while True: if a != 1 and a != 0: if a % 2 == 0: result.append(0) a = a / 2 elif a % 2 == 1: result.append(1) a = a / 2 else: False 

Отслеживать
задан 26 сен 2020 в 19:44
5 1 1 серебряный знак 4 4 бронзовых знака

Код с else: False ничего не делает. Если вы хотели выйти из цикла нужно вызывать break . А так, для получения числа в двоичной форме можно использовать встроенную функцию bin

26 сен 2020 в 20:12
26 сен 2020 в 20:27

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

вы просто написали много ненужного кода

a = int(input()) result = [] while a: result.append(a % 2) a //= 2 result.reverse() print(result) 

Отслеживать
ответ дан 26 сен 2020 в 20:01
16.4k 2 2 золотых знака 15 15 серебряных знаков 24 24 бронзовых знака

код ниже заходит в бесконечный цикл

else: False 

Данный код не завершает цикл, а просто вызывает значение False. Чтобы завершить цикл нужно либо использовать оператор break, либо в условии использовать переменную и заменить её значение на False для прекращения работы цикла.

1 способ завершения цикла **

a = True while a: # пока a is True if False: pass else: a = False 
While True: If False: pass # пропустить else: break # завершение цикла 

Также a = a / 2 будет возвращать дробное значение и условие a == 1 или a == 0 никогда не выполнится.

Вот работающий код:

a = int(input()) x = [] integer = [] result = [] x = list(str(a))[::-1] while True: if a != 0: if a % 2 == 0: result.append(0) a = a // 2 elif a % 2: result.append(1) a = a // 2 else: result.reverse() print(result) break 

Перевод из десятичной системы счисления в двоичную

Заметим, что в языке Python есть встроенная функция bin , которая переводит десятичное число в двоичную систему счисления.

>>> bin(5) '0b101' >>> bin(10) '0b1010'

Здесь же рассматривается алгоритм такого перевода и его реализация на Python.

Обычно десятичное число преобразуют к двоичному представлению путем нахождения остатков от деления на 2. При этом полученное на предыдущем шаге частное выступает в качестве делимого на следующем шаге. Деление заканчивается, когда делимое обращается в ноль. Остатки собираются в двоичное число начиная с конца, то есть последний остаток будет первой цифрой двоичного числа. Например, надо перевести число 8 в двоичную систему:

  • 8 / 2 = 4, остаток 0
  • 4 / 2 = 2, остаток 0
  • 2 / 2 = 1, остаток 0
  • 1 / 2 = 0, остаток 1
  • 0 — конец деления
  • Сборка: 10002

При реализации данного алгоритма с помощью языка программирования надо организовать хранение остатков. Сделать это можно в переменной строкового типа или в списке. В случае строки каждый новый остаток следует добавлять в начало.

n = int(input()) b = '' while n > 0: b = str(n % 2) + b n = n // 2 print(b)
8 1000

Пример решения задачи с использованием списка и без преобразования цифр двоичного числа в строковый тип:

n = int(input()) b = [] while n > 0: b.append(n % 2) n //= 2 b.reverse() for i in b: print(i, end='') print()

Метод reverse списка изменяет последовательность элементов на обратную.

X Скрыть Наверх

Решение задач на Python

Перевод числа из десятичного в двоичное

За­да­ча про пе­ре­вод чис­ла из де­ся­тич­ной си­сте­мы счис­ле­ния в дво­ич­ную — клас­си­ка. Ал­го­ритм сле­ду­ю­щий. За­дан­ное чис­ло де­лит­ся на два (ос­но­ва­ние дво­ич­ной си­сте­мы). В од­ну пе­ре­мен­ную за­пи­сы­ва­ем ре­зуль­тат де­ле­ния, а в дру­гую – оста­ток. Ес­ли остат­ка нет, то за­пи­сы­ва­ем ноль. Ес­ли ре­зуль­тат де­ле­ния не ра­вен ну­лю, то он сно­ва де­лит­ся на два. Пе­ре­мен­ная, в ко­то­рой со­хра­ня­ет­ся ре­зуль­тат де­ле­ния, за­ме­ня­ет­ся но­вым ре­зуль­та­том де­ле­ния. А оста­ток (пре­об­ра­зо­ван­ный в строч­ный тип) с по­мо­щью кон­ка­те­на­ции до­бав­ля­ет­ся в на­ча­ло строч­ной пе­ре­мен­ной, в ко­то­рой хра­нят­ся остат­ки. Все это по­вто­ря­ет­ся, по­ка ре­зуль­тат де­ле­ния не станет рав­ным ну­лю. Остат­ки от де­ле­ния в об­рат­ном по­ряд­ке и есть дво­ич­ное пред­став­ле­ние де­ся­тич­но­го чис­ла.

Да­но чис­ло 2023 в де­ся­тич­ной си­сте­ме счис­ле­ния. За­пи­сать это чис­ло в дво­ич­ной си­сте­ме.

Де­ся­тич­ное в дво­ич­ное

Код про­грам­мы мож­но ре­дак­ти­ро­вать. Вы мо­же­те впи­сать свое чис­ло вме­сто 2023.

x = 2023 n = «» while x > 0: y = str(x % 2) n = y + n x = int(x / 2) print (n)

Ал­го­ритм пе­ре­во­да мож­но счи­тать клас­си­че­ским.

Перевести число х из десятичной системы счисления в двоичную.

Перевести число х из десятичной системы счисления в двоичную.
Данное число х меньше 256. Ответ представить в виде 8-ми битного числа.

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Перевести число из десятичной системы счисления в двоичную
Перевести число из десятичной системы счисления в двоичную. Аргументы: число в десятичной с.с.;.

Перевести число А с десятичной системы счисления в двоичную
Составить программу, которая переводит число А с десятичной системы счисления в двоичную.

Перевести число из десятичной системы счисления в двоичную
Столкнулся с проблемой: программа, которая должна перевести число из десятичной системы счисления в.

4973 / 3209 / 1125
Регистрация: 21.03.2016
Сообщений: 7,939
97 / 93 / 81
Регистрация: 10.01.2016
Сообщений: 663
Записей в блоге: 13

n = int(input()) print(bin(n))

Регистрация: 30.08.2020
Сообщений: 55
romelegiongis,

x = int(input()) print('0' * (8 - len(str(bin(x))[2:])) + str(bin(x))[2:])

Эксперт функциональных языков программированияЭксперт Python

36829 / 19877 / 4166
Регистрация: 12.02.2012
Сообщений: 33,013
Записей в блоге: 13

pchela_sociofob, SW Developer, незачет. Умение программировать не сводится к запоминанию библиотечных вызовов. Требуется уметь сделать это самостоятельно. Например, так:

1 2 3 4 5 6 7 8 9 10 11 12 13 14
def dec2bin(n): r="" while(n>0): if n%2==1: r="1"+r else: r="0"+r n=n//2 l=len(r) if l8: r=(8-l)*"0"+r return r print(dec2bin(20))

97 / 93 / 81
Регистрация: 10.01.2016
Сообщений: 663
Записей в блоге: 13
Catstail, в реальной работе никто не будет изобретать велосипед, когда он уже есть.

Эксперт функциональных языков программированияЭксперт Python

36829 / 19877 / 4166
Регистрация: 12.02.2012
Сообщений: 33,013
Записей в блоге: 13

SW Developer, в реальной работе — возможно, хотя не факт. Но ведь эти ТС не работают. Кто бы платил за такую «работу». Они учатся.

97 / 93 / 81
Регистрация: 10.01.2016
Сообщений: 663
Записей в блоге: 13
Это не учеба, когда скидывают одно задание без своих наработок.

Эксперт функциональных языков программированияЭксперт Python

36829 / 19877 / 4166
Регистрация: 12.02.2012
Сообщений: 33,013
Записей в блоге: 13

ЦитатаСообщение от SW Developer Посмотреть сообщение

Это не учеба,
— плохая учёба, согласен.
Регистрация: 30.08.2020
Сообщений: 55

Catstail, я пытался написать программу наиболее коротким способом, алгоритм перевода в разные системы счисления мне знаком, но спасибо, что освежили в памяти

Регистрация: 27.11.2020
Сообщений: 2

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
print("Введите число , меньшее 256") n = int(input()) count = 0 # Счетчик значащих цифр k = 0 # Позиция цифры summa = 0 # Итоговое число while (n%10)!=0 : summa = summa + ((n%2)*(10**k)) k = k + 1 count = count + 1 n = n//2 x = 8 - count # Количество незначащих нулей if x >0 : print("0"*x , summa, sep="") else : print (summa)

36 / 51 / 11
Регистрация: 14.01.2021
Сообщений: 406

Catstail , katya1568, зачем так сложно?

1 2 3 4 5 6 7 8 9 10
n = int(input()) base = 2 encoded_n = "" while n > 0: encoded_n = str(n % base) + encoded_n n //= base print(int(encoded_n))

вариант со строкой

1 2 3 4 5 6 7 8 9 10 11
n = int(input()) base = 2 encoded_n = 0 while n > 0: encoded_n = str(n % base) + str(encoded_n) n //= base encoded_n = encoded_n[:-1] print(encoded_n)

вариант с числами
если изменить base от 2 до 9, то будет тоже работать

Эксперт функциональных языков программированияЭксперт Python

36829 / 19877 / 4166
Регистрация: 12.02.2012
Сообщений: 33,013
Записей в блоге: 13

gray621, gray621, а чем твой код так уж проще? Не ощущаю. Мой можно использовать повторно (у меня функция), а твой — нет. Затем:

1 2 3 4 5 6 7 8 9 10 11
n = int(input()) base = 2 encoded_n = 0 # тут emcoded_n - число while n > 0: encoded_n = str(n % base) + str(encoded_n) # а тут - уже строка. Зачем? n //= base encoded_n = encoded_n[:-1] print(encoded_n)

По количеству операций — «так на так», но оформлен код хуже. Теперь берем мой код. Убираем дурацкое требование ведущих нулей впереди, добавляем еще один параметр — основание CC. И получаем вполне универсальную функцию перевода в СС с основанием от 2 до 36:

1 2 3 4 5 6 7 8 9 10
def conv(n,r): digs="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" res="" while(True): res=digs[n%r]+res n//=r if n==0: return res print(conv(255,16))

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *