# Написать функцию XOR_cipher, принимающую 2 аргумента: строку, которую нужно зашифровать,
# и ключ шифрования, которая возвращает строку, зашифрованную путем применения
# функции XOR (^) над символами строки с ключом. Написать также функцию XOR_uncipher,
# которая по зашифрованной строке и ключу восстанавливает исходную строку.


def xor_cipher(string: str, key: int):
    """Функция выполняет шифрование строки string с использованием ключа key.
    Каждая буква строки преобразуется в ASCII-код с последующим его шифрованием."""

    line = [None] * len(string)  # Создаем список, соответсвующий длине строки

    for i in range(len(string)):  # Каждый символ преобразуем в ASCII-код
        # и выполняем над ним операцию XOR с заданным кличом.
        # Преобразуем результат в строку и сохраняем в список line.
        line[i] = str(ord(string[i]) ^ key)

    return " ".join(line)  # Выводим результат шифрования в одну строку, разделяя элементы пробелами.


def xor_uncipher(string: str, key: int):
    """Функция расшифровывает последовательность цифр, разделенных пробелами
    и преобразует в текст с использованием ключа key."""

    line = string.split()  # Разбиваем строку по пробелам

    for i in range(len(line)):  # Над каждой цифрой выполняем операцию XOR
        # с заданным кличом и преобразуем в исходный символ,
        line[i] = chr(int(line[i]) ^ key)  # сохраняем в список line.

    return "".join(line)  # Выводим в виде строки


new = xor_cipher('Text for translation', 146)
print(new)

new_2 = xor_uncipher(new, 146)
print(new_2)
