Я пытаюсь сделать шифр caeser в python (3.8), и появляются постоянные ошибки - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь закодировать Цезарь, но каждый раз, когда я пытаюсь исправить ошибку, она не работает. Кажется, всегда есть строка или целочисленная ошибка. Все значения получаются хорошо, нет проблем с переменными, насколько я понимаю. Я чувствую, что проблема заключается в том, что я неправильно пишу код, но я не могу понять, что это такое.

Мой код:

message = ''

mode = ''



print("Type what sort of function you would like. (NOTE: only lowercase, and the values of 'encrypt' and 'decrypt' are accepted)")

mode = input("What mode do you want: ")

message = input('What is the message you want to encrypt/decrypt: ')

key = input('What is the key: ')

SYMBOLS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 !?.'


translated = ''

for symbol in message:
    # Note: Only symbols in the `SYMBOLS` string can be encrypted/decrypted.
    if symbol in SYMBOLS:
        symbolIndex = SYMBOLS.find(symbol)

        # Perform encryption/decryption:
        if mode == 'encrypt':
            translatedIndex = symbolIndex + key
        elif mode == 'decrypt':
            translatedIndex = symbolIndex - key


        # Handle wrap-around, if needed:
        if translatedIndex >= len(SYMBOLS):
            translatedIndex = translatedIndex - len(SYMBOLS)
        elif translatedIndex < 0:
            translatedIndex = translatedIndex + len(SYMBOLS)

        translated = translated + SYMBOLS[translatedIndex]
    else:
        # Append the symbol without encrypting/decrypting:
        translated = translated + symbol

print(translated)

Отображаемая ошибка выглядит следующим образом:

Traceback (most recent call last):
  File "C:/Users/mghaf/Desktop/Coding/coding/My codes (cypher)/caesarCipher.py", line 27, in <module>
    translatedIndex = symbolIndex + key
TypeError: unsupported operand type(s) for +: 'int' and 'str'

1 Ответ

0 голосов
/ 24 января 2020

Ошибка, которую вы получаете, связана с тем, что вы пытаетесь сложить int и str.

В частности, следующую строку:

key = input('What is the key: ')

выдает str, даже если str содержит числа. Самое простое изменение - просто привести результат input() к int, например, заменить эту строку на:

key = int(input('What is the key: '))

В качестве примечания, ваш код для обработки переноса требует небольшой key. Если ваш key скажем, 1000, вам нужен другой подход. Обычно это решается с помощью операции по модулю .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...