#python #string
Вопрос:
во время запуска этой программы я получаю ошибку «Ошибка типа: объект ‘str’ не может быть вызван». Есть какие-нибудь идеи?
def caesar_encrypt(text,num):
i = ""
for i in text:
if not i.isalpha():
i = i
elif i.isupper():
i = i(((ord(i) num - 65) &) 65)
else:
i = i(((ord(i) num - 97) &) 97)
return i
s=input("please enter the message: ")
step=int(input("now enter the step "))
encrypted_msg=caesar_encrypt(s, num)
print(encrypted_msg)
Комментарии:
1.
encrypted_msg=caesar_encrypt(s, num)
->encrypted_msg=caesar_encrypt(s, step)
2. Добро пожаловать в SO! Как это
i( ... bunch of other stuff ... )
должно работать? Ошибка очевидна: вы вызываете строку типа"x"()
, которая минимально воспроизводит проблему.i
это струна. По-видимому, у вас проблема со сглаживанием переменных, связанная с перезаписью внешнего параметра циклаi
. Используйте толькоi
для целых чисел и индексов, а не для строк или элементов. Чего вы пытаетесь достичь?3. всегда помещайте полное сообщение об ошибке (начинающееся со слова «Обратная связь») в вопрос (не комментарий) в виде текста (не скриншот, не ссылка на внешний портал). Есть и другая полезная информация.
4. Я думаю, вам следует просто удалить
i
то, что у вас было раньше()
вi = i(...)
5. Вы тоже должны уметь декодировать закодированную строку?
Ответ №1:
Есть пара проблем с опубликованным кодом. Во-первых, вызов caesar_encrpyt()
должен выглядеть так caesar_encrypt(s, step)
. Во-вторых, у вас есть две локальные переменные в этой функции, определенные как i
; возвращаемая переменная должна быть изменена на более описательное имя. Наконец, и то, что вызывает вашу ошибку, — это i = i(((ord(i) num - 97) &) 97)
и i = i(((ord(i) num - 65) &) 65)
. Вот i
строка, и, как следует из ошибки, она не может быть вызвана; вместо этого она должна быть вызвана chr()
для преобразования этого результата обратно в символ.
Вот как должен выглядеть фиксированный код: `
def caesar_encrypt(text,num):
encoded_msg = ""
for i in text:
if not i.isalpha():
encoded_msg = i
elif i.isupper():
encoded_msg = chr(((ord(i) num - 65) &) 65)
else:
encoded_msg = chr(((ord(i) num - 97) &) 97)
return encoded_msg
s=input("please enter the message: ")
step=int(input("now enter the step "))
encrypted_msg=caesar_encrypt(s, step)
print(encrypted_msg)
`