2017-01-26 4 views
-1

Ich schrieb ein Programm, das einen Text in ASCII-Zahlen verwandelt und dann die ASCII-Zahlen zurück in den ursprünglichen Text verwandelt. Im Moment funktioniert es sowohl mit Kleinbuchstaben als auch mit Großbuchstaben, aber es funktioniert nicht mit Leerzeichen. Dies ist, wie mein Code sieht jetzt:Wie kann ich dieses Programm mit Leerzeichen arbeiten lassen? (Text zu ASCII und ASCII zu Text)

message_hidden = input("Enter a message that will be hidden: ") 
hidden = "" 
norm_message = "" 
for i in message_hidden: 
    hidden = hidden + str(ord(i)-23) 
print(hidden) 

for i in range(0, len(hidden), 2): 
    code = hidden[i] + hidden[i+1] 
    norm_message = norm_message + (chr(int(code)+23)) 
print("The first message was: ", norm_message) 

Mein erster Versuch war die erste Schleife wie folgt zu umschreiben:

for i in message_hidden: 
    if i.isalpha(): 
     hidden = hidden + str(ord(i)-23) 
    else: 
     hidden = hidden + i 
print(hidden) 

Und von hier Ich weiß nicht, wie ich die zweite Schleife schreiben sollte damit es funktioniert. Kann mir jemand Vorschläge machen, wie ich von hier aus gehen soll?

+2

Bitte präzisieren. Was ist das genaue Problem mit Ihrem Code? Was bedeutet "nicht funktioniert"? –

+1

"Im Moment funktioniert es sowohl mit Kleinbuchstaben als auch mit Großbuchstaben, aber es funktioniert nicht mit Leerzeichen." Ich möchte, dass das Programm Zeichenfolgen mit Leerzeichen verarbeiten kann. Wenn ich zum Beispiel "Guten Morgen" eintippe, funktioniert es nicht, aber es funktioniert mit "GoodMorning" und "Goodmorning" und so weiter. –

Antwort

1

ord(' ') == 32 und 32-23 == 9, die eine Ziffer ist. Sie gehen davon aus, dass Ihre Zahlencodes alle 2 Ziffern sind. Wenn Sie diese Annahme beibehalten möchten, müssen Sie eine andere Möglichkeit finden, das Leerzeichen zu verschlüsseln. Um dies zu tun, finden Sie eine 2-stellige Nummer, die ist nicht eine der Nummern von a-zA-Z erhalten. Verwenden Sie eine explizite if - verschlüsseln Sie das Leerzeichen zu dieser Nummer. Bei der Entschlüsselung müssen Sie auch einen expliziten if verwenden, um diesen Fall zu behandeln. Alternativ finden Sie eine andere Funktion (andere, die um 23 subtrahiert), die Sie auf ord(letter) anwenden - eine, die 2-stellige Zahlen für alle ord() Werte gibt, die Sie interessieren. Es gibt unendlich viele Funktionen, die diese Eigenschaft erfüllen . Ob du eine finden kannst, die weniger Code benötigt, als einfach eine Bandhilfe auf den Weltraumcharakter zu setzen, ist eine andere Frage.