Я хочу присвоить значение каждой букве в алфавите, так, чтобы-> 1, b-> 2, c-> 3... z-> 26. Что-то как функция, которая возвращает значение буквы, например:
value('a') = 1
value('b') = 2
и т.д...
Как я пошел бы о выполнении этого в Python?
Вам нужен родной словарь python.
(и вы, вероятно, также хотите, чтобы ваши значения начинались с "0", а не с "1", так что вы можете не добавлять +1 ко всем вашим отображениям, как показано ниже)
Создайте такой словарь с помощью этого:
import string
values = dict()
for index, letter in enumerate(string.ascii_lowercase):
values[letter] = index + 1
Это даст вам такие вещи, как:
print values["a"]
-> 1
Конечно, вы, вероятно, можете использовать встроенную функцию "ord" и вообще пропустить этот словарь, как в других ответах:
print ord("c") - (ord("a")) + 1
Или в python 3. x или 2.7, вы можете создать словарь за один проход с помощью выражения генератора словаря:
values = {chr(i): i + 1 for i in range(ord("a"), ord("a") + 26)}
Почему бы просто не составить список из каждой буквы алфавита, а затем использовать значения индексов в качестве возвращаемого значения
Как насчет этого?
import string
value = lambda x: string.ascii_lowercase.index(x) + 1
In [1]: value("a")
Out[1]: 1
Если вы просто хотите сопоставить символы алфавита ASCII с числами, вы можете использовать ord ()
, а затем скорректируйте результат:
>>> ord('a') - 96
1
Если вы хотите, чтобы это работало и для прописных букв:
>>> ord('A'.lower()) - 96
1
Кроме того, вы можете проверить, действительно ли аргумент является единственным символом ASCII:
>>> char = 'a'
>>> len(char) == 1 and char.isalpha() and 'a' <= char <= 'z'
True
Или:
>>> import string
>>> len(char) == 1 and char in string.ascii_lowercase
True
Используйте словарь для пар ключ:значение. Хотя для такого простого отображения, как это, вероятно, есть несколько умных способов сделать это.
Вы должны использовать тот факт, что 'a', 'b' и т. Д. Имеют значения ASCII позади них.
ord('a') # this returns int 97
ord('b') # this returns int 98
Таким образом, вы можете сделать что-то вроде:
ord(letter) - ord('a') + 1 # e.g., a: 97 - 97 + 1 = 1
from itertools import count
from string import lowercase
value = dict(zip(lowercase, count(1))).get