Есть пара вопросов.Во-первых, вы увеличиваете shift
каждый раз, когда проверяете один символ.На самом деле, вы хотите увеличивать его только после каждого полного цикла сообщения.Вы также должны переместить инициализацию в функцию.Нет смысла передавать shift
, поскольку вы просто пробуете все 26 возможностей по порядку.
def decipher(msg_ans):
shift = 0
while shift < 26:
for i in msg_ans.upper():
if i.isalpha() == True :
msg_ans += I2L[ (L2I[i]+ shift)%26 ]
else:
msg_ans += i
shift += 1
print (msg_ans)
На данный момент, однако, нет причин использовать цикл while
вместоfor
:
def decipher(msg_ans):
for shift in range(26):
for i in msg_ans.upper():
if i.isalpha() == True :
msg_ans += I2L[ (L2I[i]+ shift)%26 ]
else:
msg_ans += i
print (msg_ans)
Другая проблема заключается в том, что вы просто добавляете новые символы в конец вашей входной строки.Вы не указываете, в какой форме вы на самом деле хотите, поэтому предположим, что вы хотите это в списке строк.Вам нужно будет инициализировать список, построить временную строку на каждой итерации, а затем добавить временную строку в список:
def decipher(msg_ans):
possible_messages = []
for shift in range(26):
decoded_msg = ''
for i in msg_ans.upper():
if i.isalpha() == True :
decoded_msg += I2L[ (L2I[i]+ shift)%26 ]
else:
decoded_msg += i
possible_messages.append(decoded_msg)
return possible_messages
Затем просто напечатать результат вашего вызова функции:
print(decipher(msg_ans))