Caesar Cipher Encrypt,无法打印最终消息

Caesar Cipher Encrypt, can't print final message

def message():
    answer1 = input('Welcome to the Caesar Cipher! What do you want to encrypt?')
    key = input('Enter the key number that you want to encrypt with. (1 - 26)')


def getMessage():
    while leng <= lengthOfInput1-1:
        lengthList.append(chr(ord(answer1[len]) + key))
        len += 1
    print(lengthList)


key = 0
answer1 = ''
maxKeySize = 26
lengthOfInput1 = len(answer1)
leng = 0
lengthList = []
message()
getMessage()

当我 运行 这段代码时,我得到的答案总是“[ ]”。我不知道发生了什么,并认为变量 'lengthList' 是一个列表并且会附加字母。我还需要帮助将各个字母组合在一起以形成加密消息。 谢谢,埃里克

发生这种情况是因为您没有在外部分配 answer1 变量。在 message() 方法中,您已将值分配给其范围内的局部变量,而不是您想要的外部范围内的 answer1 变量。

您必须将它作为参数传递,return 它的值才能保留它的值。

同样,getMessage() 无法访问其范围之外的变量。所以,你也必须将它们作为参数传递!

此代码的正确形式如下:

def message():
    answer1 = input('Welcome to the Ceaser Cipher! What do you want to encrypt?')
    key = int(input('Enter the key number that you want to encrypt with. (1 - 26)'))
    return answer1, key


def getMessage(lengthOfInput1, lengthList, answer1, key, leng):
    while leng <= lengthOfInput1-1:
        lengthList.append(chr(ord(answer1[leng]) + key))
        leng += 1
    print(lengthList)


key = 0
answer1 = ''
answer1, key = message()
# Here I am returning both of the values from
# message method.

# LOCAL VARIABLES
maxKeySize = 26
lengthOfInput1 = len(answer1)
leng = 0
lengthList = []

getMessage(lengthOfInput1, lengthList, answer1, key, leng)
# Inorder to access the local variables, you will
# have to pass them to getMessage() method.

上面这段代码,将生成一个包含密码字母的列表lengthList。但是,它在 getMessage() 本地。您必须 return 它到它的父范围,才能在那里访问它。

此外,要将列表转换为字符串,您必须在列表中进行迭代,并不断追加到空字符串。像这样:

messageCoded = ""
for i in messageList:
    messageCoded += i

print(messageCoded)

确保范围正确,你会做得很好。 This文章解释的很好。

只需对您的原始代码进行极少的更改,工作代码就是

def message():
    answer = input('Welcome to the Ceaser Cipher! \nWhat do you want to encrypt? ')
    key = input('Enter the key number that you want to encrypt with (1 - 26): ')
    return answer, int(key)


def getMessage(answer, key):
    lengthList = []
    leng = 0
    while leng < len(answer):
        lengthList.append(chr(ord(answer[leng]) + key))
        leng += 1
    print("".join(lengthList))


answer, key = message()
getMessage(answer, key)

解释:

  1. 您的 message() 函数使用用户输入填充 answer1key 变量,然后 将它们丢弃 ,因为这些只是 local 变量 - 此函数定义之外的 answer1keyothers 变量。 所以我包含了 return 命令来保存它们(并将 answer1 重命名为 answer)。

  2. 你的message()函数中key变量的类型是str(string),但是你需要int。所以return语句中的int(key).

  3. 在主代码中,我保存了那些 returned 值 - answer, key = message() 命令。

  4. 您的函数 getMessage() 需要这些值,所以我将它们作为参数添加到其中 - def getMessage(answer, key):

  5. 我移动了命令

    lengthList = []
    leng = 0
    

    定义成函数getMessage().

  6. 我将您的 while leng <= lengthOfInput1-1: 命令更改为 while leng < len(answer): - 请注意 < 而不是 <=

  7. 你想打印结果 string,而不是单个字符的 list - 所以我将该列表更改为字符串"".join(lengthList) 命令。 (空字符串 "" 用作各个连接字母之间的分隔符,因此它们将在没有空格或其他符号的情况下连接。)

  8. 我删除了所有多余(无用)的语句。