Python 3.4.3 中的凯撒密码

Caesar Cipher in Python 3.4.3

如果我输入"eat",我应该得到的输出应该是"hdw",如果我将它移动3。但是,最终结果只是"w"。我很确定我拥有我需要的一切,但也许是格式问题?

def shifter():  
    phrase = input("Please enter a message: ")  
    key = eval(input("Please enter the number of places to be shifted: "))  
    list = phrase.split()  
    for word in list:  
        for ch in word:  
           conversion = (chr)((ord(ch) - ord("a") + key) % 26 + ord("a"))  
        newPhrase = " "  
        newPhrase = newPhrase + conversion  
    print(newPhrase)  
shifter()  

我认为这是你的缩进! 现在,在对变量转换进行任何操作之前,您已经遍历了 word 中的每个 ch,因此您卡在了最后一个 ch。

尝试进行转换 += ... 而不是转换 = ... (您可能需要在此之前初始化转换,但 idts。)

问题在于您是在 for 循环内设置转换,而不是附加到它,因此最后只有单词中的最后一个字符附加到 newPhrase。

您应该附加到转换,而不是设置它。

此外,您应该在循环外初始化 newPhrase,然后在循环内附加到它。

例子-

def shifter():  
    phrase = input("Please enter a message: ")  
    key = eval(input("Please enter the number of places to be shifted: "))  
    list = phrase.split()
    newPhrase = ""
    for word in list:
        conversion = '' 
        for ch in word:  
           conversion += (chr)((ord(ch) - ord("a") + key) % 26 + ord("a"))  
        newPhrase = newPhrase + conversion + " " 
    print(newPhrase)  
shifter()