Accueil

Enoncés conditionnels

Objectifs du TD : maîtriser l'ordre d'exécution des instructions d'un programme. Apprendre à lire des données sur l'entrée standard.

Le plus souvent, il est nécessaire de choisir les opérations à effectuer en fonction de certaines conditions. Par exemple, pour calculer les solutions d'une équation du second degré, on va tenir compte du fait que le déterminant est positif, négatif ou nul. Les énoncés conditionnels des langages de programmation permettent de faire cela.

EXERCICES DE COURS

1. Enoncés conditionnels

Enoncé if
L'énoncé conditionnel le plus simple est l'énoncé if. Cet énoncé est constitué de :
  1. le mot if
  2. une condition de type booléen
  3. le caractère :
  4. commençant sur la ligne suivante, et indenté d'un niveau, une ou plusieurs instructions qui constituent un bloc d'instructions
Supposons par exemple que l'on ait des achats à faire, et que l'on considère que 1000 euros c'est trop cher ...
prix = 15000   #1
if prix > 1000 :          #2 instruction if
   print("trop cher")
   print("j'achète pas")
print("fin des achats")   #3

Ce programme contient 3 instructions. L'instruction 1 affecte prix avec 15000. L'instruction 2 est l'énoncé if. Comme prix est strictement supérieur à 1000, le bloc associé au if s'exécute et affiche "trop cher" et "j'achète pas". L'instruction 3 est enfin exécutée et "fin des achats" est affiché.
Si l'on change la valeur de prix avec 100, l'exécution du if ne fait rien, et "fin des achats" est affiché. Ceci est schématisé ci-dessous :

Exercice

  1. Commencez par créer un répertoire td2 dans le répertoire algoProgPeiP1. Lancez idle, ouvrez un nouveau fichier, et copiez le programme ci-dessus (avec ctrl-c et ctrl-v), enregistrez-le dans exemple1.py et exécutez-le avec F5. Changez les valeurs de prix.

Explications : indentation et blocs
L'indentation consiste à aligner les instructions de votre programme avec des retraits par rapport à la marge, en utilisant la touche .
Un bloc d'instructions est une séquence d'instructions qui sont exécutées sous les mêmes conditions. En python, les blocs sont définis par l'indentation. Dans le programme précédent, le bloc du if est en retrait d'un niveau par rapport à la marge et contient les deux instructions print. Quand la condition du if est vraie, tout le bloc est exécuté.
On appelle clause if le bloc d'instructions associé au if.

Enoncé if else
L'énoncé if else étend l'énoncé if en définissant ce qu'il faut faire quand la condition est fausse. Il est constitué de :
  1. le mot if
  2. une condition de type booléen
  3. le caractère :
  4. commençant sur la ligne suivante, et indenté d'un niveau, le bloc d'instructions associé au if
  5. commençant sur la ligne suivante le mot else
  6. le caractère :
  7. commençant sur la ligne suivante, et indenté d'un niveau, le bloc d'instructions associé au else (appelé aussi clause else)
prix = 15000   #1
if prix > 1000 :          #2
   print("trop cher")
   print("j'achète pas")
else :
   print("j'achète!")
print("fin des achats")   #3

Enoncé elif
L'énoncé elif est un raccourci pour else if c'est à dire qu'il revient à ajouter des conditions dans la clause else. Ci-dessous, si le prix est inférieur ou égal à 1000 et qu'il est inférieur à 100, on affichera "c'est donné!".
# programme 1 : version avec elif
prix = 15000   #1
if prix > 1000 :          #2
   print("trop cher")
   print("j'achète pas")
elif prix < 100 :
   print("c'est donné!")
else :
   print("j'achète")
print("fin des achats")   #3

Ce code est équivalent à :
# programme 2 : version équivalente sans elif
prix = 15000   #1
if prix > 1000 :          #2
   print("trop cher")
   print("j'achète pas")
else :
   if prix < 100 :
      print("c'est donné!")
   else :
      print("j'achète")
print("fin des achats")   #3

Exercice

  1. Modifier le programme précédent (à vous de choisir entre la version 1 ou 2) de la façon suivante : Par exemple, pour prix=150, le résultat est :
    j'achète
    même si c'est pas donné
    fin des achats
    
    et pour prix=56 le résultat est :
    j'achète
    c'est donné!
    fin des achats
    

Un bloc d'instructions peut contenir autant d'énoncés conditionnels que l'on veut. Donc on peut avoir un if dans une clause if, qui contiendra encore un if ...
Attention à ne pas confondre l'affectation x=3 et la condition x==3 qui est une expression booléenne qui renvoie True ou False.

2. Fonction input

Les programmes travaillent sur des données qui sont fournies par l'utilisateur. En Python 3, la fonction input permet de lire des valeurs et renvoie une chaîne de caractères (les notions liées aux fonctions seront précisées dans le chapitre 4). Voici le fonctionnement de input sur l'exemple n = input("Votre nom: ") que vous pouvez tester dans l'interprète (i.e. fenêtre shell) :

  1. Votre nom: est affiché,
  2. l'interprète attend que vous donniez une valeur sur le clavier,
  3. la chaîne de caractères que vous avez tapée au clavier est renvoyée et placée dans la variable n (vous pouvez vérifier en tapant n dans l'interprète).

La fonction input renvoie toujours une chaîne de caractères, même si vous tapez des chiffres. Pour obtenir des entiers ou des floats, il faut utiliser des fonctions de conversion comme int et float, comme dans l'exemple ci-dessous.
# des exemples pour lire des valeurs avec Python 3.1

# lecture d'une chaine de caractères
ch = input("votre nom : ")
# affichage de la chaine lue
print("vous vous appellez", ch)

# lecture d'entiers
a = input("un entier : ")
print("type de a",type(a))
aa = int(a)        #aa est la conversion de la chaine a en entier
print("type de aa",type(aa))

# ici on compose la lecture et la convertion 
b = int(input("un autre entier : ")) # b est un entier
c = aa+b
print ("la somme", c)

# exemple pour lire un décimal
f = float(input("un nombre décimal : "))

Exercice

  1. Ecrire un programme qui utilise deux variables marqueVoiture et annee et utilise la fonction input pour demander leurs valeurs à l'utilisateur. Le programme affiche "Vous avez des goûts de luxe" s'il s'agit d'une Ferrari, "Voiture familliale" s'il s'agit d'une Civic, "Voiture économique" s'il s'agit d'une 107, et "Pas d'avis sur votre voiture" dans les autres cas. Ensuite il affiche l'âge de la voiture et il affiche "Voiture de collection" si l'âge est supérieur à 40 ans.

Une part très importante du travail du programmeur est de tester les programmes qu'il a écrit pour s'assurer qu'ils fonctionnent correctement (i.e. ils ne contiennent pas de bugs). Tester un programme consiste à l'exécuter avec toutes les valeurs possibles des entrées pour s'assurer qu'il fonctionne correctement dans tous les cas. Avez-vous testé votre programme dans tous les cas, c'est à dire pour toutes les valeurs possibles de marqueVoiture et annee ?

Exercices

  1. Ecrire un programme qui lit trois entiers et les affiche par ordre décroissant. Par exemple
       nombre 1 : 34
       nombre 2 : 1
       nombre 3 : 26
       Voici vos valeurs triées par ordre décroissant
       34 26 1
    
    Aide : Vous pouvez faire deux versions : une version qui fait tous les cas possibles avec des if, elif, else, et une version qui calcule d'abord le maximum et le minimum des deux premières valeurs.

  2. Ecrire un programme qui lit un mois et calcule le nombre de jours du mois. Pour simplifier, le mois sera donné par un entier compris entre 1 et 12. Les mois 1, 3, 5, 7, 8, 10 et 12 ont 31 jours, les mois 4, 6, 9 et 11 ont 30 jours. Le mois 2 a 29 jours les années bissextiles et 28 jours les années non bissextiles. Exemples d'exécution :
      Quel mois ? (entre 1 et 12) 4
      Il y a 30 jours dans le mois 4
      Quel mois ? (entre 1 et 12) 2
      Il y a 29 jours les années bissextiles et 28 jours sinon
    
    Aide : quand le mois n'est pas égal à 2, on vous recommande d'utiliser l'opérateur % (modulo) pour tester la parité du mois. Si le mois est strictement inférieur à 8, alors il a 31 jours s'il est impair (et 30 jours s'il est pair); s'il est supérieur ou égal à 8 c'est l'inverse.


Collavizza Hélène