В этом простом коде, когда я даю ему текстовый файл, программа шифрует его, а затем расшифровывает, вопрос в том, почему строка if ch != '\n' не работает, а все символы '\n игнорируются, когда файл расшифрован?
# Encryption
file_location = input('Enter the loaction of your text file: ')
def encrypt_file(paragraphs: list):
output = ''
for ph in paragraphs:
for ch in ph:
ASCII_of_ch = ord(ch)
ASCII_of_ch = int((ASCII_of_ch + 5))
output += chr(ASCII_of_ch)
return output
with open(file_location, 'r+', encoding='UTF-8') as text_file:
text_paragraphs = text_file.readlines()
enc_text = encrypt_file(text_paragraphs)
text_file.seek(0)
text_file.write(enc_text)
print('Done!!')
# Decryption
file_location = input('Enter the loaction of your encrypted file: ')
def decrypt_file(text: str):
output = ''
for ch in text:
ASCII_of_ch = ord(ch)
ASCII_of_ch = int((ASCII_of_ch - 5))
output += chr(ASCII_of_ch)
return output
with open(file_location, 'r+', encoding='UTF-8') as text_file:
file_text = text_file.read()
enc_text = decrypt_file(file_text)
text_file.seek(0)
text_file.write(enc_text)
print('Done!!')
Когда я пишу:
Привет
Как вы?
Как дела?
после расшифровки получается:
Привет, как дела? Как дела?
🤔 А знаете ли вы, что...
Python используется в разработке игр с помощью библиотеки Pygame.
Вы разделяете файл по \n, а это значит, что будут удалены все \n. Также по какой-то причине в вашем коде дважды есть блок with open, и непонятно почему.
Вот более эффективное переписывание вашего кода.
file_location = input('Enter the location of your text file: ')
with open(file_location, 'r+', encoding='UTF-8') as text_file:
text = text_file.read()
output = ""
for ch in text:
if ch != "\n":
ch_ascii = ord(ch)
output += chr(ch_ascii - 5)
else:
output += "\n"
print(output)
Вам необходимо внести некоторые изменения в функцию encrypt_file(paragraphs: list)
. Потому что, когда вы пытаетесь разделить текст с помощью text_file.read().split('\n')
, \n
из него удаляется.
Теперь я предлагаю создать переменную output
, которая будет хранить зашифрованный текст для каждой строки, и когда шифрование одной строки будет завершено, добавьте зашифрованный текст в переменную list
и очистите output
. Повторите этот процесс для всех строк, и в конце вы можете присоединиться ко всему списку, используя \n
, чтобы вернуть зашифрованный текст с помощью \n
.
Вот исправленная версия функции:
def encrypt_file(paragraphs: list):
encrypted_list = []
for ph in paragraphs:
output = ''
for ch in ph:
if ch != '\n':
ASCII_of_ch = ord(ch)
ASCII_of_ch = int((ASCII_of_ch + 5))
output += chr(ASCII_of_ch)
else:
output += ch
encrypted_list.append(output)
enc_text = '\n'.join(encrypted_list)
return enc_text
Пожалуйста, одобрите это решение, если вы считаете его полезным.