【问题标题】:Caesar Cipher Encryption Python [duplicate]凯撒密码加密Python [重复]
【发布时间】:2017-09-29 21:39:31
【问题描述】:

谁能告诉我为什么我只得到我的纯文本消息的一个字符来加密?消息是“船在午夜航行”,加密密钥是 4。我只能让 t 转换为 x,消息的其余部分不打印。我错过了什么?

#request the message from the user
def InputMessage():
    PlainText = input("Enter the message you would like to encrypt: ")
    return PlainText

#encrypt the message
def CaesarShift(PlainText):

    #initialize variables
    alpha = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
    Key = int(input("Enter the encryption key: "))
    CipherText = ""

    #skip over spaces in the message
    for ch in PlainText:
        if ch == " ":
            pass
        else:

            #encrypt the message 
            index = alpha.index(ch)
            NewIndex = index + Key
            ShiftedCharacter = alpha[NewIndex]
            CipherText += ShiftedCharacter
        return CipherText


#main program start
def main():
    PlainText = InputMessage()
    CipherText = CaesarShift(PlainText)

    #print the encrypted message
    print("Encrypted message: " + CipherText)

#main program end
main()

【问题讨论】:

  • 取消您的退货声明!在第一次迭代之后,您从循环内部返回。

标签: python encryption caesar-cipher


【解决方案1】:

您的 return 语句在循环内,因此该函数仅在加密第一个字母后返回。

需要保证return语句的缩进级别与for循环的缩进级别一致。

【讨论】:

  • @MikeSilva 您还需要对新索引应用一些模以保持在边界内;)
  • 也可以压缩成一行。
猜你喜欢
  • 2013-03-13
  • 2014-03-07
  • 1970-01-01
  • 1970-01-01
  • 2014-04-11
  • 2016-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多