Aller au contenu

Chapitre 1.2 - Instructions conditionnelles

I. La syntaxe par l'exemple⚓

Juste un if

Important

Prenez le temps de lire les commentaires !

Cliquez sur les +

Python
prix = 50
if prix > 20:  # (1)
    print("Ce prix dépasse 20 euros")
  1. ⚠ Le caractùre : est obligatoire aprùs if, elif, else, for et while. Il provoque l'indentation automatique du bloc d'instruction qui suit.

Tester :

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein Ă©cran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

if et else

Important

Prenez le temps de lire les commentaires !

Cliquez sur les +

Python
note = float(input("Saisir votre note : "))
if note >= 10:  # (1)
    print("reçu")
else:  # (2)
    print("refusé")
  1. ⚠ Le caractùre : est obligatoire aprùs if, elif, else, for et while. Il provoque l'indentation automatique du bloc d'instruction qui suit.

  2. ⚠ Le caractùre : est obligatoire aprùs if, elif, else, for et while. Il provoque l'indentation automatique du bloc d'instruction qui suit.

Tester :

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein Ă©cran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

if, elif et else

Important

Prenez le temps de lire les commentaires !

Cliquez sur les +

Python
note = float(input("Saisir votre note : "))
if note >= 16:  # (1)
    print("TB")  # (2)
elif note >= 14:  # (3)
    print("B")  # (4)
elif note >= 12:  # (5)
    print("AB")  # (6)
elif note >= 10:
    print("reçu") # (7)
else:  # (8)
    print("refusé")  # (9)
  1. ⚠ Le caractùre : est obligatoire aprùs if, elif, else, for et while. Il provoque l'indentation automatique du bloc d'instruction qui suit.

  2. Si on est arrivĂ© lĂ , cela signifie que note ≀ 16

  3. elif signifie sinon si.

  4. Si on est arrivĂ© lĂ , cela signifie que note < 16 et note ≄ 14 :
    14 ≀ note < 16

  5. ⚠ Le caractùre : est obligatoire aprùs if, elif, else, for et while. Il provoque l'indentation automatique du bloc d'instruction qui suit.

  6. Si on est arrivĂ© lĂ , cela signifie que note < 14 et note ≄ 12 :
    12 ≀ note < 14

  7. Si on est arrivĂ© lĂ , cela signifie que note < 12 et note ≄ 10 :
    10 ≀ note < 12

  8. ⚠ Le caractùre : est obligatoire aprùs if, elif, else, for et while. Il provoque l'indentation automatique du bloc d'instruction qui suit.

  9. Si on est arrivé là, cela signifie que note < 10 . On n'écrit jamais de condition aprÚs else

Tester :

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein Ă©cran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

if ... et if

Important

Prenez le temps de lire les commentaires !

Cliquez sur les +

Python
note = float(input("Saisir votre note : "))
if note == 20:  # (1)
    print("Parfait !")
if note != 0:  # (2)
    print("Ce n'est pas nul !")
# (3)
  1. ⚠ Il faut deux symboles == pour tester l'Ă©galitĂ©. Un seul symbole =rĂ©alise une affectation.

  2. ⚠ DiffĂ©rent s'Ă©crit !=

  3. ⚠ Il n'est pas obligatoire d'avoir un else

Tester :

Vous pourrez tester les saisies de 0, puis de 20, puis de 10 par exemple. Que se passe-t-il ?

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein Ă©cran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

Solution

Si on saisit 0 ... il ne se passe rien ...

Lisez le code, c'est normal ! 😊

Si on saisit 20, "on rentre" dans les deux tests if, et on obtient les deux affichages.

II. Cours/TD if⚓

1. Avec des triangles⚓

Le triangle est-il rectangle?

VoilĂ  la question que l'on se pose : le triangle ci-dessous est-il rectangle ?

triangle 3 4 5

Tester ci-dessous. Que se passe-t-il ?

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein Ă©cran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

Solution

Bien sûr ce code affiche que ABC est triangle, puisque 25 est bien égal a 9 + 16.

\(AC^2 == AB^2 + BC^2\) s'Ă©value Ă  True

**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 ?
  • 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 les conditions ainsi : expressions boolĂ©ennes.

La structure de cette instruction conditionnelle est :

if condition :
    Instruction(s)
Et si le triangle n'Ă©tait pas rectangle, qu'aurait fait notre programme ?

Essayons, en modifiant une longueur. Ci-dessous, on a mis BC = 2, et du coup, forcément, l'égalité de pythagore n'est plus vraie, et le triangle n'est pas rectangle.

Tester ci-dessous. Que se passe-t-il ?

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein Ă©cran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

Solution

Il ne se passe rien !

L'instruction print() n'a pas été exécutée, parce que la condition n'est pas vérifiée.

Cette fois, l'expression booléenne \(AC^2 == AB^2 + BC^2\) s'évalue à False

L'indentation

Afin de mieux visualiser le fonctionnement par bloc, nous allons ajouter quelques instructions dans notre code.

Tester ci-dessous. Que se passe-t-il ?

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein Ă©cran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

Solution

déroulé

👉 On observe donc qu'il n'y a pas d'affichage dans le cas oĂč le triangle n'est pas rectangle en B.

2. Pile ou face⚓

La fonction choice()

Dans cet exercice, nous allons utiliser : la fonction choice()

Cette fonction est disponible dans la librairie random.

Nous aurons l'occasion de reparler de tout ceci plus tard.
Pour le moment nous allons juste utiliser le petit code suivant.
Vous devez l'exécuter plusieurs fois de suite.

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein Ă©cran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

Jeu de Pile ou Face

Le jeu est le suivant :

On simule avec le code précédant le lancer de piÚce.

  • Si on tombe sur "pile" on gagne 1 euro.
  • Si on tombe sur "face" on perd 1 euro.

Compléter le code ci-dessous pour qu'il s'affiche "gagné 1 euro" ou "perdu 1 euro" en respectant la rÚgle du jeu.

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein Ă©cran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

Solution
from random import choice
lancer = (choice(["pile", "face"]))
print("obtenu : ", lancer)
if lancer == "pile":
    print("gagné 1 euro")
if lancer == "face":
    print("perdu 1 euro")
Jeu de Pile ou Face avec deux lancers

Le jeu est maintenant le suivant
On simule avec le lancer deux piĂšces. * Si les deux piĂšces tombent toutes les deux du mĂȘme cĂŽtĂ© on gagne 1 euro. * Si une tombe sur "pile" et l'autre sur "face" on perd 1 euro.

Le symbole différent

Rappel : en Python le symbole \(\neq\) s'Ă©crit !=

Compléter le code ci-dessous pour qu'il s'affiche "gagné 1 euro" ou "perdu 1 euro" en respectant la rÚgle du jeu.

👉 Vous devrez l'exĂ©cuter plusieurs fois de suite pour bien observer les diffĂ©rentes possibilitĂ©s.

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein Ă©cran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

Solution
from random import choice
lancer_1 = (choice(["pile", "face"]))
lancer_2 = (choice(["pile", "face"]))
print("obtenu pour la piĂšce 1 : ", lancer_1)
print("obtenu pour la piĂšce 2 : ", lancer_2)
if lancer_1 == lancer_2:
    print("gagné 1 euro")
if lancer_1 != lancer_2:
    print("perdu 1 euro")

III. Cours/TD if ... else⚓

if...if

Dans les 2 exercices qui précÚdent, vous pouvez remarquer qu'on fait à chaque fois un test puis son contraire :

exercice 1 :

  • On teste d'abord si on a obtenu "pile".
  • On teste ensuite le contraire, Ă  savoir, si on a obtenu "face".

Pourtant, le premier test pourrait nous suffire : si oui, le second test echouera, et si non, le second test réussira.

En clair, soit la piĂšce tombe sur "pile", soit elle ne tombe pas sur "pile" et on n'a pas besoin de se poser deux fois la mĂȘme question !

exercice 2 :

  • soit les 2 piĂšces tombent du mĂȘme cĂŽtĂ©
  • soit elles ne tombent pas du mĂȘme cĂŽtĂ©.

LĂ  encore, il semble inutile de se poser deux fois la mĂȘme question !

En fait, dans ces deux exercices, on test une condition et on affiche une chose si elle est True et une autre sinon.

if ...else

👉Nous pouvons simplifier le code de l'exercice 1 ainsi :

from random import choice
lancer = (choice(["pile", "face"]))
print("obtenu : ", lancer)
if lancer == "pile":
    print("gagné 1 euro")
else:
    print("perdu 1 euro")

else

else signifie sinon.

Le code est donc trĂšs explicite :

Si on a obtenu pile :
    afficher("gagné 1 euro")
Sinon :
    afficher("perdu 1 euro")
tester et comprendre

1. tester un lancer pile

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein Ă©cran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

2. tester un lancer face

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein Ă©cran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

Solution

VoiĂ  ce qu'il se passe :

pile face

Jeu de Pile ou Face avec deux lancers et un else

Le jeu est maintenant le suivant
On simule avec le lancer deux piĂšces. * Si les deux piĂšces tombent toutes les deux du mĂȘme cĂŽtĂ© on gagne 1 euro. * Si une tombe sur "pile" et l'autre sur "face" on perd 1 euro.

Contrainte

Utiliser obligatoirement else

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein Ă©cran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

Solution
from random import choice
lancer_1 = (choice(["pile", "face"]))
lancer_2 = (choice(["pile", "face"]))
print("obtenu pour la piĂšce 1 : ", lancer_1)
print("obtenu pour la piĂšce 2 : ", lancer_2)
if lancer_1 == lancer_2:
    print("gagné 1 euro")
else:
    print("perdu 1 euro")

IV. Cours/TD if ... elif...else⚓

La struction if ... else ... que nous venons de voir est souvent utilisée, quand on doit faire quelques chose si une condition est vraie, et autre chose sinon (si elle est fausse donc !).

Mais il y a aussi de nombreuses situations oĂč on peut avoir plusieurs cas.

Encore des triangles

Reprenons le triangle du début, et considérons maintenant 2 triangles :

2 triangles

Tester ci-dessous. Qu'en pensez-vous ?

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein Ă©cran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

Solution

Ce n'est pas satisfaisant !

Pour le triangle de droite, le code a bien trouvé qu'il n'est pas rectangle en B. Ce qui est vrai. Mais il serait préférable qu'il nous affiche que ce triangle est rectangle en C.

En fait, il y a 3 égalités à vérifier pour savoir si le triangle est rectangle :

  • \(AB^2 == AC^2 + BC^2\) 👉 le tirangle est rectangle en \(C\)
  • \(AC^2 == AB^2 + BC^2\) 👉 le tirangle est rectangle en \(B\)
  • \(BC^2 == AB^2 + AC^2\) 👉 le tirangle est rectangle en \(A\)

Et si aucune des 3 conditions n'est vraie : le triangle n'est pas rectangle !

Tester ci-dessous. Nous avons utilisé elif

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein Ă©cran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

Résumé

Le code est donc trĂšs explicite :

Si 1ere condition :
    bloc si cette condition est vraie
Sinon si 2Ăšme condition :
    bloc si cette condition est vraie
Sinon si 3Ăšme condition :
    bloc si cette condition est vraie
Sinon :                          # <-- sinon ici signifie : si aucune des conditions qui précÚdent n'est vraie
    bloc si toutes les conditions précédentes sont fausse

A savoir

  • Il peut y avoir autant de elif qu'on a de cas Ă  tester
  • Le else est facultatif (parfois, on regarde plusieurs cas, mais si aucun n'est vrai, on ne fait rien et on n' a donc pas besoin de else)
  • une seule condition sera exĂ©cutĂ©e (celle qui est vraie ou celle du else, s'il y a un else)
  • MĂȘme si 2 conditions sont vraies ?
    oui ! voir les exemples ci dessous...
Pile ou face avec conditions non mutuellement exclusives

Modifions le jeu : on lance 2 piÚces, et si au moins une des deux est pile on a gagné, sinon on a perdu.

Tester ci-dessous. Qu'en pensez-vous ?

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein Ă©cran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

Solution

Nous sommes d'accord, les 2 conditions lancer_1 == "pile" et lancer_2 == "pile"sont vraies toutes les deux ... mais si on a gagné à la 1ere piÚce, inutile de vérifier si on a encore gagné à la seconde !

👉 Dans une structure if.. elif... else... on arrĂȘte les tests dĂšs qu'une des conditions est vraie.

  • Dans l'exemple des triangles les conditions sont mutuellement exclusives :
    Un triangle ne peut pas ĂȘtre rectangle et A et en mĂȘme temps en B ou en C. Donc s'il est rectangle en A, inutile de regarder s'il est rectangle en B. DĂšs qu'un cas est vrai, on peut se passer de regarder les autres.

  • dans l'exemple des lancers de piĂšces les conditions ne sont pas mutuellement exclusives :
    En gĂ©nĂ©ral, on utilise les structures elif avec des cas disjoint, c'est Ă  dire pour des conditions mutuellement exclusives, ou pour le dire plus simplement, quand il est impossible que 2 conditions soient vraies en mĂȘme temps. Mais ce n'est pas obligĂ©, l'exemple des 2 piĂšces montre un tel exemple.

III. Exercices⚓

Exercice 1 : la cible - version 1

Bob a trouvé un jeu de fléchette trÚs simple : il lance une flechette sur le plateau et il gagne 1 point si la flechette atteint la croix rouge. Le plateau est représenté ci-dessous :

cible

Bob a programmé le jeu sur son ordinateur.

Dans cet exercice, nous allons utiliser une nouvelle fonction : la fonction randint()
Cette fonction permet d'obtenir un nombre aléatoire. Par exemple, randint(1, 6) est un nombre aléatoire compris entre 1 et 6, inclus.

Pour importer la fonction randint() de la librairie random (c'est-a-dire pouvoir l'utiliser dans notre code) nous ajoutons au début de notre code :

from random import randint

1. Compléter le code ci-dessous :

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein Ă©cran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

Solution
# On importe la fonction randint du module random
from random import randint

# Bob lance sa flechette, elle atteint une case au hasard du plateau :
numero_ligne = randint(0, 4)
numero_colonne = randint(0, 4)

print("La flechette atteint la case située : Ligne :", numero_ligne,"et  Colonne :", numero_colonne)
# a-t-il gagné ?

if numero_ligne == 2 :
    print("Bob a gagné")
elif numero_colonne == 2 :
    print("Bob a gagné")
else :
    print("Bob Ă  perdu")

2. Si la condition numero_ligne == 2 est vĂ©rifiĂ©e, est ce que la seconde condition, numero_colonne == 2 peut aussi ĂȘtre vĂ©rifiĂ©e ?

Solution

Oui, s'il atteint la case (2, 2) les 2 conditions seront vérifiées. (ici les conditions ne sont pas mutuellement exclusives)

3. Est-ce que le programme donne toujours le bon résultat ?

Solution

Le programme donne toujours le bon résultat :

  • Lorsque la 1Ăšre condition est vĂ©rifiĂ©e, il est inutile de vĂ©rifier la 2Ăšme condition, car de toutes façons, il a gagnĂ©.
  • Si la 1Ăšre n'est pas vĂ©rifiĂ©e, mais la deuxiĂšme oui, il a aussi gagnĂ©.
  • Si aucune des deux n'est vĂ©rifiĂ©e, alors il a perdu.

4. Alice propose un autre code :

Python
if numero_ligne == 2 :
    print("Bob a gagné")
if numero_colonne == 2 :
    print("Bob a gagné")
if numero_ligne != 2 and numero_colonne != 2 :
    print("Bob a perdu")
Est-ce que le code d'Alice fonctionne dans tous les cas ? Comparez les avantages des deux codes....

Solution

Le code d'Alice fonctionne aussi bien que le code de Bob. Toutefois :

  • Il faudra toujours Ă©valuer 3 expressions boolĂ©ennes
  • Tandis que le code de Bob n'en Ă©value qu'une si on a jouĂ© la ligne 2, et deux sinon.

En terme de lisibilité, le code d'Alice est plus difficile à lire.

Exercice 2 : la cible - version 2

Bob modifié les rÚgles du jeu. Voyez le nouveau plateau de jeu ci-dessous. La case rouge rapporte 100 points, les cases orange rapportent 50 points, les cases blanches ne rapportent aucun point.

cible jaune

Complétez ci-dessous pour que le code affiche le nombre de points gagnés

###(DĂ©s-)Active le code aprĂšs la ligne # Tests (insensible Ă  la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein Ă©cran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activĂ©, le texte copiĂ© dans le terminal est joint sur une seule ligne avant d'ĂȘtre copiĂ© dans le presse-papier

Solution
from random import randint

# Bob lance sa flechette, elle atteint une case au hasard du plateau :
numero_ligne = randint(0, 4)
numero_colonne = randint(0, 4)

print("La flechette atteint la case située : Ligne :", numero_ligne,"et  Colonne :",numero_colonne)

if numero_ligne == 2 and numero_colonne == 2:
    print("100 points")
elif  numero_ligne == 2 or numero_colonne == 2:
    print("50 points")  
else :
    print("0 points")

IV. Bilan⚓

Attention Ă  ne pas oublier les deux points et l'indentation.

La syntaxe de if :

👉 Attention, l'instructions else n'est pas du tout obligatoire (Voir les exemples ci-dessus).

  • Avec seulement if

    if condition :
        bloc d'instructions à réaliser
    ...
    

  • Avec if et else

    if condition :
        bloc d'instructions à réaliser
    else:
        autre bloc d'instructions à réaliser
    ...
    

La syntaxe de if ... elif ... else :

👉 Attention, l'instructions else n'est pas du tout obligatoire (Voir les exemples ci-dessus).

  • Avec seulement if et elif

    if condition :
        bloc d'instructions à réaliser
    elif autre condition:
        autre bloc d'instructions à réaliser
    ...
    

  • Avec if ... elif ... else

    if condition :
        bloc d'instructions à réaliser
    elif autre condition:
        autre bloc d'instructions à réaliser
    else:
        encore un autre bloc d'instructions à réaliser
    ...
    

V. Exercices⚓

Exercice 1 papier
Python
1
2
3
4
5
6
a = 10
b = 13
if a > 5:
    b = b - 4
if b >= 11:
    b = b + 10

Que vaut la valeur finale de b ?

  • 13
  • 9
  • 19
  • 23
  • ❌ 13 Faux car 10 > 5. La ligne 4 et donc exĂ©cutĂ©e.
  • ✅ 9
  • ❌ 19
  • ❌ 23 Faux car Ă  la ligne 4 on a une nouvelle affectation de b qui ne respecte plus la condition du if de la ligne 5.
Exercice 2 'papier'
Python
1
2
3
4
5
6
a = 5
b = 14
if a > 9:
    b = b - 1
if b >= 10:
    b = b + 8

Que vaut la valeur finale de b ?

  • 22
  • 21
  • 13
  • 14
  • ✅ 22
  • ❌ 21 Faux car la ligne 4 n'est pas exĂ©cutĂ©e
  • ❌ 13 Faux car la ligne 4 n'est pas exĂ©cutĂ©e
  • ❌ 14 Faux car Ă  la ligne 6 est exĂ©cutĂ©e
Exercice 3 'papier'
Python
1
2
3
4
5
6
a = 7
b = 20
if a > 5:
    b = b - 3
if b >= 15:
    b = b + 7

Que vaut la valeur finale de b ?

  • 24
  • 17
  • 20
  • 27
  • ✅ 24
  • ❌ 17 Faux car la ligne 6 est aussi exĂ©cutĂ©e
  • ❌ 20 Faux car la ligne 4 et la ligne 6 sont exĂ©cutĂ©es.
  • ❌ 27 Faux car Ă  la ligne 4 est exĂ©cutĂ©e
Exercice 4 'papier'
Python
a = 2
b = 14
if a >= 0:
    b = b - 2
else:
    b = b + 2   
if b > 0:
    a = a + 1
else:
    a = a - 1

Que vaut la valeur finale de a ?

  • 3
  • 16
  • 1
  • 12
  • ✅ 3
  • ❌ 16 Faux car la ligne 6 n'est pas exĂ©cutĂ©e.
  • ❌ 1 Faux car la ligne 10 n'est pas exĂ©cutĂ©e.
  • ❌ 12 Faux car on cherche la valeur finale de a.
Exercice 5 'papier'
Python
a = -3
b = -11
if a >= 0:
    b = b - 1
else:
    b = b + 1   
if b > 0:
    a = a + 3
else:
    a = a - 3

Que vaut la valeur finale de a ?

  • -10
  • -6
  • 0
  • -12
  • ❌ -10 La ligne 6 est exĂ©cutĂ©e, mais on demande a.
  • ✅ -6. La ligne 6 et la ligne 10 sont exĂ©cutĂ©e. On demande a.
  • ❌ 0 Faux car la ligne 8 n'est pas exĂ©cutĂ©e.
  • ❌ -12
Exercice 6 'papier'
Python
a = -7
b = 14
if a >= 0:
    b = b - 4
else:
    b = b + 4   
if b > 0:
    a = a + 1
else:
    a = a - 1

Que vaut la valeur finale de a ?

  • 10
  • -8
  • 18
  • -6
  • ❌ -10
  • ❌ -8. La ligne 10 n'est pas exĂ©cutĂ©e.
  • ❌ 18 Faux car la ligne 6 est exĂ©cutĂ©e mais on demande a.
  • ✅ -6. La ligne 6 et la ligne 8 sont exĂ©cutĂ©es. On demande a.
Exercice 7 'papier'
Python
a = 10
b = -11
if a >= 0:
    b = b - 3
else:
    b = b + 3   
if b > 0:
    a = a + 3
else:
    a = a - 3

Que vaut la valeur finale de a ?

  • -8
  • 7
  • -14
  • 13
  • ❌ -8
  • ✅ 7 . Les lignes 4 et 10 sont exĂ©cutĂ©es.
  • ❌ -14 Faux car la ligne 4 est exĂ©cutĂ©e mais on demande a.
  • ❌ 13 Faux car la ligne 8 n'est pas exĂ©cutĂ©e.
Exercice 8 'papier'
Python
1
2
3
4
5
6
7
8
9
a = -20
b = -7
c = -2
if a > b:
    d = a
elif b > c:
    d = b
else:
    d = c

Que vaut la valeur finale de d ?

Solution

-2

Exercice 9 'papier'
Python
1
2
3
4
5
6
7
8
9
a = 10
b = 19
c = -15
if a > b:
    d = a
elif b > c:
    d = b
else:
    d = c

Que vaut la valeur finale de d ?

Solution

19