Как преобразовать буквы в соответствующие им числовые значения?

Я относительно новичок в питоне. В качестве мини-проекта я создаю программу, которая включает в себя две строки из одного слова и преобразование каждого символа в соответствующее им буквенное значение (например, A = 1, C = 3, Z = 26). Я хочу найти способ сделать это, не присваивая все 26 букв числу в словаре. Кажется, что все алгоритмы, которые я нашел в Интернете, не работают или я их не понимаю.

Я совершенно не понимаю, как это сделать. Я был бы признателен, если бы кто-то мог указать мне в правильном направлении.

Спасибо


person Ayush Tripathi    schedule 20.05.2020    source источник
comment
См. chr и ord   -  person Thierry Lathuille    schedule 20.05.2020


Ответы (6)


Например...

letter = 'c'
print(ord(letter)-96)
person jv95    schedule 20.05.2020

Вы можете использовать встроенную функцию ord для возврата кодовой точки Юникода (в виде целого числа) для любого символа.

>>> ord('A')
65

Вы можете вычесть из этого смещение, если хотите.

>>> offset = ord('A') - 1
>>> ord('A') - offset
1
>>> ord('B') - offset
2
person timgeb    schedule 20.05.2020

Используйте 1_:

A='lksdfj'
for c in A:
    print(c,':',ord(c))

Выход:

l : 108
k : 107
s : 115
d : 100
f : 102
j : 106
person Code Pope    schedule 20.05.2020

Встроенный модуль string предоставляет строки, содержащие алфавит. Вы можете использовать однострочник, чтобы сделать диктовку от буквы к цифре:

import string
letter_to_number = {l:n+1 for (l,n) in zip(string.ascii_uppercase, range(len(string.ascii_uppercase)))}
# {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5, 'F': 6, 'G': 7, 'H': 8, 'I': 9, 'J': 10, 'K': 11, 'L': 12, 'M': 13, 'N': 14, 'O': 15, 'P': 16, 'Q': 17, 'R': 18, 'S': 19, 'T': 20, 'U': 21, 'V': 22, 'W': 23, 'X': 24, 'Y': 25, 'Z': 26}
person Green Cloak Guy    schedule 20.05.2020

Вы можете использовать код ascii. Например:

num = ord(letter1.lower()) - ord('a') + 1

каждый символ представлен числом в коде ascii. Вы можете преобразовать свою букву в код ascii, используя ord, и вычесть из нее код ascii буквы «a». Весь алфавит последователен в таблице ascii. Я добавил .lower(), так как вы должны разделить его на два регистра, если у вас есть верхний или нижний регистр. Полный код будет выглядеть примерно так (учитывая букву в переменной letter1:

if letter`.islower():
   num = ord(letter1) - ord('a') + 1
else:
   num = ord(letter1) - ord('A') + 1

(+1, если вы начинаете считать с 1, а не с 0)

person Roim    schedule 20.05.2020

Здесь:

string = 'hello'
nums = ''

for l in string:
    nums += str(ord(l)-96)+' '

print(nums)

Функция ord() возвращает целое число, представляющее символ Unicode. Например, «а» в символе Unicode — это 96, «b» — 97, а «c» — 98.

person Ann Zen    schedule 20.05.2020
comment
этот ответ будет улучшен с кратким описанием того, что делает ord. - person Woodrow Barlow; 20.05.2020