From f6391d2dc00f3ff595449c4ca697755773ba83ab Mon Sep 17 00:00:00 2001 From: Julia Hauer Date: Sat, 14 Mar 2026 15:08:03 +0100 Subject: [PATCH] Vigenere Variante1: zu viele Loops --- src/vigenere_cipher_helper.py | 54 +++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/vigenere_cipher_helper.py diff --git a/src/vigenere_cipher_helper.py b/src/vigenere_cipher_helper.py new file mode 100644 index 0000000..fb5401a --- /dev/null +++ b/src/vigenere_cipher_helper.py @@ -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)