2009-11-12 5 views
14

ASCII Mathematik scheint nicht in Python zu arbeiten:Wie könnte ich den n-ten Buchstaben des Alphabets in Python ausdrucken?

'a' + 5 FUNKTIONIERT NICHT

Wie konnte ich aus dem n-ten Buchstaben des Druck schnell Alphabet ohne eine Reihe von Buchstaben?

Meine naive Lösung ist dies:

 
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

Du könntest deine naive Lösung mit 'letters =" ABCDEF ... XYZ "' – mob

+0

verkürzen Oder wenn es * unbedingt * eine Liste sein muss, 'Buchstaben = Liste (" ABCDEF..etc. ")' Oder 'Buchstaben = list (string.uppercase) '(beachte, dass string.uppercase seinen Namen in Py3 ändert). – PaulMcG

Antwort

43

chr und ord Konvertieren von Zeichen von bzw. in Ganzzahlen. Also:

chr(ord('a') + 5) 

ist der Buchstabe 'f'.

+2

... das ist der 6. Buchstabe im Alphabet, es sei denn, Sie sind Nullindexierung ... – PaulMcG

+7

Es ist der 5. Buchstabe von ''a'' offensichtlich. Und ja, ich bin Nullindexierung. Was selbstbewusster Programmierer nicht? ;) – Thomas

+0

Auch ist es perfekt im Einklang mit den Beispielen in der Frage gegeben. – Thomas

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

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

1

Sie benötigen die ord Funktion, wie

print(ord('a')-5) 

Bearbeiten verwenden: gah, ich war zu langsam :)

26

ASCII Mathematik beiseite, Sie müssen nicht von Hand Ihre Briefe Tabelle an . Die string constants in der string module bieten, was Sie gesucht haben.

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

Zum Beispiel:

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

wenn u wirklich aus dem Weg gehen wollen (wahrscheinlich nicht sehr gut) Sie eine neue Klasse CharMath schaffen könnte:

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") 

Das obige kann verwendet werden:

>>> CharMath("a") + 5 
'f' 
Verwandte Themen