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)
解释:
您的 message()
函数使用用户输入填充 answer1
和 key
变量,然后 将它们丢弃 ,因为这些只是 local 变量 - 此函数定义之外的 answer1
和 key
是 others 变量。
所以我包含了 return
命令来保存它们(并将 answer1
重命名为 answer
)。
你的message()函数中key变量的类型是str(string),但是你需要int。所以return语句中的int(key)
.
在主代码中,我保存了那些 returned 值 - answer, key = message()
命令。
您的函数 getMessage()
需要这些值,所以我将它们作为参数添加到其中 - def getMessage(answer, key):
我移动了命令
lengthList = []
leng = 0
定义成函数getMessage()
.
我将您的 while leng <= lengthOfInput1-1:
命令更改为 while leng < len(answer):
- 请注意 <
而不是 <=
。
你想打印结果 string,而不是单个字符的 list
- 所以我将该列表更改为字符串"".join(lengthList)
命令。 (空字符串 ""
用作各个连接字母之间的分隔符,因此它们将在没有空格或其他符号的情况下连接。)
我删除了所有多余(无用)的语句。
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)
解释:
您的
message()
函数使用用户输入填充answer1
和key
变量,然后 将它们丢弃 ,因为这些只是 local 变量 - 此函数定义之外的answer1
和key
是 others 变量。 所以我包含了return
命令来保存它们(并将answer1
重命名为answer
)。你的message()函数中key变量的类型是str(string),但是你需要int。所以return语句中的
int(key)
.在主代码中,我保存了那些 returned 值 -
answer, key = message()
命令。您的函数
getMessage()
需要这些值,所以我将它们作为参数添加到其中 -def getMessage(answer, key):
我移动了命令
lengthList = [] leng = 0
定义成函数
getMessage()
.我将您的
while leng <= lengthOfInput1-1:
命令更改为while leng < len(answer):
- 请注意<
而不是<=
。你想打印结果 string,而不是单个字符的
list
- 所以我将该列表更改为字符串"".join(lengthList)
命令。 (空字符串""
用作各个连接字母之间的分隔符,因此它们将在没有空格或其他符号的情况下连接。)我删除了所有多余(无用)的语句。