Vigenere Variante1: zu viele Loops
This commit is contained in:
parent
2dd38ae817
commit
f6391d2dc0
54
src/vigenere_cipher_helper.py
Normal file
54
src/vigenere_cipher_helper.py
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
class VigenereCipher(object):
|
||||||
|
def __init__(self, key, alphabet):
|
||||||
|
self.key = key
|
||||||
|
self.alphabet = alphabet
|
||||||
|
|
||||||
|
def encode(self, text):
|
||||||
|
len_text = len(text)
|
||||||
|
len_key = len(self.key)
|
||||||
|
|
||||||
|
if len_key < len_text:
|
||||||
|
new_key = (
|
||||||
|
self.key * (len_text // len_key) + self.key[: (len_text % len_key)]
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
new_key = self.key[:len_text]
|
||||||
|
|
||||||
|
new_text = []
|
||||||
|
|
||||||
|
for l_text, l_key in zip(text, new_key):
|
||||||
|
if l_key in self.alphabet:
|
||||||
|
new_pos = self.alphabet.index(l_text) + self.alphabet.index(l_key)
|
||||||
|
else:
|
||||||
|
new_pos = self.alphabet.index(l_text)
|
||||||
|
new_text.append(self.alphabet[new_pos])
|
||||||
|
return "".join(new_text)
|
||||||
|
|
||||||
|
def decode(self, text):
|
||||||
|
len_text = len(text)
|
||||||
|
len_key = len(self.key)
|
||||||
|
|
||||||
|
if len_key < len_text:
|
||||||
|
new_key = (
|
||||||
|
self.key * (len_text // len_key) + self.key[: (len_text % len_key)]
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
new_key = self.key[:len_text]
|
||||||
|
|
||||||
|
new_text = []
|
||||||
|
|
||||||
|
for l_text in text:
|
||||||
|
for i, l_abc in enumerate(self.alphabet):
|
||||||
|
if l_text == l_abc:
|
||||||
|
for l_key in new_key:
|
||||||
|
for j, l_abc in enumerate(self.alphabet):
|
||||||
|
if l_key == l_abc:
|
||||||
|
new_pos = (i - j) % len(self.alphabet)
|
||||||
|
else:
|
||||||
|
new_pos = i
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
for i, l_abc in enumerate(self.alphabet):
|
||||||
|
if new_pos == i:
|
||||||
|
new_text.append(l_abc)
|
||||||
|
return "".join(new_text)
|
||||||
Loading…
x
Reference in New Issue
Block a user