Question 1Lequel des suivants exécute le bloc de if not value: ?
if / elif / else et branchements avancés
Apprends à construire des conditions Python avec if / elif / else et les motifs avancés comme l'opérateur ternaire et isinstance.
Les bases de if et if not
if condition: exécute le bloc uniquement quand la condition vaut True — c'est la structure de branchement la plus basique. Pour inverser une condition, ajoute not devant, comme dans if not condition:.
not est l'opérateur qui inverse True et False, donc des formulations comme « quand ce n'est pas… » ou « quand ce n'est pas vide » s'écrivent naturellement.
# if : s'exécute uniquement quand la condition est True
is_logged_in = True
if is_logged_in:
print("Bienvenue")
# Sortie : Bienvenue
# if not : inverse la condition avant de l'évaluer
is_logged_in = False
if not is_logged_in:
print("Connecte-toi s'il te plaît")
# Sortie : Connecte-toi s'il te plaît
# Combiner avec des expressions de comparaison
cart = []
if not cart:
print("Ton panier est vide")
# Sortie : Ton panier est vide
Écrire des branchements multi-voies avec elif et else
Pour gérer plusieurs branches, utilise elif et else.
elif est l'abréviation de else if — quand la condition du if est False, Python tente la condition suivante, et si aucune ne correspond, le else final s'exécute.
Les conditions sont évaluées de haut en bas. Seule la première qui devient True s'exécute, et les autres sont ignorées. Si aucune n'est True, c'est else qui s'exécute.
# Choisir une instruction selon un feu de circulation
signal = "YELLOW"
if signal == "GREEN":
print("Avance")
elif signal == "YELLOW":
print("Avance avec prudence")
elif signal == "RED":
print("Arrête-toi")
else:
print("Signal inconnu")
# Sortie : Avance avec prudence
elif est évalué de haut en bas
Si tu écris if age >= 0: ... elif age >= 20: ..., la condition la plus large vient en premier, donc la suivante ne correspond jamais. Avec des branchements multi-voies, liste les conditions les plus restreintes (les plus strictes) en premier.
Utiliser une valeur elle-même comme condition (truthiness)
Une condition de if ne se limite pas aux expressions de comparaison comme == — tu peux y placer une valeur elle-même. Python la convertit en bool en coulisses, traitant « vide » ou 0 comme False et tout le reste comme True.
| Type | Traité comme False | Traité comme True (exemples) |
|---|---|---|
| int / float | 0, 0.0 | 1, -1, 3.14 |
| str | "" (chaîne vide) | "a", "0" (toute chaîne non vide est True) |
| list / tuple / set | [], (), set() (collections vides) | [1], (0,), {0} |
| dict | {} (dict vide) | {"key": "value"} |
| None | None | (toute valeur autre que None) |
Ce comportement permet d'écrire très succinctement des vérifications du style « l'entrée est-elle vide ? » ou « y a-t-il quelque chose dans le panier ? ».
Au lieu de if len(cart) > 0:, écris simplement if cart: — le sens est le même. C'est un style très pythonique.
# Ne pas lancer de recherche quand le mot-clé est vide
search_query = ""
if search_query:
print(f"Recherche : {search_query}")
else:
print("Saisis un mot-clé")
# Sortie : Saisis un mot-clé
# Passer au paiement quand le panier contient au moins un article
cart = ["pomme", "pain"]
if cart:
print(f"Validation avec {len(cart)} article(s)")
# Sortie : Validation avec 2 article(s)
Écrire des if d'une ligne avec l'opérateur ternaire
Quand tout ce dont tu as besoin, c'est affecter l'une de deux valeurs selon une condition, pas besoin de 4 lignes de if / else — tu peux le faire en une seule ligne. Cela s'appelle l'opérateur ternaire (ou expression conditionnelle). La forme est valeur_si_true if condition else valeur_si_false.
# 4 lignes avec un if / else classique
age = 25
if age >= 20:
status = "adulte"
else:
status = "mineur"
# Une ligne avec l'opérateur ternaire
status = "adulte" if age >= 20 else "mineur"
print(status) # adulte
L'astuce, c'est de ne l'utiliser que pour des choix binaires simples. Quand les conditions ou les valeurs deviennent longues, ou qu'il y a trois branches ou plus, un if / elif / else classique reste plus lisible.
Les vérifications de plage peuvent être chaînées directement
Les vérifications de plage comme « entre 0 et 100 inclus » peuvent s'écrire en chaînant les opérateurs de comparaison au lieu d'utiliser and. Le résultat se lit comme une inéquation mathématique, ce qui rend l'intention très claire.
score = 78
# Avec and
if score >= 0 and score <= 100:
print("Score valide")
# Forme chaînée (même sens)
if 0 <= score <= 100:
print("Score valide")
Inspecter le type et la valeur (isinstance et is None)
Quand tu veux vérifier le type d'une valeur contenue dans une variable, utilise isinstance(valeur, type). Passe la valeur en premier et le type en second — si la valeur est une instance de ce type, cela retourne True.
price = 980
user_name = "alice"
print(isinstance(price, int)) # True
print(isinstance(user_name, str)) # True
print(isinstance(price, str)) # False
# Combine avec if pour ne calculer que si c'est un nombre
if isinstance(price, int) and price > 0:
tax_included = int(price * 1.1)
print(tax_included) # 1078
Qu'est-ce que None ?
None est la valeur spéciale de Python qui signifie « pas de valeur ». Elle représente des choses comme « un résultat pas encore récupéré », « un état non initialisé » ou « ce qu'une fonction renvoie quand elle ne renvoie rien ». C'est la seule et unique valeur qui signifie « rien », distincte de 0 ou d'une chaîne vide.
# Une fonction qui ne renvoie rien renvoie implicitement None
def greet():
print("bonjour")
result = greet() # "bonjour" est affiché
print(result) # None
# Une valeur initiale signifiant « pas encore décidé »
selected_user = None
print(selected_user) # None
Pour vérifier si une valeur est None, la façon pythonique est d'utiliser is None plutôt que ==. Comme None est un objet unique dans le programme, comparer si deux références pointent vers le même objet en mémoire avec is rend l'intention plus claire.
# Infos utilisateur depuis une API (suppose qu'elles n'ont pas encore été récupérées)
user = None
if user is None:
print("Infos utilisateur non chargées")
else:
print(f"Bienvenue, {user}")
# Sortie : Infos utilisateur non chargées
# Pour vérifier « pas None », utilise `is not None`
score = 0
if score is not None:
print(f"Score : {score}") # Score : 0
0 et None sont deux choses différentes
Écrire if score: traitera score == 0 aussi comme False. Quand tu dois distinguer « pas saisi (None) » de « 0 point », vérifie explicitement avec if score is None: ou if score is not None:.
Vérifier le contenu d'une collection avec in / not in
Pour tester si une valeur est contenue dans une liste, utilise valeur in collection. L'inverse — « non contenu » — s'écrit valeur not in collection. Cela fonctionne pour les listes, tuples, ensembles et chaînes, et pour les dicts cela vérifie les clés.
allowed_roles = ["admin", "editor", "member"]
current_role = "member"
if current_role in allowed_roles:
print("Accès autorisé")
else:
print("Accès refusé")
# Sortie : Accès autorisé
# Vérifier si une sous-chaîne apparaît dans une chaîne
if "error" in "connection error: timeout":
print("Ligne d'erreur détectée")
# Pour un dict, `in` vérifie les clés
user = {"name": "alice", "role": "admin"}
if "email" not in user:
print("E-mail non enregistré")
Dans cet article, on a couvert les branchements avancés avec les bases de if / if not, la logique multi-voies avec elif / else, la truthiness qui traite les valeurs vides et 0 comme False, l'opérateur ternaire valeur_1 if condition else valeur_2, les vérifications de type et de valeur avec isinstance et is None, et les vérifications de collection avec in / not in.
Dans le prochain article, on apprendra all() / any(), qui permettent de vérifier si chaque élément d'une liste satisfait une condition en un seul appel.
Vérification des connaissances
Répondez à chaque question une par une.
Question 2Que va afficher ce code ?age = 18
status = "adult" if age >= 20 else "minor"
print(status)
Question 3Lequel des suivants est la façon la plus recommandée de vérifier si une valeur vaut None ?