`and`, `or`, `not` : combiner des conditions
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 inscritDans 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 :
- au moins 8 caractères ;
- 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) ; - il ne contient pas
"123"; - 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 == 0Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice
Teste-toi
Avec jour = "lundi", que vaut jour == "samedi" or "dimanche" ?
False- Une valeur considérée comme vraie (bonne réponse)
- Une erreur
"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) ?
True(bonne réponse)False- Une erreur
3 > 2 est vrai, 1 > 5 est faux, donc le and est faux. not inverse : True.