Почему я получаю ошибку типа в моем коде? - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь написать код зашифрованного кода.Мой псевдо для этого: - найти индекс для каждой буквы в текстовом виде - найти индекс для каждой буквы в ключевом сообщении - сложить индексы - новые буквы будут в позиции суммы индексов

Я считаю, что мой код организован правильно, но я не уверен, что что-то упустил, потому что я получаю ошибку типа.

# global constants:
ALPHABET = "abcdefghijklmnopqrstuvwxyz"
ALPHABET_SIZE = len(ALPHABET)

# main function definition:
def main():
    # User interface:
    print("Welcome to the Vigenere Cipher!")

    keep_running = True

    while(keep_running):
        print("Enter 1 to encrypt a message")
        print("Enter 2 to decrypt a message")
        print("Enter 0 to exit")
        print()

        user_choice = int(input("What would you like to do? " ))

        if user_choice == 0:
            keep_running = False

        if user_choice == 1:
            plaintext = input("Enter a plaintext message to encrypt: ")
            key = str(input("Enter a message to use as the key: "))
            ciphertext = enc(key, plaintext)
            print("Resulting cipertext:", ciphertext)
            print()


        if user_choice == 2:
            ciphertext = str(input("Enter a ciphertext message to decrypt: "))
            key = str(input("Enter a message to use as the key: "))
            plaintext = dec(key, ciphertext)
            print("Resulting plaintext:", plaintext)
            print()


def enc(key, plaintext):
    ciphertext = []
    for cipher_char in plaintext:
        char_pos = ALPHABET.index(cipher_char)
    for key_char in key:
        message_pos = ALPHABET.index(key_char)
    new_pos = (char_pos + key_char)
    enc_char = ALPHABET(new_pos)
    plaintext += enc_char
    return plaintext






# call to main:
main()

1 Ответ

1 голос
/ 11 июня 2019

Ошибка в этой строке

new_pos = (char_pos + key_char)

char_pos - позиция и имеет тип int.key_char является символом и имеет тип string.Вы не можете добавить одно к другому.

Также в этих строках непосредственно выше:

    for cipher_char in plaintext:
        char_pos = ALPHABET.index(cipher_char)
    for key_char in key:
        message_pos = ALPHABET.index(key_char)

Каждый из циклов for устанавливает переменные (char_pos и message_pos соответственно) снова и снова.Таким образом, учитываются только позиции последнего символа в каждой строке (открытый текст и ключ соответственно) в алфавите.Поэтому вам нужно немного переосмыслить логику.

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

...