Шифр Цезаря, нужна помощь

Написала шифр Цезаря, не проходит тесты, уже не знаю что можно сделать с ним. Прошу укажите в чем ошибка , что доработать нужно.

def encrypt_caesar(plaintext: str, shift: int = 3) -> str:
 ciphertext = " "
 import string 
 for i in string.ascii_uppercase: 
     ciphertext = ciphertext + chr(ord(i)+3)%len(string.ascii_uppercase)
 for a in string.ascii_lowercase:
     ciphertext = ciphertext + chr(ord(i)+3)%len(string.ascii_lowercase)
 return ciphertext
print(encrypt_caesar("PYTHON"))

Какие? Что выдает?

У всех тестах сдвиг на 3 позиции? Зачем передаете параметр shift в процедуру?

А как по мне так при чем тут тесты и криптография?
Как, в принципе, можно тестировать шифр?

Так же, как и всё остальное?

Запустить с определенными параметрами, сравнить результат с ожидаемым результатом.

Не понятно.
При тестировании алгоритмов все прозрачно.
В криптографии как?
Допустим тот же шифр “Цезаря”, при не известном значении сдвига как протестировать код на наличие ошибок или уязвимостей?

Так а почему оно неизвестно? Тесту всё известно.
Что-нибудь типа

assert_equals('ожидаемый_шифр', encrypt_caesar('PYTHON', 42))

Если например тестируется какой-то рандом, то можно seed генератора задавать.

А безопасность это уже другой вопрос (но тоже можно в т.ч. и какие-нибудь опасные параметры для теста придумать), для начала хватит убедиться, что хотя бы просто работает на нескольких примерах ) Тем более в учебной задаче.
Ну и в целом цель создания автоматических тестов обычно — просто упростить работу человека, чтобы не вбивать всё руками 100500 раз в день после каждого изменения кода.
Автоматизированное тестирование
https://ru.hexlet.io/blog/posts/how-to-test-code

Так то уже работа тестировщика, пусть вбивает. Ему деньги за работу платят, и не малые…
А вопрос поставил не исходя из учебного задания.
Интересен прцесс тестирования не известного…
В данном случае алгоритм шифрования “Цезарь”.

P. S.
Я к тому что берем не тестировшика в “белом” ящике, а юзерерский подход “черного” ящика.
Т. е. для тестирования данного метода что предпримем?
Метод перебора символов - ничего не даст. Просто потратим временной ресурс…
ИМХО. Здесь скорее перебор и сравнение со словарным запасом подойдет.

Добрый вечер, нет сдвиг на любую позицию по заданию, параметр shift был задан в шаблоне задания.

Возьмите и сами проверьте свой код. У вас маленькие и большие символы сваливаются в цифры и смешиваются, так что при декодировании их раскодировать не получится. Что касается как поправить это зависит от условия задания. Но я бы добавил chr(‘A’) и chr(‘a’).

А вопрос поставил не исходя из учебного задания.
Интересен прцесс тестирования не известного…
В данном случае алгоритм шифрования “Цезарь”.

Если Вас интересует криптоанализ. То первое, что смотрим это распределение символов. Блочные шрифты и архивы имеют равномерное распределение. Архивы zip/7zip вылавливаются по макркерной комбинации бит.
Что касается текста Цезаря. То там достаточно найти наиболее частый символ это будет пробел.
Далее проверка по словарю.
Если у нас шифр просто за ксорин с паролем. То это вычисляется путем поиска пар символов(n-грамм) которые встречаются и не встречаются в обычных текстах. К примеру в русском языке нет слов на ь и ъ соответственно " ь" и " ъ" подсчитывается статистика, и если он

Добрый вечер! Выдает данную ошибку:not all arguments converted during string formatting Это к строке где ciphertext = ciphertext + chr(ord(i)… Я не совсем понимаю, что нужно исправлять в таком случае

Не везде они есть, и нельзя ж каждое изменение так прогонять — написать код и сразу кидать тестировщику. Время разработки сильно растянется. Тестировщику обычно периодически дают более-менее готовый релиз с менее очевидными багами.

Как вариант — зашифровать, расшифровать, проверить, что получилось исходное. (ну и что сразу после зашифровки не оно)

Еще можно один раз вручную проверить результат шифрования, сохранить, и в тесте просто проверять, что получается это же. Для популярных алгоритмов можно взять из тестов других известных реализаций.

chr строку (символ) возвращает, а вы пытаетесь от этого остаток деления найти.