ParcoursOuvrir l'appli

`and`, `or`, `not` : combiner des conditions

Python, les conditions · 45 min

Les opérateurs logiques

Souvent, une décision dépend de plusieurs conditions. « Pour voter, il faut avoir 18 ans et être inscrit. » « Le magasin est fermé le samedi ou le dimanche. »

Opérateur Vaut True quand... Exemple
a and b les deux sont vrais age >= 18 and inscrit
a or b au moins un des deux est vrai jour == "samedi" or jour == "dimanche"
not a a est faux (il inverse) not ferme

Les tables de vérité

a b a and b a or b
True True True True
True False False True
False True False True
False False False False

Écrire des conditions combinées

age = 20
inscrit = True

if age >= 18 and inscrit:
    print("Tu peux voter")

Remarque : on écrit and inscrit, pas and inscrit == True. inscrit est déjà un booléen, inutile de le comparer à True.

Le piège de la répétition

En français, on dit « si le jour est samedi ou dimanche ». En Python, il faut répéter la comparaison complète de chaque côté :

jour == "samedi" or jour == "dimanche"     # correct
jour == "samedi" or "dimanche"             # FAUX : toujours vrai !

La deuxième ligne se lit pour Python comme (jour == "samedi") or ("dimanche"), et un texte non vide compte comme vrai. Résultat : la condition est toujours vraie, même un lundi. Encore une erreur silencieuse.

Raccourci : in

Pour tester si un texte en contient un autre, on utilise in :

"sam" in "samedi"           # True
"@" in "awa@gmail.com"      # True : bonne vérification d'e-mail rudimentaire
"x" not in "bonjour"        # True

Les intervalles

Pour vérifier qu'une valeur est entre deux bornes, Python permet d'enchaîner les comparaisons comme en maths :

0 <= note <= 20      # équivaut à : note >= 0 and note <= 20

Priorité

not passe avant and, qui passe avant or. Comme pour les calculs, mets des parenthèses dès que tu mélanges and et or.

Pratique : Teste la logique

Prévois chaque résultat avant d'appuyer sur Entrée.

Un terminal simulé t'attend dans l'appli, sans rien installer. Pratiquer

Exercice : Peut-il voter ?

Range dans peut_voter un booléen : il faut avoir au moins 18 ans et être inscrit sur les listes.

Voir une solution
age = 20         # donné
inscrit = True   # donné

peut_voter = age >= 18 and inscrit

Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice

Exercice : Le week-end

Range dans weekend un booléen qui dit si jour est "samedi" ou "dimanche". Attention au piège de la répétition.

Voir une solution
jour = "samedi"   # donné

weekend = jour == "samedi" or jour == "dimanche"

Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice

Exercice : Une note valide

Avant d'enregistrer une note, il faut vérifier qu'elle est entre 0 et 20 inclus. Range dans valide le booléen correspondant, puis affiche Note enregistrée si elle est valide, ou Note impossible sinon.

Voir une solution
note = 14   # donné

valide = 0 <= note <= 20
if valide:
    print("Note enregistrée")
else:
    print("Note impossible")

Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice

Sécurité : les mots de passe

Chaque année, des entreprises de sécurité publient la liste des mots de passe les plus utilisés, à partir de millions de comptes piratés. Et chaque année, 123456 est en tête ou presque, suivi de password, 123456789, azerty ou qwerty.

Un pirate n'essaie pas des combinaisons au hasard : il essaie d'abord ces listes. Un mot de passe de cette liste est trouvé en moins d'une seconde.

C'est ta deuxième leçon de sécurité. Dans l'exercice suivant, tu écris toi-même le vérificateur qu'utilisent les sites quand tu crées un compte.

Exercice : Le vérificateur de mot de passe

Range dans solide un booléen qui vaut True seulement si toutes ces règles sont respectées :

  1. au moins 8 caractères ;
  2. au moins une majuscule : astuce, mdp != mdp.lower() est vrai s'il y en a une (le texte change quand on le met en minuscules) ;
  3. il ne contient pas "123" ;
  4. ce n'est pas "Password1".

Puis affiche Mot de passe accepté ou Mot de passe trop faible.

Voir une solution
mdp = "Kribi2026Plage"   # donné

solide = len(mdp) >= 8 and mdp != mdp.lower() and "123" not in mdp and mdp != "Password1"
if solide:
    print("Mot de passe accepté")
else:
    print("Mot de passe trop faible")

Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice

Exercice : Défi : l'année bissextile

Une année bissextile a 366 jours (un 29 février). La règle exacte, fixée en 1582 par le pape Grégoire XIII, est plus subtile qu'on le croit :

  • une année est bissextile si elle est divisible par 4 ;
  • sauf si elle est divisible par 100 ;
  • sauf si elle est divisible par 400, auquel cas elle est bissextile quand même.

Exemples : 2024 oui, 2026 non, 1900 non (divisible par 100), 2000 oui (divisible par 400).

Range dans bissextile le booléen correspondant. « Divisible par 4 » se teste avec annee % 4 == 0.

Voir une solution
annee = 2024   # donné

bissextile = (annee % 4 == 0 and annee % 100 != 0) or annee % 400 == 0

Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice

Teste-toi

Avec jour = "lundi", que vaut jour == "samedi" or "dimanche" ?
  1. False
  2. Une valeur considérée comme vraie (bonne réponse)
  3. Une erreur
  4. "lundi"

Python lit (jour == "samedi") or "dimanche". La première partie est fausse, donc or renvoie "dimanche", un texte non vide, considéré comme vrai. Il faut écrire jour == "samedi" or jour == "dimanche".

Que vaut not (3 > 2 and 1 > 5) ?
  1. True (bonne réponse)
  2. False
  3. Une erreur

3 > 2 est vrai, 1 > 5 est faux, donc le and est faux. not inverse : True.