Apprendre Python de zéro jusqu'au niveau expert : syntaxe, structures de données, POO, générateurs, décorateurs, typage, tests, async et internals du langage.
Un programme sans condition ni boucle exécute ses lignes une fois, de haut en bas. Dès qu'il doit choisir ou répéter, on entre dans le contrôle de flux. Python propose peu de constructions, mais chacune est très expressive.
note = 14
if note >= 16:
mention = "Très bien"
elif note >= 14:
mention = "Bien"
elif note >= 12:
mention = "Assez bien"
else:
mention = "Aucune"Les comparaisons se chaînent, comme en maths :
if 0 <= note <= 20:
print("Note valide")Expression conditionnelle (le « ternaire » Python) :
statut = "majeur" if age >= 18 else "mineur"Depuis Python 3.10, match fait bien plus qu'un switch. Il déstructure les données.
def traiter(commande: str) -> str:
match commande.split():
case ["quitter"]:
return "Au revoir"
case ["aller", direction]:
return f"Direction : {direction}"
case ["prendre", *objets] if objets:
return f"Tu prends {', '.join(objets)}"
case _:
return "Commande inconnue"
traiter("aller nord") # 'Direction : nord'
traiter("prendre épée bouclier") # 'Tu prends épée, bouclier'Il fonctionne aussi sur les dictionnaires, ce qui le rend pratique pour router des événements JSON :
match event:
case {"type": "click", "x": x, "y": y}:
print(f"Clic en {x},{y}")
case {"type": "key", "key": "Escape"}:
print("Fermeture")Le for Python itère sur une séquence. Il n'y a pas de for (i = 0; i < n; i++).
for fruit in ["pomme", "kiwi", "mangue"]:
print(fruit)
for lettre in "abc":
print(lettre)Pour un compteur, range() :
for i in range(5): # 0, 1, 2, 3, 4
print(i)
for i in range(2, 10, 3): # 2, 5, 8
print(i)Besoin de l'index et de la valeur ? enumerate(), jamais range(len(...)) :
fruits = ["pomme", "kiwi"]
for i, fruit in enumerate(fruits, start=1):
print(f"{i}. {fruit}")Parcourir deux listes en parallèle ? zip() :
noms = ["Ada", "Linus"]
ages = [36, 55]
for nom, age in zip(noms, ages, strict=True):
print(nom, age)strict=True lève une erreur si les longueurs diffèrent, au lieu de tronquer silencieusement.
tentatives = 0
while tentatives < 3:
mdp = input("Mot de passe : ")
if mdp == "secret":
print("OK")
break
tentatives += 1break sort de la boucle, continue passe à l'itération suivante. Moins connu : else sur une boucle s'exécute si la boucle s'est terminée sans break.
nombres = [3, 7, 11, 15]
for n in nombres:
if n % 2 == 0:
print(f"Premier pair : {n}")
break
else:
print("Aucun nombre pair")C'est le moyen idiomatique d'écrire une recherche sans variable drapeau.
Il affecte et renvoie la valeur dans une expression. Utile dans les while :
while (ligne := input("> ")) != "stop":
print(f"Tu as tapé {ligne}")À utiliser avec parcimonie. Si la ligne devient difficile à lire, revenez à deux instructions.
FizzBuzz, classique des entretiens :
for n in range(1, 101):
match (n % 3, n % 5):
case (0, 0): print("FizzBuzz")
case (0, _): print("Fizz")
case (_, 0): print("Buzz")
case _: print(n)Nombre mystère :
import random
secret = random.randint(1, 100)
essais = 0
while True:
essais += 1
proposition = int(input("Ton nombre : "))
if proposition < secret:
print("Plus grand")
elif proposition > secret:
print("Plus petit")
else:
print(f"Trouvé en {essais} essais")
breakAmélioration à faire vous-même : gérer la saisie d'un texte non numérique. On verra comment avec les exceptions au chapitre 6.
Le for sur des itérables, enumerate et zip couvrent l'immense majorité des boucles réelles. Si vous vous surprenez à écrire range(len(x)), il existe presque toujours une forme plus lisible.