python 3中的这段代码显示错误,为什么?

时间:2014-01-15 00:19:12

标签: python python-3.x

alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'w',
           'x', 'y', 'z']
phrase = input('Write a phrase: ')
for i in range(1, 26):
    phrase = phrase.replace(alphabet[i-1], alphabet[i+12])
print(phrase)

我只是想用一个短语替换13个字母中的字母,但它在第5行显示错误,请帮忙。

3 个答案:

答案 0 :(得分:3)

i已超过15时,phrase[i+12]会导致错误,因为phrase[27]不存在。

您可以使用一些计算来解决问题:

for i, v in enumerate(phrase):
    phrase = phrase.replace(v, alphabet[(i+12)%26])

此外..您遗失了juv ..

答案 1 :(得分:3)

如果我没弄错的话,这基本上就是ROT13:

>>> import codecs
>>> codecs.encode("Hello World!", "rot_13")
'Uryyb Jbeyq!'

答案 2 :(得分:1)

此案例现在只处理小写但可以更新为处理大写字母:

"".join([chr((ord(i) + shift) % (ord("z")-ord("a")) + ord("a")) for i in phrase])

其中shift是字母表中的移位和phrase用户输入。

它使用ordchr