Python: Как я присваиваю значения буквам?

Я хочу присвоить значение каждой букве в алфавите, так, чтобы-> 1, b-> 2, c-> 3... z-> 26. Что-то как функция, которая возвращает значение буквы, например:

value('a') = 1

value('b') = 2

и т.д...

Как я пошел бы о выполнении этого в Python?

6
задан Eddy 14 July 2010 в 12:52
поделиться

8 ответов

Вам нужен родной словарь 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)}
10
ответ дан 8 December 2019 в 05:52
поделиться

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

0
ответ дан 8 December 2019 в 05:52
поделиться

Как насчет этого?

import string
value = lambda x: string.ascii_lowercase.index(x) + 1

In [1]: value("a")
Out[1]: 1
0
ответ дан 8 December 2019 в 05:52
поделиться

Если вы просто хотите сопоставить символы алфавита 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
5
ответ дан 8 December 2019 в 05:52
поделиться
def value(letter):
    return ord(letter) - ord('a') + 1
3
ответ дан 8 December 2019 в 05:52
поделиться

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

2
ответ дан 8 December 2019 в 05:52
поделиться

Вы должны использовать тот факт, что '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
0
ответ дан 8 December 2019 в 05:52
поделиться
from itertools import count
from string import lowercase
value = dict(zip(lowercase, count(1))).get
2
ответ дан 8 December 2019 в 05:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: