Python TypeError между int и str, где не должно быть ...? - PullRequest
0 голосов
/ 14 апреля 2020

Я довольно долго смотрю на следующий сегмент кода, но до сих пор не понимаю, почему я получаю сообщение "TypeError: неподдерживаемые типы операндов для +: 'int' и 'str'" Строка 8. Может ли кто-нибудь предложить способ исправить это? Изначально я не думал, что мне нужно будет приводить к str () или к int (), но я перепробовал почти все, что мог придумать. Может кто-нибудь помочь, пожалуйста?

L2I = dict(zip("ABCDEFGHIJKLMNOPQRSTUVWXYZ",range(26)))
I2L = dict(zip(range(26),"ABCDEFGHIJKLMNOPQRSTUVWXYZ"))

def encrypt(text, key):

        ciphertext = ''
        for c in text.upper():
                if c.isalpha(): ciphertext += str(I2L[ (int(L2I[c]) + key) % 26])
                else: ciphertext + c
        return ciphertext

def decrypt (ciphertext, key):

        plaintext = ''

        for c in ciphertext.upper(): 
                if c.isalpha(): plaintext2 += str(I2L[ (int(L2I[c]) - key) % 26])
                else: plaintext + c
        return plaintext


message = input('Enter plaintext: ')
key = input('Enter key value (1-25): ')

print ('Plaintext was: ', message)
print (encrypt(message, key))
print (decrypt(encrypt(message, key), key))

Спасибо!

1 Ответ

1 голос
/ 14 апреля 2020

Вызов input() на линии key = input("Enter key value (1-25): ") возвращает str, даже если пользователь передает номер. Таким образом, ваш key не int, как ожидалось, а str. Чтобы избежать этого, сделайте

key = int(input("Enter a key value (1-25):" ))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...