2009-11-12 18 views
14

matemáticas ASCII para trabajar en Python:¿Cómo podría imprimir la enésima letra del alfabeto en Python? no parece

'a' + 5 no funciona

¿Cómo podría imprimir rápidamente la carta de la enésima alfabeto sin tener una matriz de letras?

Mi solución ingenua es la siguiente:

 
letters = ['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'] 
print letters[5] 
+5

Puede acortar su solución ingenua con 'letters =" ABCDEF ... XYZ "' – mob

+0

O si es absolutamente * debe * ser una lista, 'letters = list (" ABCDEF..etc. ")' O 'letters = list (string.uppercase) '(tenga en cuenta que string.uppercase cambia su nombre en Py3). – PaulMcG

Respuesta

43

chr y ord convierten caracteres desde y hacia enteros, respectivamente. Entonces:

chr(ord('a') + 5) 

es la letra 'f'.

+2

... que es la sexta letra en el alfabeto, a menos que sea de indexación cero ... – PaulMcG

+7

Es la quinta letra de ''a'', obviamente. Y sí, estoy indexando cero. ¿Qué programador respetuoso no lo hace? ;) – Thomas

+0

Además, está perfectamente en línea con los ejemplos dados en la pregunta. – Thomas

4
chr(ord('a')+5) 

​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​

1

Es necesario utilizar la función ord, como

print(ord('a')-5) 

Editar: Gah, yo era demasiado lento :)

26

ASCII matemáticas a un lado, usted no tiene que escribir su mesa de cartas a mano . El string constants en el string module proporciona lo que estás buscando.

>>> import string 
>>> string.ascii_uppercase[5] 
'F' 
>>> 
1
import string 
print string.letters[n + is_upper*26] 

Por ejemplo:

>>> n = 5 
>>> is_upper = False 
>>> string.letters[n+is_upper*26] 
'f' 
>>> is_upper = True 
>>> string.letters[n+is_upper*26] 
'F' 
2

si quieres ir realmente fuera del camino (probablemente no muy bueno) se podría crear una nueva CharMath clase:

class CharMath: 
    def __init__(self,char): 
     if len(char) > 1: raise IndexError("Not a single character provided") 
     else: self.char = char 
    def __add__(self,num): 
     if type(num) == int or type(num) == float: return chr(ord(self.char) + num) 
     raise TypeError("Number not provided") 

Lo anterior se puede utilizar:

>>> CharMath("a") + 5 
'f' 
Cuestiones relacionadas