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:

  1. La définition d’une variable a

  2. Un test pour savoir si le contenu de la variable est pair ou impair

  3. L’affichage d’un message cohérent avec le résultat du test

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.

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 et b est vrai si et seulement si a est vrai et b 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 ou b 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 ou b 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 est plus grand que c ou b est différent de d."
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:

\[ f(x) = ax^2 + bx + c \]

Pour calculer les racines d’une fonction, il faut tout d’abord calculer le \(\Delta\):

\[ \Delta = b^2 - 4ac \]

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:

\[ r_1, r_2 = \frac{-b \pm \sqrt{\Delta}}{2a} \]

Si le \(\Delta\) est nul, \(r_1\) est:

\[ r_1 = \frac{-b}{2a} \]

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: 1

  • b: -4

  • c: 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 et essai 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 et essai sont égaux (en valeur)

    • Si c’est le cas, afficher “Gagné !”

    • Sinon, tester si la essai est plus grand que valeur

      • 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