Instructions conditionnelles
Contents
Instructions conditionnelles#
Jusqu’à présent, nous avons considéré une exécution “linéaire”. La première ligne est exécutée, ensuite la deuxième, et ainsi de suite. En pratique, il est possible de n’exécuter que certaines parties du code, sous certaines conditions.
L’instruction if
réalise un test logique. Un test logique débouche sur 2 possibilités mutuellement exclusives:
Vrai (
True
)Faux (
False
)
Pour tester si un nombre est pair ou impair, nous pouvons calculer le reste de la division entière de ce nombre par 2. S’il ne reste rien (le reste vaut 0) alors le nombre est pair, sinon il est impair.
Pour rappel, on peut calculer le reste de la division entière (le modulo) à l’aide du symbôle %
. Le reste de la division entière de 5 par 2 vaut 1.
print(5 % 2)
1
On peut donc tester si le reste de la division entière de 5 par 2 est égal à zéro. Dans ce cas-ci, le test renvoie la valeur False
.
print(5 % 2 == 0)
False
Voici un exemple complet avec:
La définition d’une variable
a
Un test pour savoir si le contenu de la variable est pair ou impair
L’affichage d’un message cohérent avec le résultat du test
![](/static/python/images/if_else.png)
a = 5
if a % 2 == 0:
print(a, "est pair.")
else:
print(a, "est impair.")
5 est impair.
Il y a plusieurs éléments importants dans ce script. On utilise le mot-clé if
pour l’instruction conditionnelle. Ensuite, on écrit le test réalisé. Notez que pour tester une égalité, nous devons utiliser le double symbôle d’égalité (==
). Si ce test renvoie la valeur True
, alors la première partie du code est exécute. Sinon (else
), la deuxième partie est exécutée. Enfin, il y a une tabulation dans le code qui permettent de délimiter les différents morceaux du code. En Python, cette indentation est fondamentale. Deux codes similaires avec des indentations différentes donneront des résultats potentiellement différents.
Instructions imbriquées#
Il est possible d’imbriquer plusieurs conditions. Nous définissons une variable a=10
. Ensuite, nous testons si a
est plus grand que 5, et si ce n’est pas le cas, nous testons si a
est plus petit que 3. Nous afficherons un message cohérent avec le résultat des différents tests.
![](/static/python/images/if_elif_else.png)
a = 10
if a > 5:
print(a, "est plus grand que 5")
else:
if a < 3:
print(a, "est plus petit que 3")
else:
print(a, "est compris entre 3 et 5")
10 est plus grand que 5
En Python, il est possible de contracter un else
suivi d’un if
par un elif
. Ceci rend le code plus lisible car toutes les conditions se trouvent au même niveau.
a = 10
if a > 5:
print(a, "est plus grand que 5")
elif a < 3:
print(a, "est plus petit que 3")
else:
print(a, "est compris entre 3 et 5")
10 est plus grand que 5
Etant donné que l’indentation est fondamentale, deux codes similaires avec des indentations différentes donneront des résultats potentiellement différents.
a = 11
if a > 5:
if a % 2 == 0:
print("plus grand que 5 et pair")
elif a % 2 == 1:
print("plus grand que 5 et impair")
plus grand que 5 et impair
a = 11
if a > 5:
if a % 2 == 0:
print("plus grand que 5 et pair")
elif a % 2 == 1:
print("plus grand que 5 et impair")
Ce second code n’affichera aucun résultat car aucune condition atteinte par le programme n’est vraie.
Les booléens#
Une valeur booléenne peut prendre deux valeurs: VRAI True
ou FAUX False
. Ces valeurs booléennes permettent de réaliser des tests logiques (AND, OR, XOR).
a = True
print(a)
True
b = False
print(b)
False
Au niveau du type de variables, ce sont donc des variables booléennes, en anglais bool
.
a = True
print(type(a))
<class 'bool'>
Les opérations logiques#
Il existe plusieurs opérations logiques:
“Et”
“Ou”
“Ou exclusif”
ET#
a
etb
est vrai si et seulement sia
est vrai etb
est vrai. Dans les autres cas, l’opération est fausse.
a |
b |
a “et” b |
---|---|---|
True |
True |
True |
False |
True |
False |
True |
False |
False |
False |
False |
False |
Pour cette opération, il faut utiliser le symbôle &
.
a = True
b = True
print(a, "and", b, "is", a & b)
True and True is True
a = False
b = True
print(a, "and", b, "is", a & b)
False and True is False
a = True
b = False
print(a, "and", b, "is", a & b)
True and False is False
a = False
b = False
print(a, "and", b, "is", a & b)
False and False is False
OU#
a
oub
est vrai si et seulement si au moins une des deux variables est vraie. Dans les autres cas, l’opération est fausse.
a |
b |
a “ou” b |
---|---|---|
True |
True |
True |
False |
True |
True |
True |
False |
True |
False |
False |
False |
Pour cette opération, il faut utiliser une barre verticle (|
).
a = True
b = True
print(a, "or", b, "is", a | b)
True or True is True
a = False
b = True
print(a, "or", b, "is", a | b)
False or True is True
a = True
b = False
print(a, "or", b, "is", a | b)
True or False is True
a = False
b = False
print(a, "or", b, "is", a | b)
False or False is False
Ou exclusif#
a
oub
est vrai si et seulement si exactement une des deux variables est vraie. Dans les autres cas (si les deux sont vraies ou si les deux sont fausses), l’opération est fausse.
a |
b |
a “ou exclusif” b |
---|---|---|
True |
True |
False |
False |
True |
True |
True |
False |
True |
False |
False |
False |
Pour cette opération, il faut le symbôle ^
.
a = True
b = True
print(a, "or", b, "is", a ^ b)
True or True is False
a = False
b = True
print(a, "xor", b, "is", a ^ b)
False xor True is True
a = True
b = False
print(a, "xor", b, "is", a ^ b)
True xor False is True
a = False
b = False
print(a, "xor", b, "is", a ^ b)
False xor False is False
Les booléens comme résultat d’un test#
Les valeurs booléennes peuvent aussi être le résultat d’un test. Commençons par définir a=5
et b=3
.
a = 5
b = 3
Pour tester une égalité, il faut utiliser ==
.
Warning
Une erreur fréquente est de n’utiliser qu’un seul signe d’égalité.
Comme a
n’est pas égal à b
, le résultat du test est faux.
print(a==b)
False
C’est vrai que a
est plus grand que b
.
print(a>=b)
True
Et donc c’est faux que a
soit plus petit que b
.
print(a<b)
False
Finalement, c’est vrai que le contenu des deux variables est différent.
print(a!=b)
True
Tests multiples#
Supposez que les variables a
, b
, c
, et d
possèdent respectivement les valeurs 4, 5, 6 et 7.
Est-ce que l’affirmation suivante est vraie ou fausse ?
a = 4
b = 5
c = 6
d = 7
print((a > c) | (b != d))
True
En effet, il convient d’évaluer les expressions en suivant l’ordre imposé par les parenthèses. a
n’est pas plus grand que c
mais en même temps b
est différent de d
. Nous avons donc: False or True
, ce qui est True
.
Exercices#
Exercice 1#
En repartant de l’exercice sur le calcul des racines d’un polynôme:
Pour calculer les racines d’une fonction, il faut tout d’abord calculer le \(\Delta\):
Ajoutez une condition après le calcul du delta :
Si \(\Delta\) est positif, il y a 2 racines
Si \(\Delta\) est nul, il n’y qu’une racine
Si \(\Delta\) est négatif, il n’y a pas de racine
Si le \(\Delta\) est positif, \(r_1\) et \(r_2\) sont:
Si le \(\Delta\) est nul, \(r_1\) est:
Si le \(\Delta\) est négatif, il n’y a pas de racine.
Calculer les racines du polynome \(f(x) = x^2 + -4x + 4\). Donc:
a
: 1b
: -4c
: 4
a = 1
b = -4
c = 4
delta = b**2 - 4*a*c
if delta > 0:
rac1 = (-b - delta**0.5)/(2*a)
rac2 = (-b + delta**0.5)/(2*a)
print("Racine 1:", rac1)
print("Racine 2:", rac2)
elif delta == 0:
rac1 = -b/(2*a)
print("Racine:", rac1)
else:
print("Pas de racine")
Racine: 2.0
Exercice 2#
Demander à l’utilisateur d’entrer un entier. Indiquer si le chiffre est pair ou impair.
nombre = int(input("Entrez un nombre entier: "))
if nombre % 2 == 0:
print(nombre, "est un chiffre pair.")
else:
print(nombre, "est un chiffre impair.")
Entrez un nombre entier: 2
2 est un chiffre pair.
Exercice 3#
Demander à l’utilisateur d’entrer deux entiers. Calculer la somme et indiquer si celle-ci est paire ou impaire.
nombre1 = int(input("Entrez un nombre entier: "))
nombre2 = int(input("Entrez un nombre entier: "))
somme = nombre1 + nombre2
if somme % 2 == 0:
print(somme, "est un chiffre pair.")
else:
print(somme, "est un chiffre impair.")
Entrez un nombre entier: 5
Entrez un nombre entier: 3
8 est un chiffre pair.
Exercice 4#
Demander à l’utilisateur d’entrer deux entiers. Indiquer si a est plus grand que b, plus petit que b, ou si les chiffres sont égaux.
nombre1 = int(input("Entrez un nombre entier: "))
nombre2 = int(input("Entrez un nombre entier: "))
if nombre1 > nombre2:
print(nombre1, "est plus grand que", nombre2)
elif nombre1 < nombre2:
print(nombre2, "est plus grand que", nombre1)
else:
print("Les deux nombres sont égaux.")
Entrez un nombre entier: 4
Entrez un nombre entier: 2
4 est plus grand que 2
Exercice 5#
Demander à l’utilisateur d’entrer deux entiers a
et b
. On fait l’hypothèse que l’utilisateur entre deux entiers différents. Vérifier si ce sont des multiples (vérifier dans les deux sens: a peut être multiple de b ou b peut être un multiple de a).
a = int(input("Entrez un nombre entier: "))
b = int(input("Entrez un nombre entier: "))
if a % b == 0:
print(a, "est un multiple de", b)
elif b % a == 0:
print(b, "est un multiple de", a)
else:
print("Ce ne sont pas des multiples")
Entrez un nombre entier: 16
Entrez un nombre entier: 4
16 est un multiple de 4
Exercice 6#
Demander à l’utilisateur d’entrer un montant HTVA, un taux de TVA et un montant TVAC. Vérifier ensuite si les informations fournies sont cohérentes.
htva = float(input("Entrez un montant HTVA: "))
taux_tva = float(input("Entrez un taux de TVA: "))
tvac = float(input("Entrez un montant TVAC: "))
if htva * (1+taux_tva) != tvac:
print("Les informations sont incoherentes")
else:
print("Les informations sont coherentes")
Entrez un montant HTVA: 1210
Entrez un taux de TVA: 0.21
Entrez un montant TVAC: 1000
Les informations sont incoherentes
Exercice 7#
Importer la librairie
random
Générer une valeur aléatoire comprise entre 1 et 10 et stocker cette valeur dans la variable
valeur
Demander à l’utilisateur d’entrer un entier et stocker cet entier dans la variable
essai
Tester si
valeur
etessai
sont égaux (en valeur)Si c’est le cas, afficher “Gagné !”
Sinon, afficher “Perdu, c’était [valeur]”
import random
valeur = random.randint(1, 10)
essai = int(input("Entrer un chiffre: "))
if essai == valeur:
print("Gagné!")
else:
print("Perdu, c'était", valeur)
Entrer un chiffre: 5
Perdu, c'était 8
Exercice 8#
Importer la librairie
random
Générer une valeur aléatoire comprise entre 1 et 10 et stocker cette valeur dans la variable
valeur
Demander à l’utilisateur d’entrer un entier et stocker cet entier dans la variable
essai
Tester si
valeur
etessai
sont égaux (en valeur)Si c’est le cas, afficher “Gagné !”
Sinon, tester si la
essai
est plus grand quevaleur
Si c’est le cas, afficher “Trop grand, c’était [valeur]”
Sinon, afficher “Trop petit, c’était [valeur]”
import random
valeur = random.randint(1, 10)
essai = int(input("Entrer un chiffre: "))
if essai == valeur:
print("Gagné!")
elif essai > valeur:
print("Trop grand, c'était", valeur)
else:
print("Trop petit, c'était", valeur)
Entrer un chiffre: 2
Trop petit, c'était 4