Как я могу распечатать n-ую букву алфавита в Python? - PullRequest
18 голосов
/ 12 ноября 2009

ASCII математика не работает в Python:

'a' + 5 НЕ РАБОТАЕТ

Как можно быстро распечатать n-ю букву алфавита, не имея массива букв?

Мое наивное решение таково:

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]

Ответы [ 6 ]

54 голосов
/ 12 ноября 2009

chr и ord преобразуют символы из и в целые числа соответственно. Итак:

chr(ord('a') + 5)

это буква 'f'.

29 голосов
/ 12 ноября 2009

Помимо математики ASCII, вам не нужно вводить таблицу букв вручную. строковые константы в string module обеспечивают то, что вы искали.

>>> import string
>>> string.ascii_uppercase[5]
'F'
>>> 
4 голосов
/ 12 ноября 2009
chr(ord('a')+5)

1003 *

3 голосов
/ 17 мая 2011

если вы хотите действительно уйти с дороги (вероятно, не очень хорошо), вы можете создать новый класс CharMath:

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

Выше можно использовать:

>>> CharMath("a") + 5
'f'
1 голос
/ 12 ноября 2009
import string
print string.letters[n + is_upper*26]

Например:

>>> n = 5
>>> is_upper = False
>>> string.letters[n+is_upper*26]
'f'
>>> is_upper = True
>>> string.letters[n+is_upper*26]
'F'
1 голос
/ 12 ноября 2009

Вам необходимо использовать функцию ord, например

print(ord('a')-5)

Редактировать: га, я был слишком медленным:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...