我刚刚开始通过在线课程在python中开始编程,在其中一个作业中,我们需要使用rot13编码一个字符串。我使用maketrans方法,一切都很好,但我很好奇我如何将字母“编码”到数字。例如,我能否将字母表中每个字母的值分配给一个数字? A-Z = 1-26?我不知道如何使用两位数。请帮忙。谢谢。
答案 0 :(得分: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
答案 1 :(得分: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'