6: If

Dans cette leçon, nous allons introduire la possibilité pour un programme de prendre des décisions en utilisant l'instruction if. Nous allons introduire ce concept en utilisant l'exemple de calculer le plus grand de deux nombres (comme la fonction max). Ce programme contient deux instructions if.

Que se passe-t-il si l'entrée est comme le suivant?

5
2
Essayez de déterminer la sortie du programme avant de l'exécuter.

Exemple
Calculer le maximum et illustrer if

Avez-vous trouvé la sortie correcte? Utilisez le visualiseur si nécessaire.

Faisons l'exercice pas à pas avec une deuxième entrée de test,

3
7
Dans les deux premières lignes, x prend la valeur 3 (la première ligne d'entrée) et y la valeur 7. Nous avons ensuite la ligne

if x >= y:
Elle vérifie si x est plus grand ou égal à y. Comme 3 est inférieur à 7, c'est faux. En conséquence, les lignes suivantes ne sont pas exécutées (elles sont sautées):

  print('(Le maximum est x)')
  theMax = x
Pour la prochaine instruction

if y > x:
le programme vérifie si y est strictement plus grand que x, ce qui est vrai. Donc les lignes print('(Le maximum est y)') et  theMax = y sont exécutées (elles ne sont pas sautées). Et pour finir, la ligne

print('Le maximum est', theMax)
est exécutée.

Dans le premier cas que nous avons testé, l'inverse s'est produit: le premier groupe de ligne a été exécuté, le second a été sauté et finalement  print('Le maximum est', theMax) a été exécuté à nouveau.

La structure générale d'une instruction if

  • La première ligne,
    if «condition»:
    est composée de 3 parties: le mot if, la «CONDITION» qui doit être une expression Vraie/Fausse (plus de détails ci-après) et les deux points :
  • Ensuite un block, qui signifie une séries de commandes qui peuvent être sur une ou plusieurs lignes. Python détermine où le block commence en utilisant l'indentation, en d'autres termes, il vous faut mettre le même nombre d'espaces devant chaque ligne du block.

Blocks

Les blocks seront utilisés à pleins d'autres endroits plus tard dans ce cours: Dans les boucles for ou quand vous écrirez vos propres fonctions, pas exemple (Dans d'autres langages, les blocks sont souvent délimités par des accolades  {}.) Toutes les lignes d'un block doivent avoir la même indentation: elles doivent commencer avec le même nombre d'espaces. Lorsque Python voit qu'une ligne a plus d'espaces, il considère qu'il s'agit d'un nouveau blocks et quand il y a à nouveau moins d'espaces, que le block se termine.

Vous allez maintenant vous entraîner avec les blocks Python. Le prochain exercice est en fait quatre exercices en un. Vous allez arranger les lignes du programme pour obtenir différents résultats. Cliquez sur les barres verticales pour pour ouvrir chaque partie; vous pouvez les faire dans n'importe quel ordre. Comme vous avez l'habitude maintenant, cliquez et déplacez les lignes de code pour les réarranger.

Partie 1: Indentation inattendue
Exercice mêlé : Indentation inattendue
Vous devez reproduire l'erreur suivante:

IndentationError: unexpected indent
  • if 1000 < 10:
  • print("message 1")
  • print("message 2")
  • if 2 > 1:
  • print("message 3")
Partie 2: Non-indentation inattendue
Exercice mêlé : Non-indentation inattendue
Vous devez reproduire l'erreur suivante:

IndentationError: unindent does not match any outer indentation level
  • if 1000 < 10:
  • print("message 2")
  • if 2 > 1:
  • print("message 3")
  • print("message 1")
Partie 3: Indentation attendu mais non trouvé
Exercice mêlé : Indentation attendu
Vous devez reproduire l'erreur suivante:

IndentationError: expected an indented block
  • if 1000 < 10:
  • print("message 1")
  • print("message 2")
  • if 2 > 1:
  • print("message 3")
Partie 4: Indentation correcte
Exercice mêlé : Indentation correcte
Ne provoquez pas d'erreurs!
  • if 1000 < 10:
  • print("message 1")
  • print("message 2")
  • if 2 > 1:
  • print("message 3")

True, False, et bool

Jusqu'à présent, dans la partie «condition» de l'instruction if, nous avons vu de simples comparaisons numériques comme x > y et x <= y, qui sont évaluées comme étant vraies ou fausses. Plus généralement, n'importe quelle expression ou valeur qui est vraie ou fausse est appelée Booléenne (en référence à George Boole). En Python, le type bool est utilisé pour représenter des valeurs booléennes; il n'existe que deux valeurs booléennes, True (Vrai) et False (Faux).

Exemple
Expressions booléennes

Notez qu'en Python, quand vous utilisez les valeurs booléennes True et False directement dans un programme, elle doivent être écrites avec une majuscule en premier sinon vous obtiendrez une erreur.

Comparaisons Booléennes

Nous avons déjà rencontré la famille des opérateurs <, >, <= et >= qui comparent deux nombres et renvoie un bool. Il y a deux autres manières de comparer des nombres:

  • x == y est l'opérateur d'égalité, il retourne True si x et y sont égaux
  • x != y est l'opérateur de non-égalité, il retourne True si x et y ne sont pas égaux
  • == et != fonctionnent aussi pour les chaînes de caractères et d'autres types de données

(Il y a deux signes égaux == puisque le signe égal à déjà comme signification dans  x = «expression» d'assigner à la variable x la valeur d'«expression». Confondre = avec == est une erreur courante source d'erreurs.)

Voici un exercice pour commencer.

Exercice de code : Quel est votre signe?
Ecrivez un programme qui lit un entier depuis l'entrée et qui ensuite écrit l'un des trois mots avec majuscule Positif, Negatif ou Zero suivant que le nombre est positif, négatif ou zéro.
Vous pouvez entrer des données pour le programme dans la boîte ci-dessous.

Nous venons d'introduire le concept de block (quelques lignes groupées ensembles au même niveau d'indentation). Vous pouvez avoir un block au sein même d'un autre block:

if password=='ouvreToiSésame':
  print('Utilisateur enregistré.')
  if heure>17:
    print('Bonsoir!')
  print('Entrez une commande:')
Ici le block extérieur est constitué de 4 lignes et le block intérieur d'une seule ligne: 
if password=='ouvreToiSésame':  
print('Utilisateur enregistré.')
if heure>17:
print('Bonsoir!')
print('Entrez une commande:')

Exercice à choix multiple : ifs imbriqués
Laquelle des sorties suivantes n'est pas possible pour ce programme?
Correct! Si des messages sont affichés, ce doit être le cas que le bloc extérieur (bleu) a été exécuté, ou en d'autres termes que le mot de passe est correct. Dans ce cas, même si heure>17 est fausse (et le bloc interne est sautée), la ligne print('Entrez une commande:') du bloc externe sera exécutée.

Plus tard, dans la leçon 9, nous verrons que des situations impliquants plusieurs vérifications booléenne peuvent être simplifiées en utilisant les commande else et elif (else if) en même temps que les opérateurs booléens and, or, et not. Vous êtes prêt à passer à la leçon suivante.