Python 3.10 Match Case

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Nico.Milano

Grünschnabel
Hallo an alle,

ich teste einmal mal zum rumspielen i Python 3.10 die Match Case Funktion die ja neu hinzugekommen ist.

An sich funktioniert die auch wenn ich die Variable a fest zuweise. Jedoch bekomme ich keine Übereinstimmung, wenn ich die Variable über eine Benutzereingabe übergebe. Ich füge mal den Code hier ein, falls meine Erklärung nicht so toll war. :)

a = str(input("Number: ")) match a: case 20: print("One") case 30: print("Two") case _: print("Null")
 

Zvoni

Erfahrenes Mitglied
Keine Ahnung von Python, was mir aber sofort auffällt:
Dein Input ist ein String, im Case vergleichst du aber gegen einen Integer
Hätte ein
Code:
//blablablabla
     case "20":
//blablablabla
    case "30":
//usw.
erwartet

EDIT: Oder gleich nen Cast:
a = Int(input("Number: "))
Dann müsste Case 20 usw. funktionieren
 
Zuletzt bearbeitet:

Technipion

Erfahrenes Mitglied
Man kann sogar hingehen, und den Cast innerhalb der Case-Abfrage durch ein try-else durchjagen:
Python:
match a:
    case float() | int():
        # a wurde hier zu einem float ODER einem int evaluiert
        print(a)
    case _:
        # a kann weder zu float, noch int evaluiert werden
        print(a)
Entnommen von hier.

Wie der gute Herr Hoyt übrigens in diesem Blogpost ausführlich schreibt, sollte man es mit dem neuen match-Statement nicht übertreiben @Nico.Milano . Es gibt zwar definitiv gute Anwendungsfälle dafür, aber in den allermeisten (primitiven) Fällen ist und bleibt das klassische if-else-Konstrukt lesbarer und nachvollziehbarer.

Gruß Technipion
 

Nico.Milano

Grünschnabel
Keine Ahnung von Python, was mir aber sofort auffällt:
Dein Input ist ein String, im Case vergleichst du aber gegen einen Integer
Hätte ein
Code:
//blablablabla
     case "20":
//blablablabla
    case "30":
//usw.
erwartet

EDIT: Oder gleich nen Cast:
a = Int(input("Number: "))
Dann müsste Case 20 usw. funktionieren
Sorry, mir ist gar nicht aufgefallen dass ich str anstelle von int angegeben habe. Danke dafür :) da sieht man mal wieder zwei Sachen gleichzeitig geht nicht gut.
 

Nico.Milano

Grünschnabel
Man kann sogar hingehen, und den Cast innerhalb der Case-Abfrage durch ein try-else durchjagen:
Python:
match a:
    case float() | int():
        # a wurde hier zu einem float ODER einem int evaluiert
        print(a)
    case _:
        # a kann weder zu float, noch int evaluiert werden
        print(a)
Entnommen von hier.

Wie der gute Herr Hoyt übrigens in diesem Blogpost ausführlich schreibt, sollte man es mit dem neuen match-Statement nicht übertreiben @Nico.Milano . Es gibt zwar definitiv gute Anwendungsfälle dafür, aber in den allermeisten (primitiven) Fällen ist und bleibt das klassische if-else-Konstrukt lesbarer und nachvollziehbarer.

Gruß Technipion
Danke für deine Nachricht. Interessanter Blog da stöber ich mal rum dankeschön.

Das war jetzt im Grunde nur mal zum rumspielen mit dem match-Statement was kann man machen und was nicht einfach interessehalber. Nichts geht über das gute alte if-else :)
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…