Форум сайта python.su
Привет, делаю домашнее задание, нужна помощь.
Есть файл с набором зашифрованных слов и ключом к ним.
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)
Офлайн
дешифровка шифра Цезаря.
мой вариант таков
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)
Офлайн
marvellik
Вы не понимаете, как устроены циклы в питоне. Все плохо.
Офлайн
FishHookну так объясните в чем плохо? на то он и форум чтоб объясняли то чего нет в учебниках.
Вы не понимаете, как устроены циклы в питоне. Все плохо.
Офлайн
marvellikВы не читали ни одного учебника, не врите.
на то он и форум чтоб объясняли то чего нет в учебниках
marvellikВы представить себе не можете, о чем спрашивают люди на форумах.
то люди бы не задавали вопросов на форуме
Офлайн
FishHookвот мой первый учебник http://pythontutor.ru/visualizer/
Вы не читали ни одного учебника, не врите
Отредактировано marvellik (Май 16, 2016 12:22:20)
Офлайн
Зачем в вашем цикле нужен range?
Офлайн
Наверное имелось вот это:
Цикл по списку
Плохо: часто бывшие С программисты пишут так.
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)
Офлайн
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() # тут как поступать?
Офлайн
marvellikА зачем вообще это делать? Проходимся по исходному тексту и создаем новый - зашифрованный.
а как тогда заменять элемент
for index, el in emumerate(items): pass
Отредактировано FishHook (Май 16, 2016 13:12:32)
Офлайн