2017-03-03 6 views
0

In Python 3 versuche ich ein kleines Programm zu schreiben, das eine Phrase oder einen Satz für Sie kodiert und dekodiert. Hier kommt das Problem: Ich bin immer noch sehr neu in Python und brauche etwas Hilfe. Ich möchte, dass das Programm die Wortgruppe in einen Strom von Zahlen umwandelt und mit dem Schlüssel multipliziert, den der Benutzer eingeben wird. Um dann die Phrase zu dekodieren, werden die Zahlen durch die Taste geteilt und wieder in Buchstaben umgewandelt.Konvertieren einer Variablen mit Text in eine Variable mit Zahlen

TL; DR Ich möchte Buchstaben in einer Variablen (Beispiel: Nachricht = hallo hallo) zu Zahlen (A = 1, B = 2 usw., (8,5,12,12,15_8,9)) ändern)), dann in der Lage sein, es wieder zu ändern.

Dies ist das Ganze so weit, so dass Sie meine Spielstärke ein wenig ermessen können:

EorD = input('Encoding or Decoding? E/D: ') 
if EorD == "E": 
    Key = input('Enter a number as your key: ') 
    Message = input('Enter a message to encode: ') 
    Encrypt = 1 
if EorD == "D": 
    Key = input('Enter your key: ') 
    Message = input('Enter a message to decode: ') 
    Decrypt = 1 
Encrypt = 0 
import string 
if Encrypt == 1: 
    print('Now encoding...') 

elif Decrypt == 1: 
    print('Now decoding...') 

Eine kleine Erklärung, wie ich das schön wäre tun sollte. Ich mache das, um zu lernen, also bitte irgendwelche Lösungen erklären!

Antwort

0

Sie können ASCII-Werte von Zeichen mit ord(character_here) verwenden, die den ASCII-Code und chr(ascii_code) zurück zum Zeichen zurückgibt. - Dies ist die ASCII-Tabelle als Referenz - http://www.jimprice.com/ascii-0-127.gif

http://love-python.blogspot.co.uk/2008/04/convert-text-to-ascii-and-ascii-to-text.html

+0

Wie würde ich mehrere Zeichen konvertieren? Ich habe alles andere im Griff, also wenn ich das bekomme, dann bin ich fertig! – Gregory

+0

Sie könnten eine Variable erstellen, die Ihre Codes enthält, zB 'codes = []' Sie können eine for-Schleife verwenden, wie 'for character in message: codes.append (ord (character))', die jeden Code für jedes Zeichen hinzufügt zu Ihrer 'codes'-Variable und speichert alle Codes. Dann verbinden Sie das Ergebnis und drucken: '", ".join (codes)'. Eine kompakte Möglichkeit, dies zu tun, ist eine Zeile für Schleife wie von Steven unten vorgeschlagen: '',' .join (str ((ord (c) - delta) * Schlüssel) für c in Text)' – Adam

1

Führende auf von dem, was Adam vorgeschlagen ist ein Code auf ungefähr, wie Sie es gehen könnten. delta = ord('A') - 1 wird verwendet, um den ASCII-Wert so zu versetzen, dass 'A' bei 1 beginnt. Beachten Sie, dass 'a' dann einen Wert von 33 haben wird. Sehen Sie sich die ASCII-Tabelle an, die von Adam als Referenz verknüpft ist.

def encode(text, key): 
    delta = ord('A') - 1 
    return ', '.join(str((ord(c) - delta) * key) for c in text) 

def decode(ords, key): 
    delta = ord('A') - 1 
    return ''.join(chr(o // key + delta) for o in ords) 

def main(): 
    while True: 
     coding = input('Encoding or Decoding? E/D: ').lower() 
     if coding == "e": 
      key = int(input('Enter a number as your key: ')) 
      text = input('Enter a message to encode: ') 
      print(encode(text, key)) 
     elif coding == "d": 
      key = int(input('Enter your key: ')) 
      text = map(int, input('Enter a message to decode: ').split(', ')) 
      print(decode(text, key)) 
     else: 
      break 
     print() 

# Output 
>>> main() 
Encoding or Decoding? E/D: e 
Enter a number as your key: 1 
Enter a message to encode: Hello World! 
8, 37, 44, 44, 47, -32, 23, 47, 50, 44, 36, -31 

Encoding or Decoding? E/D: d 
Enter your key: 1 
Enter a message to decode: 8, 37, 44, 44, 47, -32, 23, 47, 50, 44, 36, -31 
Hello World! 

Encoding or Decoding? E/D: 
>>> 

Bonus:

Wenn Sie Sie eine Phrase als Schlüssel haben wollen auch.

def conv_key(inp): 
    if inp.isdigit(): 
     return int(inp) 
    return sum(ord(c) for c in inp) 

Ändern Sie dann die int wirft zu conv_key wie so

key = conv_key(input('Enter a number or phrase as your key: ')) 
key = conv_key(input('Enter your key: ')) 

>>> main() 
Encoding or Decoding? E/D: e 
Enter a number or phrase as your key: python 
Enter a message to encode: Hello World! 
5392, 24938, 29656, 29656, 31678, -21568, 15502, 31678, 33700, 29656, 24264, -20894 

Encoding or Decoding? E/D: d 
Enter your key: python 
Enter a message to decode: 5392, 24938, 29656, 29656, 31678, -21568, 15502, 31678, 33700, 29656, 24264, -20894 
Hello World! 
+0

How würde ich mehrere Zeichen konvertieren? Ich habe alles andere im Griff, also wenn ich das bekomme, dann bin ich fertig! – Gregory

+0

Was meinst du damit, mehrere Charaktere zu konvertieren? –

+0

Wenn ich das tue: c = hallo, ord (str (c)), sagt es mir, dass ich nicht mehr als ein Zeichen gleichzeitig machen kann. – Gregory

Verwandte Themen