Найти - Пользователи
Полная версия: Простая версия дешифровщика
Начало » Центр помощи » Простая версия дешифровщика
1 2 3
marvellik
FishHook
Проходимся по исходному тексту и создаем новый - зашифрованный
согласен можно и так но я сделал замену в списке и в чем тут была проблема с циклом?
FishHook
marvellik
согласен можно и так но я сделал замену в списке и в чем тут была проблема с циклом?
В том, что так не делают.
marvellik
хорошо переделал как делают что теперь скажете?
def decode(word,key): 
    decode_word = ''
    for i in word:
        register = 65 if i == i.upper() else 97
        letter = chr(register + (ord(i) - register - int(key)) % 26)
        decode_word += letter
    return decode_word
with open('input.txt','r') as file:
    text = file.read().split()
    
word_key = iter(text)
for word,key in (zip(word_key ,word_key )):
    print(decode(word,key))
кстати пробел после return в исходном коде есть но тут он пропадает
FishHook
marvellik
теперь скажете
Теперь лучше
правда, магические числа несколько напрягают
Я не претендую на истину в последней инстанции, но мне кажется, что pythonic код должен выглядеть как-то так
# -*- coding:utf-8 -*-
import string
   
def get_alphabet(offset):
    keys = list(string.ascii_lowercase)
    values = list(keys[offset:] + keys[:offset])
    keys += [l.upper() for l in keys] + [" "]
    values += [l.upper() for l in values] + [" "]
    return dict(zip(keys, values))
    
def encode(text, alphabet):
    return "".join(alphabet[w] for w in text)
    
def decode(text, alphabet):
    reverse_alphabet = {v: k for k, v in alphabet.items()}
    return encode(text, reverse_alphabet)
    
alphabet = get_alphabet(5)
text = "Hellow word"
encoded = encode(text, alphabet)
print(encoded)
decoded = decode(encoded, alphabet)
print(decoded)
marvellik
а есть ли смысл создавать словарь кодированных букв? каждое слово имеет свой ключ (согласно условию вопроса темы) и при перекодировке каждый раз создавать новый словарь менять местами ключ-значение? как это сказывается на времени выполнения и объеме памяти? дело в том что на тестирующей системе эти параметры отслеживаются и правильное решение может не пройти если не соответствует этим параметрам.про магические цифры - это я подсмотрел где то на форуме когда решал задачу шифрования по длине слова и нужен был циклический сдвиг. можно было бы использовать список букв и длину списка но мне так показалось проще
FishHook
marvellik
То есть alphabet.find() в цикле вас делать не напрягает, а создать один раз словарь на 53 ключа - оверхед?
Глупости совершеннейшие.
marvellik
спасибо. все понятно и доступно. особенно мне понравилась реализация def get_alphabet(offset)
marvellik
FishHook
Я не претендую на истину в последней инстанции, но мне кажется, что pythonic код должен выглядеть как-то так
может быть кроме всего прочего он еще и работать должен а ваш при ключе свыше 25 перестает работать. а при получении данных из файла неправильно дешифрует.
import string
def get_alphabet(offset):
    keys = list(string.ascii_lowercase)
    values = list(keys[offset:] + keys[:offset])
    keys += [l.upper() for l in keys] + [" "]
    values += [l.upper() for l in values] + [" "]
    return dict(zip(keys, values))
    
def encode(word, alphabet):
    return "".join(alphabet[w] for w in word)
    
with open('input.txt') as file:
    text = file.read().split()
    
word_key = iter(text)
for word,key in (zip(word_key ,word_key )):
    alphabet = get_alphabet(int(key))  
    print(encode(word, alphabet))
файл с данными прикрепил попробуйте расшифровать или укажите мне ошибку если есть после изменения кода
FishHook
Я не понимаю, что вы вообще делаете.
Суть вот этих телодвижений я осознать не могу.
word_key = iter(text)
for word,key in (zip(word_key ,word_key )):

marvellik
а ваш при ключе свыше 25 перестает работать
допиливайте сами, я не собирался давать вам готовое решение какой-то частной задачи. Я вам показал, как пишут программы на питоне.
marvellik
FishHook
Я не понимаю, что вы вообще делаете.
Суть вот этих телодвижений я осознать не могу.
text = ['Udymts', '5', 'Pula', '22', 'sefohywxj', '16', 'kzmlqba', '8', 'khbdmrd', '25']
получаю слово и ключ из списка. или опять что то не правильно? а какие еще есть простые варианты?

blmnk
Как мне брать слова и ключи из листа, который получается при разбиении строк исходного файла
я под вопрос автора писал код.допиливает пусть автор а мне больше нужно понять и вникнуть во все нюансы
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB