我想增加每个字符的ASCII值,如果值> z
,则循环(环绕)。
#small chars:
for char in string.ascii_lowercase:
print factName + '(' + char + ', ' + chr(((ord(char)+key) % ord('z'))) + ').'
如果key = 3
>> a
成为d
但w
,x
和y
不正确!
好吧,你减少了所有mod ord('z'),好像字母表的内部值是从零开始的。正如您所发现的,事实并非如此。相反,您需要进行溢出检查,然后减去数据集的宽度。基本逻辑是
if ord(chr) + key > ord('z'):
result = ord(chr) + key - 26
这足以让你感动吗?
你也可以用一个简单的翻译表来做这个,从旧的字母表中构建一个新的字母表:剪切前3个字符并将它们附加到翻译字符串的后面:
blank_code = 'abcdefghijklmnopqrstuvwxyz'
new_code = blank_code[-n:] + blank_code[:n]
这为您提供了相应的“字母”。另请参阅translate
方法以快速使用这些方法。