#python
#python
Вопрос:
Я столкнулся с проблемой с моим кодом, я подозреваю, что это мое использование метода replace, но я не уверен. Я хочу написать код, который будет шифровать строку, на которую ссылается переменный открытый текст, используя шифр caesar со сдвигом на 1, а затем сохранить результат в переменной ciphertext; сохранение его там, где мое значение неверно.
plaintext = 'thequickbrownfoxjumpsoverthelazydog'
alphabet = 'abcdefghijklmnopqrstuvwxyz'
ciphertext = 'thequickbrownfoxjumpsoverthelazydog'
for i in range(len(plaintext)):
j = plaintext[i]
j_index = alphabet.index(j)
if j_index 13 >= 26:
j_index = (j_index 13) % 26
else:
j_index =13
ciphertext = ciphertext.replace(j,alphabet[j_index])
print(ciphertext[i])
print(ciphertext)
Когда я печатаю каждый отдельный символ, он дает мне желаемые результаты, но когда я печатаю зашифрованный текст в целом, некоторые буквы отличаются, а значение неверно. Спасибо за помощь, ТИА.
Я хочу, чтобы мой вывод был: ‘gurdhvpxoebjasbkwhzcfbiregurynmlqbt’, вместо этого я получаю ‘turquickbrbwnfbkwumcfbirrturlnmlqbt’
Отредактировано, чтобы исправить код и добавить вывод.
Комментарии:
1. пожалуйста, введите ожидаемый результат
2.
j = plaintext[i]
вы ссылаетесьplaintext
, даже если вы никогда не определяли его, я предполагаю, что это опечатка?3. Представьте, что ваш обычный текст — это «a». Сначала у вас есть i = 0 и измените «a» на «n». Тогда мы i = 13, вы измените «n» обратно на «a». Ваша ошибка заключается в том, что вы не различаете символы, которые уже были закодированы, и те, которые еще не были закодированы. Вы получите неправильный ответ для каждой буквы между a и m.
Ответ №1:
Проблема в том, что символы заменяются более одного раза, потому что мы заменяем всю строку не в точном месте
plaintext = 'thequickbrownfoxjumpsoverthelazydog'
alphabet = 'abcdefghijklmnopqrstuvwxyz'
ciphertext = 'thequickbrownfoxjumpsoverthelazydog'
ciphertextfinal = ''
for i in range(len(plaintext)):
j = plaintext[i]
j_index = alphabet.index(j)
if j_index 13 >= 26:
j_index = (j_index 13) % 26
else:
j_index =13
ciphertext = ciphertext.replace(j,alphabet[j_index])
ciphertextfinal = ciphertext[i]
print(ciphertext[i])
print(ciphertextfinal)
#prints gurdhvpxoebjasbkwhzcfbiregurynmlqbt
Я просто использовал замененную позицию и создал из нее строку, объединив ее в переменную
Комментарии:
1. Большое вам спасибо! Теперь работает отлично. Для дополнительного пояснения я думал, что мой код просматривает индивидуальное расположение каждой буквы в открытом тексте, а цикл for перебирает эти отдельные символы. Не могли бы вы подробнее объяснить, почему он заменял их более одного раза?
2. ваша строка — abcdef, после цикла 1 новая строка: cbcdef (от a до c), после цикла 2: cdcdef (от b до d), после цикла 3: ededef (от c до e), после цикла 4: efefef (от d до f) и так далее
3. итак, вы видите, что если вы измените ту же строку, это также заменит старые значения, которые хороши, но неверны.