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 :
- le mot if
- une condition de type booléen
- le caractère :
- 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
- 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 :
- le mot if
- une condition de type booléen
- le caractère :
- commençant sur la ligne suivante, et indenté d'un niveau, le bloc d'instructions associé au if
- commençant sur la ligne suivante le mot else
- le caractère :
- 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
- Modifier le programme précédent (à vous de choisir entre la version 1 ou 2) de la façon suivante :
- il se comporte de la même façon quand prix est supérieur à 1000,
- quand prix est inférieur ou égal à 1000, cela affiche "j'achète" puis cela affiche "c'est donné!" si prix est inférieur à 100, et cela affiche "même si c'est pas donné" si prix est compris entre 100 et 1000.
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) :
- Votre nom: est affiché,
- l'interprète attend que vous donniez une valeur sur le clavier,
- 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
- 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
- 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.
- 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