Algorithmique et Programmation 1
Conditionnelles et expressions booléennes
Licences Informatique et Mathématiques 1ère année
Premier semestre 2015 – 2016
Un exemple
Voilà ce qu’on a appris à faire la semaine dernière :
# La note finale est la moyenne de la note d'examen
# et de la moyenne de contrôle continu
note_cc1 = float(input('Note du premier contrôle : ')) note_cc2 = float(input('Note du second contrôle : ')) note_exam = float(input("Note de l'examen : ")) moyenne_cc = (note_cc1 + note_cc2) / 2
note_finale = (moyenne_cc + note_exam) / 2 print('Note finale :', note_finale)
I Les instructionsdu programme sont exécutées dans l’ordre
I On va maintenant ajouter la possibilité de faire des choix
Conditionnelles – cas simple
I On peut modifier le flot d’instructions grâce à des conditions :
I Siune certaine condition est vraie, exécuter un certain groupe (oubloc) d’instructions
I Sinon, passer directement à la
suite du programme suite
blocv
condition
vrai
faux début
Un exemple... avec un if
# La note finale est le maximum de la note d'examen
# et de la moyenne entre examen et moyenne de contrôle
# continu
note_cc1 = float(input('Note du premier contrôle : ')) note_cc2 = float(input('Note du second contrôle : ')) note_exam = float(input("Note de l'examen : ")) moyenne_cc = (note_cc1 + note_cc2) / 2
note_finale = (moyenne_cc + note_exam) / 2 if note_finale < note_exam:
# Les deux instructions suivantes ne s'exécutent que si
# la condition est vraie (remarquer le décalage des lignes) note_finale = note_exam
print('Note de contrôle non prise en compte.') print('Note finale :', note_finale)
Blocs d’instructions
Sur cet exemple, on a vu des groupes de lignes commençant par des espaces :
if moyenne_cc < note_exam:
note_finale = note_exam
print('Note de contrôle non prise en compte.')
I Ces groupes sont appelésblocs
I Le décalage du début de ligne est appelé indentation
I Toutes les lignes ont exactement la même indentation
I Ici, le bloc est introduit par une condition (if ... :)
I Changer l’indentation change le sens du programme (essayer !)
Syntaxe de if
# début if condition:
# bloc d'instructionsv
# suite
Exemple :
prenom = input()
if prenom == 'Hildegarde':
print('Très joli prénom !') print('Bonjour', prenom, '!')
I conditionest uneexpression booléenne
I Les instructions du bloc v sont exécutées uniquement si conditionest évaluée à True
I Dans tous les cas, reprise à l’instruction suivant le blocv
Expressions booléennes
Les conditions sont écrites à l’aide d’expressions booléennes
I Le type boolreprésente les valeurs vrai (True) et faux (False)
I Plusieurs opérateurs produisent des booléens
I Comparaisons : a < b a <= b a >= b a > b
I Égalité ou inégalité : a == b a != b
I Ces opérateurs fonctionnent sur de nombreux types de valeurs
I Sur lesintetfloat : ordre naturel
I Sur lesstr: ordre lexicographique (dictionnaire)
Ne pas confondrea = b (affectation) et a == b(test d’égalité) !
Expressions booléennes
I On peut combiner plusieurs expressions booléennes
I a and bvautTruesi aetbvalent True
I a or b vautTruesia oubvalent True
I not avautTruesi avautFalse a not a True False False True
a b a and b
True True True True False False False True False False False False
a b a or b
True True True True False True False True True False False False
Expressions booléennes
I Un exemple (dans l’interpréteur) :
>>> True and False False
>>> not 3 + 4 == 7 False
>>> 4 < 1 or 'Bonjour' >= 'Au revoir' True
I Un exemple plus long :
(n <= 3 and somme + n > seuil) or n > 3
I Pour quelles valeurs des trois variables cette expression vaut-elle True? False?
Conditionnelles à deux branches
I On peut ajouter un second bloc d’instructions :
I Siune certaine condition est vraie, exécuter un certain bloc (v)
I Sinon, exécuter un autre bloc (f)
I Enfin, continuer l’exécution normale du programme
I Seul l’un des deux blocs,v ou
bienf, est exécuté suite
blocf blocv
condition
vrai faux
début
Un exemple
Un exemple de condition à deux “branches” :
note_cc1 = float(input('Note du premier contrôle : ')) note_cc2 = float(input('Note du second contrôle : ')) note_exam = float(input("Note de l'examen : ")) moyenne_cc = (note_cc1 + note_cc2) / 2
if moyenne_cc < note_exam:
# Bloc à exécuter si la condition est vraie note_finale = note_exam
print('Note de contrôle non prise en compte.') else:
# Bloc à exécuter si la condition est fausse note_finale = (moyenne_cc + note_exam) / 2 print('Note de contrôle prise en compte.')
# Instruction exécutée dans tous les cas print('Note finale :', note_finale)
Syntaxe de if ... else
# début if condition:
# blocv else:
# blocf
# suite
Exemple :
num = int(input()) den = int(input()) if den != 0:
print(num, '=',
num // den, '*', den, '+', num % den ) else:
print('Division par zéro')
I Les instructions du bloc v sont exécutées uniquement si conditionest évaluée à True
I Les instructions du bloc fsont exécutées uniquement si conditionest évaluée à False
Dans tous les cas, reprise à l’instruction suivant le blocf
Conditionnelles composées
Cette construction peut être imbriquée :
# début
if condition 1:
if condition 2:
# blocv1v2 else:
# blocv1f2
# suite 2 else:
# blocf1
# suite 1
suite 1 suite 2
blocf1 blocv1f2
blocv1v2 condition 2
vrai faux
condition 1 vrai
faux début
(Toutes les variantes sont possibles – si chaqueelsecorrespond à un if !)
Un exemple – conditions imbriquées
note_cc1 = float(input('Note du premier contrôle : ')) note_cc2 = float(input('Note du second contrôle : ')) note_exam = float(input("Note de l'examen : "))
# On vérifie qu'aucune note n'est négative
if note_cc1 < 0 or note_cc2 < 0 or note_exam < 0:
# Remarquer l'opérateur 'or'
print('Erreur de saisie (note négative).') else:
moyenne_cc = (note_cc1 + note_cc2) / 2
# Condition dans la condition if moyenne_cc < note_exam:
# Indentation supplémentaire note_finale = note_exam
print('Note de contrôle non prise en compte.') else:
note_finale = (moyenne_cc + note_exam) / 2 print('Note de contrôle prise en compte.')
Conditionnelles enchaînées avec elif
Cas particulier où le blocelsecontient seulement un autreif : Le code...
# début
if condition 1:
# bloc v1 else:
if condition 2:
# bloc f1v2 else:
# bloc f1f2
# suite
... s’écrit aussi :
# début
if condition 1:
# blocv1 elif condition 2:
# blocf1v2 else:
# blocf1f2
# suite
Conditionnelles enchaînées avec elif
Cas particulier où le blocelsecontient seulement un autreif : Le code...
# début
if condition 1:
# bloc v1 else:
if condition 2:
# bloc f1v2 else:
if condition 3:
# blocf1f2v3 else:
# blocf1f2f3
# suite
... s’écrit aussi :
# début
if condition 1:
# blocv1 elif condition 2:
# blocf1v2 elif condition 3:
# blocf1f2v3 else:
# blocf1f2f3
# suite
Un exemple – if ... elif
if note_finale < 10:
print('Encore un petit effort !') elif note_finale < 12:
print('Ça passe !') elif note_finale < 14:
print('Pas mal !')
else: # Quelles valeurs possibles ? print('Bravo !')