Montag, 11. Februar 2013

Secret Code

Eine einfache Verschlüsselungsübung, die ich mir noch einfacher gemacht habe. Das Skript ist zugleich Lösung für eine Aufgabenstellung des HP Codewars 2001:
data = """Hewlett-Packard Company, Year 2000 Financial Report
end"""

data = data.split("\n")

for line in data:
    ''' Das könnte man auch in eine Funktion
    packen, jedenfalls wird hier die Message
    verschlüsselt...

    '''
    # Um es mir einfach zu machen habe ich
    # zusätzlich zu den Großbuchstaben
    # auch die Kleinbuchstaben ins Code-
    # Wörterbuch aufgenommen...
    codes = {"A":"*",
             "a":"*",
             "E":"$",
             "e":"$",
             "I":"#",
             "i":"#",
             "O":"!",
             "o":"!",
             "U":"%",
             "u":"%",
             "Y":"^",
             "y":"^"}
    if line == "end":
        pass
    else:
        for key in codes.keys():
            line = line.replace(key,codes[key])        

        print(line)
Alternativ hätte man die Message Buchstabe für Buchstabe durchlaufen können und prüfen können, ob Buchstabe.upper() im Wörterbuch steht und die Daten dann entsprechend z. B. an eine Liste anhängen können. Das Ergebnis würde dann codiert zurückgegeben werden. Für 2 Punkte darf man es sich wohl einfacher machen.

1 Kommentar:

  1. Ein ``pass`` in einem ``if`` oder ``else``-Zweig ist unschön. Bei ``else`` ist der Zweig überflüssig und bei ``if`` möchte man eigentlich die Bedingung negieren und den ``else``-Zweig im ``if`` haben.

    Wenn man Schlüssel/Wert-Paare braucht, dann kann man gleich über `iteritems()` (Python 2.x) oder `items()` (Python 3.x) iterieren. Oder eine Liste mit Tupel (alt, neu) anstatt eines Wörterbuchs verwenden.

    Alternativ wäre hier die `string.maketrans()`-Funktion und die `translate()`-Methode auf Zeichenketten einen Blick wert.

    AntwortenLöschen