Как получить значение ASCII символа

Как мне получить значение ASCII символа как int в Python?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1 114
0
1 423 046
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ты ищешь:

ord()
Ответ принят как подходящий

От здесь:

The function ord() gets the int value of the char. And in case you want to convert back after playing with the number, function chr() does the trick.

>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>

В Python 2 также была функция unichr, возвращающая символ Юникод, порядковый номер которого является аргументом unichr:

>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'

В Python 3 вы можете использовать chr вместо unichr.


ord () - документация Python 3.6.5rc1

ord () - документация Python 2.7.14

какую кодировку в chr использовать?

njzk2 14.12.2011 12:59

@ njzk2: latin1 (что не годится, если ваш исходный байт был закодирован (скажем) cp1251 (кириллица)

John Machin 17.04.2012 08:57

Обратите внимание, что chr также действует как unichr в Python 3. chr(31415) -> '窷'

William 03.04.2013 17:47

@ njzk2: он не использует кодировку символов, он возвращает строку байтов в Python 2. Вы можете интерпретировать его как символ, например, chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й'. В Python 3 (или unichr в Python 2) входной номер интерпретируется как порядковый номер целого числа кодовой точки Unicode: unichr(0x439) == '\u0439' (первые 256 целых чисел имеют такое же сопоставление, что и latin-1: unichr(0xe9) == b'\xe9'.decode('latin-1'), первые 128 - ascii: unichr(0x0a) == b'\x0a'.decode('ascii'), это Юникод, а не Python).

jfs 30.04.2014 06:59

Почему функция называется "ord"?

eLymar 01.08.2018 20:10

@eLymar: это сокращение от «порядковый», имеющее лингвистические корни, аналогичные «порядку», то есть числовое, а не символическое представление символа.

Jacob Krall 16.01.2019 19:30

Обратите внимание, что ord() не дает вам значения ASCII как такового; он дает вам числовое значение символа в любой кодировке, в которой он находится. Поэтому результат ord('ä') может быть 228, если вы используете Latin-1, или он может вызвать TypeError, если вы используете UTF-8. Вместо этого он может даже вернуть кодовую точку Unicode, если вы передадите ей Unicode:

>>> ord(u'あ')
12354

Как узнать, какую кодировку вы используете в той или иной ситуации?

Moustache 15.03.2017 20:08

@Moustache: в Python3 вы будете использовать Unicode из коробки.

tricasse 01.10.2019 12:33

Зависит от тип объекта. Python3 (ул.): по умолчанию unicode. Python3 (байты): str(b'\xc3\x9c', 'ascii') -> повышает UnicodeDecodeError. Python3 (байты): str(b'\xc3\x9c', 'utf-8') -> возвращает Ü. Вы также можете посмотреть пакет шесть.

nosahama 23.04.2020 14:40

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

for ch in mystr:
    code = ord(ch)

или немного быстрее:

for code in map(ord, mystr):

вы конвертируете в собственные типы Python, которые напрямую выполняют итерацию кода. На Python 3 это тривиально:

for code in mystr.encode('ascii'):

а в Python 2.6 / 2.7 он лишь немного сложнее, потому что у него нет объекта bytes в стиле Py3 (bytes - это псевдоним для str, который повторяется по символам), но у них есть bytearray:

# If mystr is definitely str, not unicode
for code in bytearray(mystr):

# If mystr could be either str or unicode
for code in bytearray(mystr, 'ascii'):

При кодировании как типа, который изначально выполняет итерацию по порядковому номеру, преобразование происходит намного быстрее; в локальных тестах как на Py2.7, так и на Py3.5 итерация str для получения его кодов ASCII с использованием map(ord, mystr) начинается примерно в два раза дольше для len 10 str, чем при использовании bytearray(mystr) на Py2 или mystr.encode('ascii') на Py3, и когда str получает дольше, множитель, уплачиваемый за map(ord, mystr), увеличивается до ~ 6.5x-7x.

Единственным недостатком является то, что преобразование происходит сразу, поэтому ваш первый результат может занять немного больше времени, и действительно огромный str будет иметь пропорционально большой временный bytes / bytearray, но если это не вынуждает вас перебрасывать страницы, это не вероятно имеет значение.

Чтобы получить код ASCII символа, вы можете использовать функцию ord().

Вот пример кода:

value = input("Your value here: ")
list=[ord(ch) for ch in value]
print(list)

Выход:

Your value here: qwerty
[113, 119, 101, 114, 116, 121]

Другие вопросы по теме