Форум сайта python.su
0
Здравствуйте, пытался написать шифровщик для шифра Виженера
abc = list("abcdefghijklmnopqrstuvwxyz") ABC = list("ABCDEFGHIJKLMNOPQRSTUVWXYZ") word = input() key = input() global wordcount global count global abcup abcup = list() global keycount def code(word, key): word = list(word) key = list(key) a = len(word) acopy = a while(a): if(word[count].isupper()): wordcount = abc.index(word[count]) abcup[word[count]] = 0 else: wordcount = ABC.index(word[count]) abcup[word[count]] = 1 if(key[count].isupper()): keycount = abc.index(key[count]) else: keycount = ABC.index(key[count]) coded = list() coded[count] = wordcount + keycount count = count + 1 a = a - 1 count = 0 while(acopy): if(abcup[count] == 1): keycount = ABC.index(coded[count]) coded[count] = keycount else: keycount = abc.index(coded[count]) count = count + 1 acopy = acopy - 1 return(coded) '''def decode(word, key): word = list(word) key = list(key) ''' code(word, key)
Traceback (most recent call last):помогите!!!
File “/Users/Vlad/PycharmProjects/untitled/vijiner.py”, line 55, in <module>
code(word, key)
File “/Users/Vlad/PycharmProjects/untitled/vijiner.py”, line 17, in code
if(word.isupper()):
UnboundLocalError: local variable ‘count’ referenced before assignment
Офлайн
186
Шифр Виженера это просто.
tabula_recta = ["".join([ chr(x) for x in xrange(97+y, 123+y) if x < 123 ] + [ chr(x-123+97) for x in xrange(97+y, 123+y) if x >= 123 ]) for y in xrange(26) ] def norm_key(key, word): return key * (len(word)//len(key)) + key[:len(word)%len(key)] def coder(word, key): return "".join([ tabula_recta[ord(x)-97][ord(y)-97] for (i,x) in enumerate(word) for (n,y) in enumerate(norm_key(key, word)) if n == i ]) def decoder(word, key): return "".join([ chr(tabula_recta[ord(x)-97].index(y)+97) for (i,x) in enumerate(norm_key(key, word)) for (n,y) in enumerate(word) if n == i ]) >>> coder("rodegast", "lord") 'ccuhrojw' >>> decoder("ccuhrojw", "lord") 'rodegast'
Отредактировано Rodegast (Июль 30, 2018 16:58:35)
Офлайн
13
Лмао, изи пизи. Я с этой легкотни начинал, Цезарь, Бекон, Вижинер.
Вот пример:
def vegenere(text: str, key: str, encrypt: bool): return "".join([chr((ord(text[a]) + (-ord(key[a % len(key)]) if not encrypt else ord(key[a % len(key)])) ) % 0x110000) for a in range(text.__len__())])
# Life loop while alive: if (fun > boredom) and money: pass_day(fun, boredom, money) continue else: break
Офлайн
186
> Вот пример … Это за 3 минуты, просто я долго интересовался всякими шифрами
Это будет работать если у тебя нет строго заданного алфавита и ты можешь использовать всю плоскость юникода. Ну и лучше разбить это на 2 функции.
Офлайн
13
Ну наверно. И даже если алфавит ограниченный, можно легдко изменить chr и ord на
list.index; list[index]
# Life loop while alive: if (fun > boredom) and money: pass_day(fun, boredom, money) continue else: break
Отредактировано DamMercul (Авг. 2, 2018 22:29:14)
Офлайн