Ответ 1
chr
и ord
конвертировать символы из и в целые числа соответственно. Итак:
chr(ord('a') + 5)
- буква 'f'
.
Математика 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]
chr
и ord
конвертировать символы из и в целые числа соответственно. Итак:
chr(ord('a') + 5)
- буква 'f'
.
Математика ASCII в сторону, вам не нужно вводить таблицу букв вручную.
Строковые константы в string module
предоставляют то, что вы искали.
>>> import string
>>> string.ascii_uppercase[5]
'F'
>>>
chr(ord('a')+5)
Если вы хотите действительно уйти с пути (вероятно, не очень хорошо), вы можете создать новый класс 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'
Вам нужно использовать функцию ord
, например
print(ord('a')-5)
Изменить: gah, я был слишком медленным:)
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'
Если вам это нравится, попробуйте лямбда-нотацию:
>>> A = lambda c: chr(ord('a')+c)
>>> A(5)
'f'