Python: Как я могу назначить значения буквам?
Вопрос
Я хочу назначить значение для каждой буквы в алфавите, так что A -> 1, B -> 2, C -> 3, ... z -> 26. Что-то вроде функции, которая возвращает значениеПисьмо, например:
value('a') = 1
value('b') = 2
etc ...
Как бы я пошел делать это в Python?
Решение
Вы хотите нативный словарь Python.
(и вы, вероятно, также хотите, чтобы ваши ценности начать с «0» не из «1», поэтому вы можете недействовать добавлять +1 на все свои сопоставления, как пылёный)
построить один с этим:
import string
values = dict()
for index, letter in enumerate(string.ascii_lowercase):
values[letter] = index + 1
.
Это дают syous, как:
print values["a"]
-> 1
.
Конечно, вы, вероятно, можете использовать встроенный функцию «ORD» и совсем пропустить этот словарь, как и в других ответах:
print ord("c") - (ord("a")) + 1
.
или в Python 3.x или 2.7, вы можете создать диионов в одном проходе с выражением генератора Dict:
values = {chr(i): i + 1 for i in range(ord("a"), ord("a") + 26)}
. Другие советы
Если вы просто хотите отобразить символы алфавита 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
. def value(letter):
return ord(letter) - ord('a') + 1
. Используйте a словарь для ключа: ценность пары.Хотя для простого сопоставления, как это, вероятно, некоторые умные способы сделать это.
from itertools import count
from string import lowercase
value = dict(zip(lowercase, count(1))).get
. Вы должны использовать тот факт, что «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
. Почему бы не просто сделать список каждую букву в алфавите, а затем использовать значения индекса в качестве значения возврата
Как насчет этого?
import string
value = lambda x: string.ascii_lowercase.index(x) + 1
In [1]: value("a")
Out[1]: 1
. Не нужно импортировать библиотеку.Вы можете использовать это:
value = dict(zip("abcdefghijklmnopqrstuvwxyz", range(1,27)))
. Вы можете использовать встроенный функцию ORD.Эта функция хорошо делает то, что вы ищете
def letter_value(letter):
return ord(letter) - ord("a") + 1
.