我正在用 python 编写一个 ROT13 脚本。它通过将字符串分成单个字符列表并使用 for 循环来工作,遍历每个字母并检查它是否需要被字典翻译。
问题是它并不总是替换列表中的字母。我不知道为什么,但只有一些字符串有效。
这是代码:
import string
def rot13(m):
Data for ROT13 conversion
alphabet = list("abcdefghijklmnopqrstuvwxyz")
mapping = {}
for letter in alphabet:
mapping[letter] = alphabet[(alphabet.index(letter) + 13)%26]
for letter in alphabet:
mapping[letter.upper()] = alphabet[(alphabet.index(letter) +13)%26].upper()
# Create a list of the characters in order
characters = list(m)
# Go through each character in the list...
for character in characters:
# Check if that character is one that needs to be changed
if character in mapping:
# Test to chcek if it is finding characters correctly (it is)
print "%s to %s" % (character, mapping[character])
# replace the character with a new one (works inconsistently)
characters[characters.index(character)] = mapping[character]
#Bring it all together
result = string.join(characters, "");
return result
print rot13("ABCDEF") # Returns NOPQRS
print rot13("ABCDEFGHIJKLMNOPQRSTUVWXYZ") # Returns original string
第一个测试使用部分大写字母,结果与预期一样。但是,完整的字母表在通过我的 ROT13 函数时只返回原始字符串。
我确信问题出在第 20 行,characters[characters.index(character)] = mapping[character]
.
这一行应该用开头构建的 rot13 字典中的对应字母替换列表中的字母,但并不总是这样做。
在打印它正在测试的字符以及根据字典应该将其更改为什么之前,我有一行,并且始终有效。但如果确实如此,那么为什么不使用另一条线呢?