#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() ,