S1.3 Instructions conditionnelles

Bases en Pyhon 5 : Les instructions conditionnelles 

Si ...

Les conditions sont un concept essentiel en programmation. Elles vont vous permettre de faire une action précise si, par exemple, une variable est positive, une autre action si cette variable est négative, ou une troisième action si la variable est nulle.

Si...

Comme un bon exemple vaut mieux que plusieurs lignes d'explications, voici un exemple clair d'une condition prise sous sa forme la plus simple.

Exemple

Bien sur ce code affiche que ABC est triangle, puisque 25 est bien égal a 9 + 16. Notez bien le ==. Ce n'est pas une faute de frappe, on a vraiment mis deux fois le signe =. En python :

  • a = 1 est une affectation (a prend la valeur 1)
  • a == 1 est une comparaison utilisant l'opérateur comparatif ==. Cet opérateur permet de tester une égalité : (ici la proposition est : a = 1 ? e
  • a == 1 peut prendre deux valeurs : Vrai ou Faux. En Python (comme dans la majorité des langages de programmation) c'est True ou False. C'est donc une proposition booléenne.
  • On dénomme très souvent condition les propositions booléennes.

La structure de cette instruction conditionnelle. est :

if condition :
   Instruction(s)
Les instructions indentées qui suivent le if ne sont exécutées que si la condition est vraie.

Changeons un peu le code de départ :

Exemple

Cette fois la condition n'est pas vérifiée car BC**2 == AB**2 + AC**2 est faux.

Exercices

1Revenir sur la feuille Wims et faire l'exercice interactif n°1 (en bas de la page)

2Exercice de codage

Exercice de code
Le correcteur va générer deux nombres a et b. Pour chaqun de ces deux nombre vous devez tester s'il est pair et si oui, l'afficher ainsi : si les 2 sont pairs on aura : "a est pair" "b est pair" si a est pair et b impair on aura : "a est pair" si a est impair et b pair on aura : "b est pair" si les deux sont impairs on aura aucune sortie en console.
Le code sera éxécuté avec différentes valeurs de a qui seront générées automatiquement pour vous.

Si... et sinon...

Notre code précédent permet de dire qu'un triangle est rectangle. Mais lorsque le triangle n'est pas rectangle, notre code n'affiche rien, et avouez, c'est un peu dommage. Bien sur il est possible de décider ce que l'on veux faire si la condition est fausse :

Si... et sinon...
Exemple

Cette fois le code va afficher que le triangle n'est pas rectangle. Mais.... est-ce bien correct ??? Regarde ceci :

Exemple

Que va afficher ce code ? Est-ce correct ?

Bien sur que non. Il aurait pu afficher que le triangle n'est pas rectangle en A, et ce serait correct. Mais encore une fois c'est un peu dommage que ce code ne nous renseigne pas mieux, en nous indiquant que le triangle est rectangle, mais cette fois en C. Comment faire ?

On peut par exemple tester tous les cas :

Exemple

C'est mieux non ? En effet cette fois, le code affichera toujours si le triangle est rectangle. Mais problème.... s'il n'est pas rectangle, il ne va rien afficher. Bien sur, on pourrait s'en contenter, après tout, s'il ne dit rien, c'est qu'il n'est pas rectangle. Mais ceci n'est pas complètement satisfaisant. Nous verrons un peu plus loin comment faire mieux, mais avant, entraine toi un peu...

Exercice

3Revenir sur la feuille Wims et faire l'exercice interactif n°2 (en bas de la page)

4Exercice de code

Dans l'exercice qui suit, nous allons découvrir la fonction random.randrange()
Elle a un nom en 2 parties car elle ne fait pas partie des fonctions de base de python, elle se trouve dans un module qui s'appelle random

Pour l'utiliser on doit commencer par importer le module avec import random

Puis ont utilise randrange() ainsi par exemple :

a = random.randrange(0,4)



ici, a prendra une valeur aléatoire entre 0 et 3. Tout celà est en partie précodé dans l'exercice.
Exercice de code : lancer d'un dé
Nous allons créer un jeu très simple : Nous lançons 3 fois de suite un dé à 6 face, et à chaque lancé :
  • Si on obtient 6 on gagne 2€
  • sinon on gagne 1€.
Le lancé du dé s'écrira :

de = random.randrange(...)
A vous de remplacer les ... par ce qu'il faut pour obtenir un nombre entre 0 et 6, randrange fonctionne de la même façon que range.

Sinon, si...

Non seulement notre code n'affiche rien si le triangle n'est pas rectangle, mais il y a un autre petit problème. Imaginons que le triangle est rectangle en A. Dans ce cas, les 2 autres tests ne servent à rien... Pas très grave, c'est l'ordinateur qui fait les calculs pour rien. D'accord. Mais quand même ça n'est pas très malin.

Si... et sinon si...

Dans un cas comme celui là on peut enchainer les tests ensembles avec elif. Cette instruction est la contraction de else et if, et signifie : sinon, si...

Laissons de coté Pythagore un moment, nous y reviendrons. Prenons un autre exemple :

2 amies, Marie et Julie, veulent aller visiter une 3ème amie qui habite à 10km. Mais ont-elles une voiture ?

Si Marie a une voiture 
   alors c'est bon
Sinon Si : Julie a une voiture
   alors c'est bon
Sinon
   c'est mort
Si on répond OUI à la première question :
         le problème est réglé, et on ne va pas regarder ce qu'il faudrait fait sinon.
Sinon, si on répond oui à la seconde
              le problème est quand même réglé et ne s'occupe pas du sinon qui suit
Sinon :
           On  répondu non aux deux. Marie et Julie restent à la maison.
En Python ce code ressemblerait à ceci :

if Marie a une voiture 
   alors c'est bon
elif Julie a une voiture :
   alors c'est bon
else :
    c'est mort
Vous vous dites peut-être que cela ne ressemble pas vraiment à un code informatique. Pourtant ce n'est pas bien loin, regardez :

Exemple

Revenons à Pythagore

Exemple

Comment ça va fonctionner ? traduisons chaque ligne en langage normal :

AB = 5
AC = 4
BC = 3
Si BC**2 == AB**2 + AC**2 Alors :
         print("ABC est un triangle rectangle en  A")
Sinon Si : AB**2 == AC**2 + BC**2 : :Alors :
         print("ABC est un triangle rectangle en C")
Sinon Si : AC**2 == AB**2 + BC**2 : :Alors :
         print("ABC est un triangle rectangle en B")
Sinon : 
         print("ABC n'est pas un triangle rectangle ")
si la première condition est vraie, le code n'exécutera aucun des Sinon :. Mais si elle est fausse il va passer au premier Sinon Si :

Si la 2ème condition est vraie le code n'exécutera pas les autres Sinon. Mais si elle est fausse il passera au 2ème Sinon Si :.

Si cette 3ème condition est vraie il n'exécutera pas le Sinon final. Mais si elle est fausse, il passera a ce dernier sinon, et cette fois il n'y a pas de si, donc il affichera: le triangle n'est pas rectangle.

Et c'est correct, car les 3 tests ont échoué, donc en effet on est sur qu'il n'est pas rectangle.

Exercices

3Revenir sur la feuille Wims et faire l'exercice interactif n°3 (en bas de la page)

Deux exercices de codage

Trouver le plus grand

1 - Exercice de codage

Exercice de code : trouver le plus grand
Écrivez un programme pour trouver un maximum entre trois nombres (que l'utilisateur va choisir) en utilisant 3 if successifs.
Le correcteur va automatiquement générer des valeurs pour les 3 nombres a b et c, distincts et strictement positifs.
Votre code doit afficher la valeur du plus grand des 3 nombres.
 
Contrainte : Même si vous avez déjà appris à utiliser and, vous ne devez pas l'utiliser dans cet exercice (nous ne l'avons pas encore vu).

Déroulez le code pour les valeurs : a = 2, b = 3 et c = 1

2- est-ce que ça marche ?

Examinez le code ci-dessous :

Exemple : trouver le plus grand
Chercher le plus grand avec if..elif...else...

Est-ce que ce code fonctionne ? (justifiez)

3- Des tests plus précis et efficaces

Nous avons utilisé une variable nbMax que nous avons initialisée à 0. Ceci n'est pas forcément naturel. En effet, on aurait plutôt tendance a dire que :

Algorithme de détermination de la plus grande des 3 valeurs :

si a > b ET a > c : a est le plus grand
et sinon, si b > a et b > c : b est le plus grand
et sinon c'est c le plus grand.

en python, on écrira par exemple :

if a > b and a > c :

Reprenez l'exercice avec and en suivant l'algorithme donné ci-dessus.

Exercice de code : trouver le plus grand (avec and)
Écrivez un programme pour trouver un maximum entre trois nombres entiers distincts en utilisant if elif (éventuellement plusieurs elif) et else. Votre code doit afficher la valeur du plus grand des 3 nombres.
 
Contrainte : Vous devez écrire les conditions en utilisant and.
3 dés

Exercice de code
Bob a trouvé un jeu de hasard en ligne très simple : il doit cliquer 3 fois de suite sur la touche "lancer le dé". A chaque fois cela affiche un entier entre 1 et 6.
  • S'il obtient 3 nombres identiques, il gagne 3 euros.
  • S'il obtient 2 nombres identiques, il gagne 2 euros.
  • S'il obtient trois nombres tous différents, il perd 1 euro.
Vous devez écrire le programme qui demande les trois nombres entiers a, b et c, puis détermine et affiche le nombre d'entiers identiques. on appelera n_identiques la variable donnant ce nombre. Par exemple :
  • Pour a = 1, b = 3, c = 2 il doit trouver n_identiques = 0
  • Pour a = 1, b = 3, c = 1 il doit trouver n_identiques = 2
  • Pour a = 1, b = 1, c = 1 il doit trouver n_identiques = 3

Notez bien : ici nous n'avons pas de Else...

La raison est qu'on n'en a pas besoin. Si une condition est vraie, on agit en conséquence, et sinon on ne fait rien. Le sinon n'est donc pas utile.

A faire seulement si vous avez déjà étudié les listes en Python : détermination de la médiane

Déterminer la médiane d'une série statistique

Rappel de l'algorithme de la médiane

Soit lst=[x1,x1,...xN] une série de nombres (la série contient N éléments) ordonnée dans l'ordre croissant.

  • Si N est pair la médiane est la moyenne des valeurs de rang N/2 et N/2+1
  • Si N et impaire, la médiane est la valeur de rang (N+1)/2

Exercice de code : Déterminer la médiane
Ecrire un code qui calcule la valeur médiane d'une liste de nombres.
 
PRECODE : avant votre code, une liste lst sera générée par le correcteur.
 
Aide 1 Aide 2 Aide 3