Ошибка ввода: не все аргументы преобразуются во время форматирования строки. если (i%2==0):

#python #encryption

Вопрос:

   def encrypted(message):
    encrypted=' '
    for i in message:
        if (i%2==0):
            num = ord(message[i])
            num  = 2
            encrypted = message[num]
        else:
            num = ord(message[i])
            num  = 1
            encrypted = message[num]
    return encrypted

def decrypted(message):
    decrypted = ' '
    for i in message:
        if (i%2 == 0):
            num = ord(message[i])
            num -= 2
            decrypted = message[num]
        else:
            num = ord(message[i])
            num -= 1
            decrypted = message[num]
    return decrypted

def main():

message = str(input("Enter the message: "))
encrypted_msg = encrypted(message)
print("Encrypted message:", encrypted_msg)
decrypted_msg = decrypted(encrypted_msg)
print("Decrypted message:", decrypted_msg)
print("Original message:", message)

if __name__ == '__main__':
    main()
 

Чего я хочу добиться: это грядущая ошибка. Я хочу зашифровать и расшифровать символы в зависимости от их положения в сообщении, находятся ли они в нечетных или четных местах. что мне делать?

 if (i%2==0):
Error: TypeError: not all arguments converted during string formatting
 

Комментарии:

1. % означает что-то другое, когда применяется к строке, чем когда применяется к целому числу.

2. i это буква, вы хотите проверить ее индекс в строке. Вы, вероятно, захотите использовать enumerate() .

3. Не очевидно, что ваша функция шифрования обратима. (По крайней мере, вы хотите добавить к encrypted , encrypted = message[num] .)

4. Функция @ThierryLathuille enumerate() выдает ошибку: ошибка типа: неподдерживаемые типы операндов для %: «перечислять» и «int».

5. Да, но даже если вы это сделаете , я не уверен, что вы сможете однозначно расшифровать полученное сообщение. Похоже, что два разных символа в одной и той же позиции могут быть сопоставлены одному и тому же символу.