Преобразование букв алфавита в числа в Python

Как можно завершить следующее?

characters = ['a''b''c''d''e''f''g''h''i''j''k''l''m''n''o''p''q''r''t''u''v''w''x''y''z']
numbers = ['1''2''3''4''5''6''7''8''9''10''11''12''13''14''15''16''17''18''19''20''21''22''23''24']
text = raw_input(' Write text: ')

Я'пытался решить ее многими способами, но не смог'дойти до финта. Я хочу сделать exc. Если я набираю "hello", то вывод должен быть в виде чисел, выстроенных как в алфавите. Пример a = 1 < в алфавите.

Комментарии к вопросу (6)

Как насчет чего-то подобного:

print [ord(char) - 96 for char in raw_input('Write Text: ').lower()]

ord понимание списка коды символов ASCII

EDIT Поскольку вы попросили меня объяснить, я объясню... хотя это уже было довольно хорошо объяснено в комментариях [?].

Давайте сделаем это в нескольких строках для начала.

input = raw_input('Write Text: ')
input = input.lower()
output = []
for character in input:
    number = ord(character) - 96
    output.append(number)
print output

Это делает то же самое, но более читабельно. Убедитесь, что вы можете понять, что здесь происходит, прежде чем пытаться понять мой первый ответ. Здесь все довольно стандартно, простой Python. Единственное, что следует отметить, это функция ord. ord означает порядковый номер, и практически в каждом языке высокого уровня есть такая функция. Она дает вам отображение числового представления любого символа. Обратная функция ord называется chr.

chr(ord('x')) == 'x' # for any character, not just x.

Если вы проверите сами, то порядковый номер буквы a равен 97 (третья ссылка, которую я разместил выше, показывает полный набор символов ASCII). Каждая строчная буква находится в диапазоне 97-122 (26 символов). Таким образом, если вы просто вычтете 96 из порядкового номера любой строчной буквы, вы получите ее положение в алфавите, принимая 'a' == 1. Так, порядковый номер 'b' == 98, 'c' == 99 и т.д. При вычитании 96, 'b' == 2, 'c' == 3 и т.д.

Остальная часть первоначального решения, которое я опубликовал, это просто некоторые трюки Python, которые вы можете изучить под названием "понимание списка". Но я бы сосредоточился не столько на этом, сколько на том, чтобы научиться решать эту проблему на любом языке, где ord - ваш друг. Надеюсь, это поможет.

Комментарии (4)

Вы можете использовать chr() и ord() для преобразования между букв и чисел int.

Вот простой пример.

>>> chr(97)
'a'
>>> ord('a')
97
Комментарии (1)

Если вы собираетесь использовать это преобразование много, рассмотрим только расчет и ввод результатов в словарь:

>>> import string
>>> di=dict(zip(string.letters,[ord(c)%32 for c in string.letters]))
>>> di['c'] 
3

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

>>> for c in sorted(di.keys()):
>>>    print "{0}:{1}  ".format(c, di[c])
# what you would expect....
Комментарии (0)

Не слишком простой, но это:

>>> char1 = ['a''b''c''d''e''f''g''h''i''j''k''l'
             'm''n''o''p''q''r''s''t''u''v''w''x''y''z']

очень отличается от этого:

>>> char2 = ['a','b','c','d','e','f','g','h','i','j','k','l',
               'm','n','o','p','q','r','s','t','u','v','w','x','y','z']

Первый, без запятых и что у вас есть в вашем вопросе, находится в одном списке элемент с 26 строковый элемент. Второй-26 список каждый элемент одного символа в длину.

Если вы печатаете каждый:

>>> print char1, len(char1), len(char1[0])
['abcdefghijklmnopqrstuvwxyz'] 1 26
>>> print char2, len(char2), len(char2[0])
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 
'm', 'n', 'o', 'p', 'q','r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] 26 1

Становится очевидным, что он принимает дополнительный шаг, чтобы превратить отдельные символы char1 в итератор.

Если у вас есть последовательность символов 'Это' и#39;з' и/или 'Это' и#39;з' вы сможете легко вернуть номер символа, с список постижение:

>>> [ord(x)%32 for x in char2]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 
17, 18, 19, 20, 21, 22, 23, 24, 25, 26]

Для типа структуры данных, вам нужно открыть первую строку:

>>> [ord(x)%32 for x in char1[0]]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 
17, 18, 19, 20, 21, 22, 23, 24, 25, 26]

Так что если ваш код такой же, как и в вашем вопросе, что может быть ваш вопрос.

Разумная альтернатива-это: [ОГА(х.ниже())-96 для X в char1[0]]

Вы можете увидеть, что ваши персонажи=['Это''б''с'...], Без запятых, все равно как печатать все символы в строке в список такой['Азбука']`.

Так что теперь попробовать:

 >>> import string
 >>> [ord(x.lower())-96 for x in string.letters]
 [1,2,...26, 1,2,3...26]      # my ellipses 
 >>> char3=[string.letters]   # one string as element[0]
 >>> [ord(x)%32 for x in char3[0]]
 >>> [ord(x)%32 for x in [string.letters][0]]
Комментарии (0)

Вот функция, которую я использовал для этой цели. Работает как для прописных, так и для строчных букв.


def convert_char(old):
    if len(old) != 1:
        return 0
    new = ord(old)
    if 65 
Комментарии (3)
def letter_to_int(letter):
    alphabet = list('abcdefghijklmnopqrstuvwxyz')
    return alphabet.index(letter) + 1

здесь, индекса функции (X) возвращает значение позиции х, если список содержит X.

Комментарии (0)
>>> [str(ord(string.lower(c)) - ord('a') + 1) for c in string.letters]
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17',
'18', '19', '20', '21', '22', '23', '24', '25', '26', '1', '2', '3', '4', '5', '6', '7', '8',
'9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24',
 '25', '26']
Комментарии (0)

Здесь's что-то я использую, чтобы преобразовать буквы столбца Excel в числа (так ограничение в 3 буквы, но это'ы довольно легко продлить, если вам нужно больше). Вероятно, не лучший способ, но он работает за то, что мне нужно.

def letter_to_number(letters):
    letters = letters.lower()
    dictionary = {'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}
    strlen = len(letters)
    if strlen == 1:
        number = dictionary[letters]
    elif strlen == 2:
        first_letter = letters[0]
        first_number = dictionary[first_letter]
        second_letter = letters[1]
        second_number = dictionary[second_letter]
        number = (first_number * 26) + second_number
    elif strlen == 3:
        first_letter = letters[0]
        first_number = dictionary[first_letter]
        second_letter = letters[1]
        second_number = dictionary[second_letter]
        third_letter = letters[2]
        third_number = dictionary[third_letter]
        number = (first_number * 26 * 26) + (second_number * 26) + third_number
    return number
Комментарии (1)

Используйте эту функцию. Она преобразует строку алфавита в эквивалентное цифровое значение:

def convAlph2Num(sent):
    alphArray = list(string.ascii_lowercase)
    alphSet = set(alphArray)
    sentArray = list(sent.lower())
    x = []
    for u in sentArray:
        if u in alphSet:
            u = alphArray.index(u) + 1
            x.append(u)
    print(x)
    return
Комментарии (1)

Если цель состоит в том, чтобы преобразовать только буквы АБВГД....XYZ и АБВГД....АБВ , я хотел бы использовать функции:

from string import letters
def rank(x, d = dict((letr,n%26+1) for n,letr in enumerate(letters[0:52]))):
    return d[x]

Я написал [0:52] потому что мой Python версии 2.7 отображает значение

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzƒŠŒŽšœžŸÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ

для строки.аргумент букв.

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

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

.

Одним из примеров использования:

word = 'supercalifragilisticexpialidocious'
print ''.join( letter if rank(letter)%3!=0 else '.' for letter in word)

результат:

С. пэ..а....АГ...св. е.С. а..д.....с

.

Он может быть использован с картой() тоже :

print map(rank,'ImmunoElectroPhoresis')

результат:

[9, 13, 13, 21, 14, 15, 5, 12, 5, 3, 20, 18, 15, 16, 8, 15, 18, 5, 19, 9, 19]

Комментарии (0)

Если вы просто хотите отобразить номер на письмо, то просто делай что-то простое, вроде этого:

def letter_to_index(letter):
    _alphabet = 'abcdefghijklmnopqrstuvwxyz'
    return next((i for i, _letter in enumerate(_alphabet) if _letter == letter), None)

Конечно, если вы хотите, чтобы она запускалась на 1, тогда просто добавьте (я+1 для меня, ... и т. д.

Комментарии (0)

Если вы ищете противоположной как 1 = а , 2 = Б и т. д., Вы можете использовать следующий код. Обратите внимание, что я прошел только до 2 уровня как мне пришлось перевести подразделений в класс А, B, С и т. д.


loopvariable = 0 
    numberofdivisions = 53
    while (loopvariable 
Комментарии (0)

Вот мое решение проблемы, где вы хотите, чтобы преобразовать все буквы в строке с позиции этих букв в английском алфавите и возвращать строку из тех "нет".

https://gist.github.com/bondnotanymore/e0f1dcaacfb782348e74fac8b224769e

Дайте мне знать, если вы хотите разобраться в деталях.Я использовал следующие понятия

  • Осмысление список
  • Понимание словарь
Комментарии (1)