Вопрос

Я хочу назначить значение для каждой буквы в алфавите, так что 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
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top