while running this program I am getting the error “TypeError: ‘str’ object is not callable”. Any ideas?
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) %26) + 65)
else:
i += i(((ord(i) + num - 97) %26) + 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)
Advertisement
Answer
There are a couple of problems with the posted code. First, the call to caesar_encrpyt() needs to look like caesar_encrypt(s, step). Secondly, you have two local variables in that function defined as i; that one that’s being returned should be changed to a more descriptive name. Lastly, and what’s causing your error, is i += i(((ord(i) + num - 97) %26) + 97) and i += i(((ord(i) + num - 65) %26) + 65). Here i is a string and as the error suggests, is not callable; instead, this should be calling chr() to convert that result back to a character.
This is what the fixed code should look like: `
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) %26) + 65)
else:
encoded_msg += chr(((ord(i) + num - 97) %26) + 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)
`