Du Pattern Matching
Comme le bon vieux switch case
, ou pas, en tout cas pour ceux qui demandaient tout le temps « comment on fait un switch case en Python » à qui on répondait « une bonne vieille batterie de if, mon ami, ou un dict peut être. », et bien ça y est.
Avant :
try:
print(
{
"+": operator.__add__,
"*": operator.__mul__,
"%": operator.__mod__,
"-": operator.__sub__,
"^": operator.__pow__,
"/": operator.__truediv__,
}[sys.argv[2]](int(sys.argv[1]), int(sys.argv[3]))
)
except KeyError:
print("Unknown operator.")
Maintenant :
match sys.argv[1:]:
case a, "+", b:
print(int(a) + int(b))
case a, "*", b:
print(int(a) * int(b))
case a, "%", b:
print(int(a) % int(b))
case a, "-", b:
print(int(a) - int(b))
case a, "^", b:
print(int(a) ** int(b))
case a, "/", b:
print(int(a) / int(b))
case "-", a:
print(-int(a))
case "√", a:
print(int(a) ** .5)
case ("π", ):
print(math.pi)
case _:
print("Unknown operator", sys.argv[1:])
J’en ai profité pour ajouter des cas qui nétait pas gérables par la version précédente : deux cas avec une seule opérande (- a
et √ a
), et une avec une constante π
.
Pour celle de la constante j’ai mi ("π", )
et non "π"
: sys.argv[1:]
est dans tous les cas une séquence, et jamais une chaîne, donc elle peut correspondre à la séquence d’un seule élément ("π", )
mais elle ne peut pas correspondre à la chaîne "π"
.
Exactement comme on aurait pu écrire :
(pi, ) = sys.argv[1:]
en Python < 3.10.
Vous voulez présenter un autre aspect sympa de Python 3.10 ? Continuons le thread, moi je vais manger.