пытаюсь написать программу Python для создания шифрования Цезаря - PullRequest
0 голосов
/ 26 мая 2020
string = input("Enter your string ")
for i in string:
     alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
     cipher = "ZYXWVUTSRQPONMLKJIHGFEDCBA"
     char = alphabet.find(i)
     ciphered = string.replace(i,cipher[char])
print(ciphered)

Есть идеи, почему это возвращает только последнюю букву измененной строки?

Ответы [ 3 ]

1 голос
/ 26 мая 2020

Каждый раз, когда вы go через свой l oop, вы заменяете одну букву в string, а затем присваиваете результат этой однобуквенной подстановки ciphered, перезаписывая любое значение, которое оно имело ранее. Значение, которое вы получите в конце, - это значение, которое было присвоено во время последней l oop итерации.

Фактически изменение строки на месте с помощью replace - плохая идея, так как вы в конечном итоге перевернете одни и те же буквы туда и обратно. Вместо этого вы можете итеративно создавать зашифрованную строку:

alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
cipher = "ZYXWVUTSRQPONMLKJIHGFEDCBA"
ciphered = ""
for char in string:
    i = alphabet.find(char)
    ciphered += cipher[i]
0 голосов
/ 26 мая 2020

Возможно, вам также следует преобразовать строку в заглавные буквы, потому что в противном случае функция find () может вернуть значение -1. ​​

string = string.capitalize()

0 голосов
/ 26 мая 2020

Изменяется только последняя буква, потому что вы создаете строку ciphered для каждого l oop из исходной входной строки, поэтому на последнем l oop изменяется только последний элемент.

string = input("Enter your string ")
ciphered = ""
alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
cipher = "ZYXWVUTSRQPONMLKJIHGFEDCBA"
for i in string:
     char = alphabet.find(i)
     ciphered += cipher[char]
print(ciphered)

Это должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...