Vigenere Chiffre – nicht korrekte Werte hinzufügen

Ich möchte bestimmte Werte aus einer for-Schleife erhalten, um einen anderen String hinzuzufügen, um eine Vigenere-Chiffre zu erstellen.

Hier ist der Code.

userinput = input('enter message') keyword = input('enter keyword') new = '' for a in keyword: pass for i in (ord(x) for x in userinput): if 96 < i < 123: #lowercase new += chr(97 + (i+ord(a)-97)#keeps all values in alphabet print(new) 

So die Antwort, die ich will, wenn ich 'abcd' als meine Nachricht und 'ab' als mein Keyword das gewünschte Ergebnis ist 'bddf' als 'a' + 'a' ist 'b' und 'b' + 'b' = ' D 'und etc. Wie würde ich den Code ändern, um mein gewünschtes Ergebnis zu entsprechen oder muss ich es komplett ändern und wie würde ich so tun.

    One Solution collect form web for “Vigenere Chiffre – nicht korrekte Werte hinzufügen”

    Versuch das (du vermisst den mod 26 part):

     from itertools import cycle plaintext = input('enter message: ') keyword = input('enter keyword: ') def chr_to_int(char): return 0 if char == 'z' else ord(char)-96 def int_to_chr(integer): return 'z' if integer == 0 else chr(integer+96) def add_chars(a, b): return int_to_chr(( chr_to_int(a) + chr_to_int(b) ) % 26 ) def vigenere(plaintext, keyword): keystream = cycle(keyword) ciphertext = '' for pln, key in zip(plaintext, keystream): ciphertext += add_chars(pln, key) return ciphertext ciphertext = vigenere(plaintext, keyword) print(ciphertext) 

    Wenn du Listenverfassungen möchtest, kannst du auch schreiben

     def vigenere(plaintext, keyword): keystream = cycle(keyword) return ''.join(add_chars(pln, key) for pln, key in zip(plaintext, keystream)) 

    AKTUALISIEREN

    Aktualisiert nach dem Wunsch, dass a+a=b . Beachten Sie, dass z in diesem Fall das neutrale Element für die Addition ( z+char=z ) ist.

    Python ist die beste Programmiersprache der Welt.