Convertir letras del alfabeto en números en Python

¿Cómo se puede terminar lo siguiente?

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: ')

He intentado resolverlo de muchas maneras, pero no he conseguido dar con la pinta. Quiero hacer exc. Si escribo "hola" la salida a ser en números alineados como en el alfabeto. Ejemplo a = 1 < en el alfabeto.

¿Qué tal algo como esto?

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

ord comprensión de la lista códigos de caracteres ASCII

EDIT Ya que me has pedido que lo explique, lo haré... aunque ya ha sido explicado bastante bien en los comentarios por [...].

Hagámoslo en más de una línea para empezar.

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

Esto hace lo mismo, pero es más legible. Asegúrese de que puede entender lo que está pasando aquí antes de tratar de entender mi primera respuesta. Todo aquí es bastante estándar, simple Python. La única cosa a tener en cuenta es la función ord. ord significa ordinal, y casi todos los lenguajes de alto nivel tienen este tipo de función disponible. Te da un mapeo de la representación numérica de cualquier carácter. La función inversa de ord se llama chr.

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

Si lo compruebas por ti mismo, el ordinal de la a es 97 (el tercer enlace que he puesto más arriba muestra el conjunto completo de caracteres ASCII.) Cada letra minúscula está en el rango 97-122 (26 caracteres.) Así que, si restas 96 del ordinal de cualquier letra minúscula, obtendrás su posición en el alfabeto suponiendo que tomas 'a' == 1. Así, ordinal de 'b' == 98, 'c' == 99, etc. Al restar 96, 'b' == 2, 'c' == 3, etc.

El resto de la solución inicial que he publicado no es más que algún truco de Python que puedes aprender llamado comprensión de listas. Pero, yo no me centraría tanto en eso como en aprender a resolver el problema en cualquier lenguaje, donde ord es tu amigo. Espero que esto te ayude.

Comentarios (4)

Esta es una función que solía utilizar para este fin. Funciona tanto para mayúsculas como para minúsculas.


def convert_char(old):
    if len(old) != 1:
        return 0
    new = ord(old)
    if 65 
Comentarios (3)
>>> [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']
Comentarios (0)