''' Cesar Cipher '''
def encrypt(word, shift):
word = word.lower()
for i in word:
r = chr(ord(i)+shift)
if r > "z":
r = chr(ord(i) - 26 + shift)
word = word.replace(i, r)
return word
if __name__ == "__main__": print encrypt("programming", 3)
这给了我一个错误的答案,轮班高于1,单词长于2。我不明白为什么。有什么帮助吗?在
我也有这个任务。提示是,您必须跟踪值的包装位置,并将其用于您的优势。我还建议使用
upper
函数调用,这样一切都是一样的,减少了要做的检查的次数。在蒂洛准确地解释了这个问题。让我们一步一步来:
尝试
^{pr2}$encrypt('abc', 1)
并查看会发生什么:您不想将
i
的每个实例替换为r
,只需要这一个。你会怎么做?好吧,如果你跟踪索引,你可以在那个索引处替换。内置的enumerate
函数允许您同时获得每个索引和每个相应的值。在现在您只需编写
new_word_replacing_one_char
函数,如果您知道切片,这是非常容易的。(如果您还没有学习切片,您可能需要将字符串转换为list
字符,所以您只需说word[index] = r
,然后在结尾处转换回字符串。)我不知道Python如何喜欢在您迭代单词时替换单词中的字符,但是有一件事似乎肯定是一个问题,因为
replace
将替换字母的所有出现的,而不仅仅是您当前正在查看的字母,因此您最终会将这些重复的字母移动超过一次(当您在以后的迭代中再次命中它们时)。在想想看,不重复的字母也会发生这种情况。例如,在三次迭代中,将ABC移1将变成->BBC->CCC->DDD。在
相关问题 更多 >
编程相关推荐