Это происходит потому, что вы не присвоили переменную answer1
во внешнем.В методе message()
вы присвоили значения переменным, локальным для его области, а не переменной answer1
во внешней области, как вы хотели.
Вы должны передать ее как параметр, ивернуть его значение, чтобы оно сохранило свое значение.
Аналогично, 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()
.Вам нужно будет вернуть его в родительскую область, чтобы получить к нему доступ.
Более того, чтобы сделать преобразование списка в строку, вам нужно будет выполнить итерации в списке и продолжать добавлять пустую строку.Примерно так:
messageCoded = ""
for i in messageList:
messageCoded += i
print(messageCoded)
Убедитесь, что вы правильно держите прицелы, и у вас все получится. Эта статья объясняет хорошо и хорошо.