2013-03-06 104 views
-1

我刚刚开始通过在线课程开始使用python进行编程,并且我们需要使用rot13编码字符串之一。我使用了maketrans方法,一切都很顺利,但我很好奇如何将字母“编码”为数字。例如,我能否将字母表中每个字母的值分配给一个数字? A-Z = 1-26?我不知道如何使用双数字。请帮忙。谢谢。Python解码器:字母到数字

+0

http://en.wikipedia.org/wiki/ASCII [ASCII在python的字符的值的 – AJcodez 2013-03-06 18:40:33

+0

可能重复](http://stackoverflow.com/questions/227459/ascii-value-of-a-character-in-python) – 2013-03-06 20:59:15

回答

1

使用ord()chr()函数可以将字符转换为数字,反之亦然。字母和digets的数字对应于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'