我正在解决 Codewars 上的一个任务,我自己需要创建一个实现 Rot13 密码的函数。
他的想法是这样的:
ROT13 是一种简单的字母替换密码,它将字母表中的字母替换为该字母后面的 13 个字母。如果字符串中包含数字或特殊字符,则应以其原始形式返回。仅应移动拉丁/英语字母表中的字母。
我的代码适用于一半以上的值,但我不明白为什么在某些时候我的函数和翻译使用codecs.encode()给出了不同的结果。
例如,对于“test”,它到处都会返回“grfg”。但对于 'aA bB zZ 1234 *!?%' 行,已经存在差异:
- 我的功能:
mM nN mM 1234 *!?% - 内置:
nN oO mM 1234 *!?%
代码本身:
alphabet = {1:'a', 2: 'b', 3: 'c', 4: 'c', 5: 'd', 6: 'e', 7: 'f', 8: 'g', 9: 'h', 10: 'i', 11: 'j', 12: 'k', 13: 'l', 14: 'm',15: 'n', 16: 'o', 17: 'p', 18: 'q', 19: 'r', 20: 's', 21: 't', 22: 'u', 23: 'v', 24: 'w', 25: 'x', 26: 'y', 27: 'z'}
def rot13(message):
mass = []
for n in message:
if n.isalpha():
for k, v in alphabet.items():
if n.lower() == alphabet[k]:
if n.islower():
if k + 13 <= 27:
mass.append(alphabet[k + 13])
break
else:
mass.append(alphabet[k - 13])
break
else:
if k + 13 <= 27:
mass.append(alphabet[k + 13].upper())
break
else:
mass.append(alphabet[k - 13].upper())
break
else:
mass.append(n)
return ''.join(mass)
print(rot13('aA bB zZ 1234 *!?%'))