Перейти к содержимому

Python как перевести букву в двоичный код

  • автор:

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

Заметим, что в языке 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

Python: Кодировка

На самом глубоком уровне компьютер оперирует исключительно цифрами 0 и 1 . Это так называемый двоичный код, а единички и нули называются битами, от «binary digit» — «двоичная цифра».

Обычные, привычные нам числа в десятичной системе исчисления, закодированы с помощью двоичных чисел:

Но как быть с текстом? Компьютер на самом деле не знает ничего о буквах, знаках пунктуации и прочих текстовых символах. Все эти символы так же закодированы числами.

Можно взять английский алфавит и дать каждой букве число, начиная с единицы по порядку:

В этом заключается суть кодировок.

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

  • hello → 8 5 12 12 15
  • 7 15 15 4 → good

Подобные таблицы, в которых сопоставляются буквы и числа, называются кодировками. Кроме букв алфавита, в таблицы кодировок входят знаки препинания и другие полезные символы. Вы наверняка сталкивались с кодировками, например, ASCII или UTF-8.

Разные кодировки содержат разное количество символов. Изначально небольших таблиц вроде ASCII было достаточно для большинства задач. Но в ней только латинские буквы, несколько простых символов вроде % и ? и специальные управляющие символы типа перевода строки.

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

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

Задание

В Python можно «запросить» и вывести на экран любой символ из кодировки ASCII. Для этого используется функция chr() . Например:

print(chr(63)) 

На экран выведется символ с номером 63 — вопросительный знак ? . Таким способом можно выводить любой символ.

Воспользуйтесь таблицей кодов ASCII. В этой таблице нас интересует десятичный код (dec или decimal), которыми кодируются символы.

Используя пример выше и таблицу, выведите на экран (каждый на своей собственной строке) ~ , ^ и % .

(Конечно, можно «обмануть» тесты и просто сделать print(‘~’) и т.д., но так будет совсем неинтересно 🙂

Упражнение не проходит проверку — что делать? ��

Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:

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

В моей среде код работает, а здесь нет ��

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Мой код отличается от решения учителя ��

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

В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

Прочитал урок — ничего не понятно ��

Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.

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

Полезное

Определения

  • Кодировка — набор символов, закодированных с помощью чисел для представления текста в электронном виде.

Python-сообщество

[RSS Feed]

  • Начало
  • » Python для новичков
  • » Бинарный Код в текст

#1 Ноя. 7, 2010 12:35:28

FewG От: Зарегистрирован: 2010-11-07 Сообщения: 19 Репутация: 0 Профиль Отправить e-mail

Бинарный Код в текст

Подскажите, как можно Бинарный Код перевести в текст (Unicode).

#2 Ноя. 7, 2010 12:57:00

regall От: Киев Зарегистрирован: 2008-07-17 Сообщения: 1583 Репутация: 3 Профиль Отправить e-mail

Бинарный Код в текст

Подскажите, как можно Бинарный Код перевести в текст (Unicode).

Что вы имеете в виду под “бинарным кодом”, и где это хранится?
Если это тип bytes — то

>>> us = "This is a строка"
>>> bs = us.encode('utf-8') # Это уже байты
>>> bs
b'This is a \xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xba\xd0\xb0'
>>> bs.decode('utf-8') # И опять строка
'This is a строка'

#3 Ноя. 7, 2010 12:59:47

FewG От: Зарегистрирован: 2010-11-07 Сообщения: 19 Репутация: 0 Профиль Отправить e-mail

Бинарный Код в текст

Я про перевод бинарного кода (к примеру: 00101010 00101110 00101010 (т.е. Блоков по 8 бит))в текст *.*

#4 Ноя. 7, 2010 13:04:22

regall От: Киев Зарегистрирован: 2008-07-17 Сообщения: 1583 Репутация: 3 Профиль Отправить e-mail

Бинарный Код в текст

FewG
Я про перевод бинарного кода (к примеру: 00101010 00101110 00101010 (т.е. Блоков по 8 бит))в текст *.*

В какой форме хранятся исходные данные?

#5 Ноя. 7, 2010 13:13:07

FewG От: Зарегистрирован: 2010-11-07 Сообщения: 19 Репутация: 0 Профиль Отправить e-mail

Бинарный Код в текст

ммм, ни в какой; Пользователь вводит код в ручную, далее этот код должен быть переведен (переконвертирован) в текст. Я новичек, даже не знаю как точно описать всё это.

#6 Ноя. 7, 2010 15:07:56

pill От: Зарегистрирован: 2010-08-27 Сообщения: 223 Репутация: 0 Профиль Отправить e-mail

Бинарный Код в текст

FewG
ммм, ни в какой; Пользователь вводит код в ручную, далее этот код должен быть переведен (переконвертирован) в текст. Я новичек, даже не знаю как точно описать всё это.

Насколько я понимаю int в ascii требуеться.

как то так можно.
Ток разбивку нужно будет добавить чтоб не по одному байту вбивать.

bin_str = raw_input("Please enter a binary number ")
#Конвертим введенную Строку вида (1001010) в intRJydthnbv
num = int(bin_str, 2)
#Конвертим в int в char
char_ascii = chr(num)
print char_ascii

#7 Ноя. 7, 2010 15:19:07

regall От: Киев Зарегистрирован: 2008-07-17 Сообщения: 1583 Репутация: 3 Профиль Отправить e-mail

Бинарный Код в текст

FewG
ммм, ни в какой; Пользователь вводит код в ручную, далее этот код должен быть переведен (переконвертирован) в текст. Я новичек, даже не знаю как точно описать всё это.

Ну, с этим разобрались. Код вводится с клавиатуры, то есть исходными данными является строка. Я полагаю вам нужно превратить этот код в символы в некоторой кодировки.
Тогда примерно так:

>>> result = ''
>>> input_string = input('Enter binary code: ')
Enter binary code: 101011 11001 10101
>>> for word in input_string.strip().split(' '):
. number = int(word,2)
. result += chr(number)
.
>>> print(result)
+↓§

Перевод чисел в Python

В данной статье мы рассмотрим встроенные функции языка программирования Python по переводу чисел в различные системы счисления. А так же напишем универсальную функцию по переводу десятичных чисел в другие системы счисления.

Перевод чисел из десятичной системы счисления
Для перевода числа из десятичной системы счисления в двоичную можно воспользоваться оператором bin(). В качестве аргумента нужно передать значение в виде числа, а оператор вернет строку с двоичным числом. У результата также будет префикс 0b, указывающий на основание системы счисления.

number = 123 result = bin(number) print(result)
>'0b1111011'

Для перевода в восьмеричную систему счисления есть оператор oct(). Он также возвращает строку с восьмеричным числом и префиксом 0o.

number = 123 result = oct(number) print(result)
>'0o173'

При переводе в шестнадцатеричную систему счисления воспользуемся оператором hex(). Он вернет строку шестнадцатеричным числом и префиксом 0x

number = 123 result = hex(number) print(result)
>'0x7b'

Если же вам не нужен префикс у результата перевода, то всегда можно взять срез у полученной строки.

print(bin(123)[2:]) print(oct(123)[2:]) print(hex(123)[2:])
>'1111011' >'173' >'7b'

Так же выводить числа в других системах счисления можно используя f-строки и формат вывода. Для этого в строке, через символ : указываем буквы b — для двоичной, o — для восьмеричной и x — для шестнадцатеричной системы счисления.

n = 1984 print(f'Двоичное: ') print(f'Восьмеричное: ') print(f'Шестнадцатеричное: ')
Двоичное: 11111000000 Восьмеричное: 3700 Шестнадцатеричное: 7c0

А теперь напишем универсальную функцию convert_to() по переводу чисел из десятичной системы счисления в систему счисления в любым основанием. Наша функция будет ограничена только наличием символов в переводимой системе счисления.
Данная функция принимает три аргумента, два из которых обязательные. Это десятичное целое число number и основание переводимой системы счисления base. Третий аргумент upper служит для указания регистра вывода строки переведенного числа. По умолчанию он установлен в значение False.

def convert_to(number, base, upper=False): digits = '0123456789abcdefghijklmnopqrstuvwxyz' if base > len(digits): return None result = '' while number > 0: result = digits[number % base] + result number //= base return result.upper() if upper else result

Во второй строке мы задаем переменную digits, содержащую набор символов цифр и букв английского языка. Она нам понадобится для составления символов переведенного числа на основании остатков.
В третьей строке мы проверяем основание переданной системы счисления на его длину. Если основание окажется больше, чем количество символов в нашей строке digits, то мы прекращаем выполнение функции через вызов оператора return и возвращаем None. Это такая своеобразная защита функции от неправильно переданных аргументов. Если мы попробуем перевести число в большую систему счисления по основанию, чем у нас есть символов для его записи, то мы его не сможем записать.
Дальше заведем переменную result для хранения результата работы функции и зададим ей значение в виде пустой строки. Теперь с помощью цикла с условием будем находить остаток от деления числа number на основание base, а также уменьшать number в base раз используя целочисленное деление.
Остаток от деления числа на основание переводимой системы счисления мы будем использовать как индекс для получения символа в строке digits и добавлять его к результату result. Добавлять это значение следует слева, т.к. самый первый остаток является самым правым разрядом. Цикл выполняется до тех пор, пока исходное значение переменной number больше нуля.
После завершения цикла мы вернем результат через вызов return. Для этого воспользуемся тернарным оператором и проверим наш третий аргумент. Если он будет в значении True, то для строки result вызовем строкой метод .upper() который заменит все прописные символы английского языка на строчные. Иначе, вернем результат как есть.

А теперь проверим работу нашей функции. Для этого попробуем перевести числа в , , 16ю, 32ю и 64ю системы счисления. Для перевода в 32ю систему счисления мы укажем третий необязательный аргумент upper и зададим ему значение True.

print(convert_to(123, 2)) print(convert_to(123, 8)) print(convert_to(123, 16)) print(convert_to(123, 32, upper=True)) print(convert_to(123, 64))
>'1111011' >'173' >'7b' >'3R' >None

Перевод чисел в десятичную систему счисления
Для обратного перевода в десятичную систему счисления мы будем использовать оператор int(). Для этого передадим ему два аргумента, первый — это строка с числом в какой-то системе счисления, а второй — это основание системы счисления самого числа. По умолчанию для этого необязательного аргумента стоит значение равное 10.
В качестве самого числа нужно обязательно передать строку. Строка может содержать или само число или число с префиксом системы счисления.
Для перевода из двоичной системы счисления:

number = '11001' result = int(number, 2) print(result)
number = '0b11001' result = int(number, 2) print(result)

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

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

https://kapelnicza.vyvod-iz-zapoya-na-domu-voronezh.ru/