2017-04-04 3 views
0

Wenn text als Eingabezeichenfolge und rule als Eingabe-Ganzzahl angegeben wird, besteht die Herausforderung darin, die ASCII-Wertsumme zu finden und dann basierend auf dem neuen numerischen Wert zurück in Zeichenfolgen zu konvertieren.PYTHON basic ASCII-Verschlüsselungsfunktion

Mein Code erscheint auf der richtigen Spur, aber zB ascii_encrypt("a",1), meine aktuelle Ausgabe ist b'b', wenn es 'b' sein sollte. Ich bin neu in der Encoder-Funktion, die, glaube ich, mich stolpert.

def ascii_encrypt(text, rule): 
    text = sum([ord(c) for c in text]) 
    if not text: 
     return "" 
    else: 
     encrypted_text = chr(text + rule) 
     return encrypted_text.encode('utf-8') 

Hilfe gesucht! Vielen Dank!

+0

Warum codieren Sie das Ergebnis in UTF-8? – user2357112

+0

ein Testfall hatte gemischte Buchstaben, also dachte ich, dies würde das erklären –

+1

Ich verstehe nicht, was ist die Verwendung dieser Zeile: 'text = sum ([ord (c) für c in Text])'. Möchten Sie diese Funktion mit Strings verwenden, die größer als 1 Zeichen sind? –

Antwort

2

Einfach entfernen, .encode('utf-8'). Sie müssen es nicht verschlüsseln und es verursacht Ihr Problem. Sie können dieses Teil nicht hinzufügen und die gewünschte Funktionalität erreichen.

def ascii_encrypt(text, rule): 
    text = sum([ord(c) for c in text]) 
    if not text: 
     return "" 
    else: 
     encrypted_text = chr(text + rule) 
     return encrypted_text 

print(ascii_encrypt("a",1)) 
+0

Was ist, wenn ich nicht drucken möchte, sondern einfach den Wert ohne Codierung zurückgeben? –

+0

Genau, Sie müssen es nicht drucken oder kodieren. Senden Sie Ihre Zeichenfolgen als Bytefolgen ist keine gute Idee. Lassen Sie die Zeichenfolge einfach nicht codiert. Wenn Sie als Lösung markieren könnten, würde es sehr helfen. – Neil

+0

Hier ist, was ich mit dem obigen Code (minus Druckfunktion) bekomme: 'UnicodeEncodeError: 'ascii' Codec kann nicht das Zeichen '\ u0693' in Position 11 codieren: Ordinal nicht im Bereich (128)' –