Он не возвращает расшифрованный текст, а возвращает только зашифрованный текст

#python #encryption

#python #шифрование

Вопрос:

моя программа не возвращается в расшифрованном виде. почему? пожалуйста, помогите, кажется, я возвращаю зашифрованную версию y я попытался переместить команду возврата, но результат был тот же. кто-нибудь знает, что не так?

 

def translate(x):
    count = 0
    while count < 1000:

        y.replace("quebrqerubfq92983rgh", "A")
        y.replace("837bfv8g24gh2783", "C")
        y.replace("9q37f93724f9732f", "E")
        y.replace("eqvrgb8rgbb452", "G")
        y.replace("1974f17934hf7h", "I")
        y.replace("1973f9734fbviu3", "K")
        y.replace("urhg9327hg9283g", "M")
        y.replace("18374f19374h983h", "O")
        y.replace("94fh93184hf91834f", "Q")
        y.replace("9rugueirgquierg", "S")
        y.replace("294uv94ugh293ugh928", "U")
        y.replace("29gh3i1fb94h9834h", "W")
        y.replace("193fh18934hfhb", "Y")
        y.replace("q9eurfuerhg93458htg", "B")
        y.replace("feugb2er9gh923gh", "D")
        y.replace("3ourv9u3rv93uv", "F")
        y.replace("v19u3rf9831hf89134h", "H")
        y.replace("913ufh9183hf91834", "J")
        y.replace("31uhf91384hf9834f", "L")
        y.replace("319fuh19hgf91834", "N")
        y.replace("fu3bf91u34bf1u34f", "P")
        y.replace("8134f87134fg13", "R")
        y.replace("f319u4f319u4hf3491", "T")
        y.replace("vq3yrbqbfuf", "V")
        y.replace("jirfbqiweufwqr440", "X")
        y.replace("qiuefqweurewiub", "Z")
        count = count   1
    return y

x = input("")
import os
for foldername, subfolders, filenames in os.walk("g:"):
    for subfolder in subfolders:
        for filename in filenames:
            if filename == x:
                x = open(x, "r")
                y = x.read()
result = translate(x)
print(result)
 

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

1. 1. Вы переходите x в функцию, но используете y …!? 2. str.replace не изменяет строку на месте ! Он возвращает новую строку.

2. Кроме того, какое-то сопоставление более уместно, чем множественное .replace() . Подумайте о словаре.

3. Почему 26 строк кода вместо 1 цикла?

Ответ №1:

y.replace(...) возвращает новую строку — она не работает на месте, поскольку строки неизменяемы. Попробуйте y = y.replace(...) .

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

1. Кроме того, способ, которым вы, похоже, его вызываете, translate() будет вызван только один раз, с последним найденным вами файлом, как открытый файловый объект, а не строка.

2. @Austin Да, но это устраняет симптом, упомянутый в OP. Возможно, им потребуется исправить и другое, но я подозреваю, что это неработающий пример кода, а не реальная вещь, иначе они бы не нашли проблему!

Ответ №2:

Это потому, что у вас есть некоторые символы нижнего регистра в некоторых строках вашего файлового содержимого, или / и может быть цифрами.

я думаю, вы должны преобразовать каждую нижнюю строку в строку upperc для каждой строки содержимого вашего файла, используя функцию upper() .

вы можете заменить y = x.read() на :

 y = x.read().upper()
 

однако @bunner является правильным, u должен измениться y.replace(..) на :

y = y.replace(..) .

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

1. Неясный шифр подстановки, который использует OP, похоже, предполагает, что расшифруемый файл состоит из всех строчных букв (иначе не было бы уникальной расшифровки). Ваше предложение просто сделало бы невозможным расшифровку.

2. Я думаю, он работает только с прописными буквами, и я видел это в его коде, поэтому я просто предлагаю ему взглянуть на разные размеры регистров (нижний / верхний), используя .upper() ,