@Daniil74
Учу python

Почему программа «шифрования» не работает с русским алфавитом?

a = "абвгдеёжзийклмнопрстуфхцчшщъыьэюяабвгдеёжзийклмнопрстуфхцчшщъыьэюя"
stringToEncrypt = input("введи сообщение: ")
stringToEncrypt = stringToEncrypt.lower
shiftAmount = int(input("введи номер от 1-33, оно будет твоим ключом. "))
encryptedString = ""
for currentCharacter in stringToEncrypt:
    position = a.find(currentCharacter)
    newposition = position + shiftAmount
    encryptedString = encryptedString + a[newposition]
print("твое сообщение зашифровано", encryptedString)


Ошибку выдает:
Traceback (most recent call last):
  File "C:/Users/theda/Desktop/trash/random.py", line 6, in <module>
    for currentCharacter in stringToEncrypt:
TypeError: 'builtin_function_or_method' object is not iterable

Задача из книжки; спросил в школе, учитель сказал что она не знает питона, потомучто его нет в программе. В интернете искал, но ничего не понял.
По условиям задачи алфавит должен быть английский, но я попробовал на русском.
  • Вопрос задан
  • 241 просмотр
Решения вопроса 2
@h_rzr
python-разработчик
Проблема в этой строчке: stringToEncrypt = stringToEncrypt.lower

Если ты всё правильно скопировал, то в ней ты не вызываешь метод lower(), а присваиваешь переменной stringToEncrypt ссылку на него. Т.е. правильно будет: stringToEncrypt = stringToEncrypt.lower()

Чтобы было проще, можно строку stringToEncrypt = stringToEncrypt.lower вообще удалить, и сразу написать:
stringToEncrypt = input("введи сообщение: ").lower()


А теперь подумай, зачем в переменной a словарь у тебя дважды повторяется?
Ответ написан
@dmshar
Исправьте в вашем коде вот эту строчку
stringToEncrypt = stringToEncrypt.lower()
и начинайте уже учиться, учить Python, а не бездумно копипастить чужой код. Толку и пользы будет явно больше.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019
Bigdata Engineer
Плох тот учитель что не видит простой шифр Цезаря. И какая разница Питон или не питон когда
просто надо спросить ученика как он вообще сам понимает свою разработку?

И удвоение алфавита здесь не нужно. Цезарь ведь поворачивает алфавит циклически. Берите остаток от деления на 33. А то что? Был-бы у вас алфавит в терабайт - то вы бы ставили двухтерабайтный диск чтобы решить такую задачу?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы