Получение ошибки типа: объект ‘str’ не может быть вызван в моем скрипте

#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)
 

`