Уведомления

Группа в Telegram: @pythonsu

#1 Май 15, 2016 19:30:57

blmnk
Зарегистрирован: 2016-05-15
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Простая версия дешифровщика

Привет, делаю домашнее задание, нужна помощь.

Есть файл с набором зашифрованных слов и ключом к ним.

CLGUBA 13
JGNNQ 7

нужно написать приложение, которое открывает файл, использует ключ, и дешифрует слово.
Как мне брать слова и ключи из листа, который получается при разбиении строк исходного файла, и прогонять их через дешифровку? Как лучше, словарем, листом, набором? Пробовал составлять nested loop, но каша получается.

def codebreaker(filename):
#filename = input('Enter the input filename:')
filedata = open(filename, ‘r’)
cypertext = filedata.read()
text = cypertext.splitlines()

alphabet = ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’
word = ‘CLGUBA’
key = 13
set1 =

код для дешифрования (если символы совпадают берет индекс символа в alphabet отнимает ключ, и возвращает букву с новым индексом

for letter in word:
for i_alphabet in alphabet:
if letter == i_alphabet:
set1.append(alphabet)

вывод дешифрованного слова
ev_word = ''.join(set1)
print(ev_word)

Офлайн

#2 Май 16, 2016 11:11:40

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Простая версия дешифровщика

дешифровка шифра Цезаря.
мой вариант таков

def decode(word,key,alphabet): 
    word = list(word)
    for i in range (len(word)):
        index=alphabet.find(word[i].lower())-int(key) # тут наверно правильней циклический сдвиг реализовать
        word[i] = alphabet[index] if word[i]==word[i].lower() else alphabet[index].upper()
        
    return ''.join(word)
with open('input.txt','r') as file:
    text = file.read().split()
alphabet = ''.join(chr(x) for x in range(ord('a'),ord('z')+1))
word_key = iter(text)
for word,key in (zip(word_key ,word_key )):
    print(decode(word,key,alphabet))

Отредактировано marvellik (Май 16, 2016 11:19:31)

Офлайн

#3 Май 16, 2016 11:59:48

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Простая версия дешифровщика

marvellik
Вы не понимаете, как устроены циклы в питоне. Все плохо.



Офлайн

#4 Май 16, 2016 12:09:05

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Простая версия дешифровщика

FishHook
Вы не понимаете, как устроены циклы в питоне. Все плохо.
ну так объясните в чем плохо? на то он и форум чтоб объясняли то чего нет в учебниках.
если бы в учебниках было все так прекрасно понятно и доступно то люди бы не задавали вопросов на форуме

Офлайн

#5 Май 16, 2016 12:11:32

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Простая версия дешифровщика

marvellik
на то он и форум чтоб объясняли то чего нет в учебниках
Вы не читали ни одного учебника, не врите.
А если всё-таки читали, перечитайте еще раз.
Не поймете - в третий раз читайте.
marvellik
то люди бы не задавали вопросов на форуме
Вы представить себе не можете, о чем спрашивают люди на форумах.



Офлайн

#6 Май 16, 2016 12:18:39

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Простая версия дешифровщика

FishHook
Вы не читали ни одного учебника, не врите
вот мой первый учебник http://pythontutor.ru/visualizer/
так же читал Douson_M_-_Programmiruem_na_Python_-_2014, python-3-samoe-neobhodimoe, Лутц М. - Изучаем Python (4-е издание)- 2011 а в чем проблема у меня с циклом так и не узнал. может просвятите лучше чем нотации читать и флуд разводить?

Отредактировано marvellik (Май 16, 2016 12:22:20)

Офлайн

#7 Май 16, 2016 12:40:28

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Простая версия дешифровщика

Зачем в вашем цикле нужен range?



Офлайн

#8 Май 16, 2016 12:41:13

Vigi
От: Курья, Алтай
Зарегистрирован: 2015-02-07
Сообщения: 144
Репутация: +  8  -
Профиль   Отправить e-mail  

Простая версия дешифровщика

Наверное имелось вот это:
Цикл по списку

Плохо: часто бывшие С программисты пишут так.

colors = ['red', 'green', 'blue', 'yellow']
for i in range(len(colors)):
    print colors[i]

Хорошо: лучший вариант.
colors = ['red', 'green', 'blue', 'yellow']
for color in colors:
    print color

источник: Тут

Да и с отступами в коде тоже не все так гладко…

Отредактировано Vigi (Май 16, 2016 12:44:20)

Офлайн

#9 Май 16, 2016 13:00:23

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Простая версия дешифровщика

FishHook
Зачем в вашем цикле нужен range?
а как тогда заменять элемент в списке на декодированный?
если напрямую получать элемент а не по индексу
 for i in word:
        index=alphabet.find(word.lower())-int(key) # тут наверно правильней циклический сдвиг реализовать
        word[i] = alphabet[index] if word[i]==word[i].lower() else alphabet[index].upper() # тут как поступать?

Офлайн

#10 Май 16, 2016 13:11:40

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Простая версия дешифровщика

marvellik
а как тогда заменять элемент
А зачем вообще это делать? Проходимся по исходному тексту и создаем новый - зашифрованный.
Но если сильно надо, то делают так
for index, el in emumerate(items):
     pass



Отредактировано FishHook (Май 16, 2016 13:12:32)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version