2013-03-06 4 views
-1

Я только что начал программировать на python через онлайн-курс, и в одном из заданий нам потребовалось кодировать строку с rot13. Я использовал метод макетранс, и все хорошо, но мне любопытно, как я буду «кодировать» алфавит цифрами. Например, могу ли я присвоить значение каждой буквы в алфавите числу? A-Z = 1-26? Я не знаю, как обойтись, используя двойные цифры. Пожалуйста помоги. Спасибо.Python Декодер: алфавит к номерам

+0

http://en.wikipedia.org/wiki/ASCII – AJcodez

+0

возможно дубликат [ASCII значение символа в питона ] (http://stackoverflow.com/questions/227459/ascii-value-of-a-character-in-python) –

ответ

1

Используйте функции ord() и chr(), чтобы превратить символы в числа, и наоборот. Номера букв и цифр соответствуют стандарту ASCII.

>>> ord('A') 
65 
>>> chr(65) 
'A' 

В свою очередь, что к номерам от 1 до 26, вычесть 64, или использовать ord('@') (также 64).

Другой вариант заключается в использовании string.ascii_uppercase variable, который позволит вам найти «индекс» письма, 0 на основе:

>>> string.ascii_uppercase.index('B') 
1 
>>> string.ascii_uppercase.index('C') 
2 
>>> string.ascii_uppercase[3] 
'D' 

Вы можете использовать любой метод, чтобы создать отображение из письма на номер, возможно, :

>>> letters = {c: i for i, c in enumerate(string.ascii_uppercase)} 
>>> letters['M'] 
12 
0

Например, я был бы в состоянии присвоить значение каждой буквы в алфавите к ряду? A-Z = 1-26?

Для кодирования:

>>> ''.join('%02d' % (ord(c) - ord('A') + 1) for c in 'SECRET') 
'190503180520' 

Для декодирования:

>>> encoded = '190503180520' 
>>> ''.join(chr(int(encoded[i:i+2]) + ord('A') - 1) for i in range(0, len(encoded), 2)) 
'SECRET' 
Смежные вопросы