Warum mein Code nicht entschlüsseln die verschlüsselte Zeichenfolge auf der Grundlage des Wörterbuchs?

Ich habe ein Wörterbuch mit Schlüsseln und Werten, die Buchstaben darstellen.

Zum Beispiel ein einfaches:

DICT_CODE = {'b' : 'g', 'n' :'a', 'p' : 'o', 'x' : 'd', 't' : 'y'} 

Ich habe einen verschlüsselten Code erhalten und die Zeichenfolge in eine Liste umgewandelt, wo jedes Element ein Wort ist. Ich muss es lösen, entsprechend den Artikeln im Wörterbuch.

Ein Beispiel für einen Code ist:

 words_list = ["bppx","xnt!"] # "good day!" 

Ich habe versucht, es zu lösen, indem ich doppelt für Loops verwende, wie hier:

  for word in words_list: for char in word: if char in string.letters: word = word.replace(char, DICT_CODE.get(char)) print words_list 

Erwartete Leistung -> ["good","day!"]

Ausgabe -> ["bppx","xnt!"]

Es funktioniert überhaupt nicht. Die Charcater bleiben gleich und der Code ist stil unbekannt. Ich verstehe nicht, warum es nicht funktioniert, wenn jemand Zeit hat zu schauen und zu versuchen, mir zu helfen und zu sehen, was falsch ist, oder sogar einen besseren Weg vorschlagen (das funktioniert).

3 Solutions collect form web for “Warum mein Code nicht entschlüsseln die verschlüsselte Zeichenfolge auf der Grundlage des Wörterbuchs?”

Das Ändern der word_list innerhalb der for-Schleife würde den String nicht innerhalb der word_list . Sie müssten sich an den Index erinnern und das Element an diesem Index aktualisieren (und das Wort aus dem Index erhalten) –

 for i, word in enumerate(words_list): for char in word: if char in string.letters: words_list[i] = words_list[i].replace(char, DICT_CODE.get(char)) 

Demo –

 >>> words_list = ["bppx","xnt!"] >>> DICT_CODE = {'b' : 'g', 'n' :'a', 'p' : 'o', 'x' : 'd', 't' : 'y'} >>> for i, word in enumerate(words_list): ... for char in word: ... if char in string.letters: ... words_list[i] = words_list[i].replace(char, DICT_CODE.get(char)) >>> words_list ['good', 'day!'] 

Aber ein einfacher Weg für Sie wäre, str.translate (zusammen mit string.maketrans ) zu verwenden. Beispiel –

 table = string.maketrans('bnpxt','gaody') #First argument characters in your original string, and second argument what they map to. for i, word in enumerate(words_list): words_list[i] = word.translate(table) 

Demo –

 >>> import string >>> table = string.maketrans('bnpxt','gaody') #This creates the translation table >>> words_list = ["bppx","xnt!"] >>> for i, word in enumerate(words_list): ... words_list[i] = word.translate(table) ... >>> print words_list ['good', 'day!'] 

Diese mit Listenverständnis –

 words_list[:] = [word.translate(table) for word in words_list] 

Demo –

 >>> words_list = ["bppx","xnt!"] >>> table = string.maketrans('bnpxt','gaody') >>> words_list[:] = [word.translate(table) for word in words_list] >>> words_list ['good', 'day!'] 

Ihr Problem ist, dass Sie eigentlich nicht die ursprüngliche Liste ändern.

 for i, word in enumerate(words_list): for char in word: if char in string.letters: word = word.replace(char, DICT_CODE.get(char)) words_list[i] = word print words_list ['good', 'day!'] 

Wie in den Kommentaren erwähnt, wird von @marmeladze, print word_list will gedruckt die word_list die Sie oben erklärt haben.

Was du willst, ist so etwas wie folgt:

 DICT_CODE = {'b' : 'g', 'n' :'a', 'p' : 'o', 'x' : 'd', 't' : 'y', '!': '!'} words_list = ["bppx","xnt!"] decoded_list = [] for word in words_list: for char in word: word = word.replace(char, DICT_CODE.get(char)) decoded_list.append(word) print decoded_list 

Ausgabe

 ['good', 'day!'] 

Hoffe das hilft.

  • Alte Python Hashing von links nach rechts - warum ist es schlecht?
  • Wie man PGP in Python macht (Schlüssel generieren, verschlüsseln / entschlüsseln)
  • Python und PGP / Verschlüsselung
  • Python-passlib: Was ist der beste Wert für "Runden"
  • Python oder LibreOffice Save xlsx Datei mit Passwort verschlüsselt
  • Python gnupg.encrypt: keine Fehler, aber nicht verschlüsselnde Daten oder Dateien
  • Python - GPG entschlüsselt funktioniert aber GNUPG nicht
  • Verwenden Sie RSA, um in JavaScript zu verschlüsseln und in Python3 zu entschlüsseln
  • Vigenere Chiffre - nicht korrekte Werte hinzufügen
  • Wie würde ich ein einfaches Verschlüsselungs- / Entschlüsselungsprogramm machen? [abgeschlossen]
  • Ist es möglich, einen 100% sicheren virtuellen privaten Server zu haben?
  • Python ist die beste Programmiersprache der Welt.