Ich versuche, die letzte Zeile in diesem Code zu verstehen - ich weiß, dass es den entsprechenden Klartext-Zeichen in encdic
(Verschlüsselungswörterbuch und verbindet alles zusammen, um eine verschlüsselte Nachricht zu erstellen. Was ist der Code l.lower
tun (unter obere Zeichen und es zu senken Umwandlung Wenn alle Zeichen bereits Kleinbuchstaben sind - wie verkürzen ich die letzte ZeileNotwendigkeit, Funktion zu verkürzen
return s.join(encdic.get(c.lower(), c) for c in plaintext)
plaintext = "hhis is a fairly long piece of plainhexh fourscore and seven"
d = 'gikaclmnqrpoxzybdefijstuvw' #decryption key
encdic = dict(zip(alphabet, d)) #create decryption dictionary
decdic = dict(zip(d, alphabet)) #create decryption dictionary
def encrypt(plaintext, d):
s=""
return s.join(encdic.get(c.lower(), c) for c in plaintext)
Wenn ich den Code zu verkürzen:
return s.join(encdic.get(c) for c in plaintext)
ich das bekommen Folgefehler
TypeError: sequence item 4: expected str instance, NoneType found
Wie kann ich das beheben?
Update:
return s.join(encdic.get(c,c) for c in plaintext)
scheint ohne Fehler zu arbeiten, aber warum:
ich den Code geändert haben?
1) Sind Sie sicher, dass 'c' immer klein geschrieben ist? 2) Sind Sie sicher, dass "c" immer ein Schlüssel in "encdic" ist? Wenn nicht, müssen Sie das längere Formular verwenden, das sicherstellt, dass der Schlüssel in Kleinbuchstaben geschrieben ist, und einen Standardwert zurückgibt, wenn der Schlüssel nicht im Wörterbuch gefunden wird. – Craig
Danke - es iteriert durch den Klartext jedes Zeichen nachschlagen und eine verschlüsselte Nachricht erstellen - alles Klartext ist Kleinbuchstabe für Sue - Warum funktioniert mein angepasster Code (da Wörterbuch ist gezippt? Dh sieht aus wie 'a: g', ' s: f ': etc, da gibt es einen zweiten Parameter? – chrischris
Der Typ Fehler bedeutet, dass einer der Dictionary Lookups fehlschlägt und '.get()' gibt einen Wert von 'None' zurück. Sind Sie sicher, dass Sie keinen haben? Nicht-Alpha-Zeichen in 'Klartext 'wie ein Leerzeichen? – Craig