1001: Switch Case/Select Case

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
PNS-Richi
User
Beiträge: 68
Registriert: Donnerstag 17. Januar 2008, 01:48

Hallo,

sicher schon 1001 mal gefragt:

Ich will eine elegante Python Lösung für:

Switch(blub):
case 1:
Text = "blüb"

Soll genau so wenig Aufwand haben. Ich muss genau 87 Felder so abfragen und einen Text dafür Ausgeben und da wäre so etwas wie if, elif viel zu aufwendig!

Es gibt zick Module für Python, aber nichts wie Select Case/Switch Case?

Die Lösung(?):

Code: Alles auswählen

...
    def on_twString_cellClicked (self, row,column):
        print row
        print column
        
        result = {
            0 : lambda : "echo addcslashes(\'foo[ ]\', \'A..z\');\n",
            2 : lambda : "$str = \"Is your name O\'reilly?\";\n\n// Outputs: Is your name O\'reilly?\necho addslashes($str);\n", 
            2 : lambda : "$binary = \"11111001\";\n$hex = bin2hex($binary);\necho $hex;\n"
        }

        Text = result.get(row, lambda: "//wtf?")

        self.teCode.insertPlainText(Text())
...
lg Richi
Nikolas
User
Beiträge: 102
Registriert: Dienstag 25. Dezember 2007, 22:53
Wohnort: Freiburg im Breisgau

Das kannst du recht einfach mit einem elif simulieren. Wobei der Ansatz über case bei so vielen strings falsch ist. Mach doch ein dict, wobei du die zu ersetzenden Worte als Schlüssel benutzt. Wenn du dann überprüfen willst, ob ein Wort ersetzt werden soll, machst du ein

Code: Alles auswählen

if string in mydict.keys:
    string = mydict[string]
(Oder so ähnlich)
Diese Überprüfung sollte deutlich schneller als die ganzen ifs sein und du kannst einfacher mal ein Wort ändern oder der Liste hinzufügen, ohne gleich copy paste machen zu müssen.
Per pickle kannst du dieses dict auch als Datei auslagern und musst nicht mal Quelltext damit zumüllen.

//PS: Ich habe dich etwas falsch verstanden. Wenn du nur die Zuordnung zahl-> string brauchst, brauchst du eher eine Liste, als ein dictionary.
Erwarte das Beste und sei auf das Schlimmste vorbereitet.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo PNS-Richi!

Kann es sein, dass du dich mit ``lambda`` ein wenig verrannt hast?

Code: Alles auswählen

...
    def on_twString_cellClicked (self, row,column):
        print row
        print column
       
        result = {
            0: """echo addcslashes('foo[ ]', 'A..z');\n""",
            1: """$str = "Is your name O'reilly?";\n\n// Outputs: Is your name O'reilly?\necho addslashes($str);\n""",
            2: """$binary = "11111001";\n$hex = bin2hex($binary);\necho $hex;\n"""
        }

        text = result.get(row, "//wtf?")

        self.teCode.insertPlainText(text)
... 
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
PNS-Richi
User
Beiträge: 68
Registriert: Donnerstag 17. Januar 2008, 01:48

Dann gibts ja einfachere und Elegantere Lösungen :)

Danke.
Antworten