13. Décider - if
¶
Dans ce chapitre, nous allons voir comment un programme peut faire des choix, et comment il peut exécuter du code de façon sélective. Nous allons voir que :
le mot-clé
if
permet une exécution conditionnelle,les mots-clés
if-else
permettent de choisir entre deux alternatives,le mot-clé
elif
(else if) permet d’ajouter différentes conditions.
Êtes-vous majeur ?¶
Basé sur votre âge, le programme exécute soit le premier bloc (if
) soit le deuxième bloc (else
). Il affiche si vous êtes majeur ou pas.
Comparer¶
Un programme doit parfois comparer deux valeurs. Python connait six types de comparaisons :
plus petit (
<
),plus petit ou égal (
<=
),égal (
==
),différent (
!=
),plus grand (
>
),plus grand ou égal (
>=
).
Prudence
Il ne faut pas confondre l’opérateur d’affectation (x = 3
) avec l’opérateur de comparaison (x == 2
).
Le résultat d’une comparaison est une valeur booléenne, soit True
soit False
.
Voici quelques exemples :
Le signe d’un nombre¶
Le mot-clé elif
est une contraction de else if et permet de continuer à tester d’autres conditions.
Trouvez le signe d’un nombre.
Sans le mot-clé elif
nous devrions mettre le bloc if
à l’intérieur du bloc else
en indentation.
Avec multiples conditions, les blocs se décalent de plus en plus et rendent le programme illisible.
Exercice : Testez le programme avec -2, 0, 3.
Pair ou impair ?¶
La fonction modulo (x % 2)
permet de décider si un nombre est pair ou impair. Le programme suivant affiche si le nombre que vous entrez est pair ou impair.
Pierre-papier-ciseaux¶
Le jeu pierre-papier-ciseaux est effectué avec les mains et oppose deux joueurs. Il possède de nombreux noms alternatifs, notamment en remplaçant certains mots comme « papier » par « feuille » ou « pierre » par « caillou ». Le terme chifoumi est également une appellation courante.
Pour le choix du jouer on pourrait lui faire entrer les mots pierre
, papier
, et ciseaux
. Mais c’est plus simple si nous utilisons juste un nombre entier pour choisir une des trois options.
En interne, nous utilisons 1, 2, et 3 pour désigner les 3 choix. Dans un programme informatique, c’est plus efficace d’utiliser des entiers pour designer des choses. Pour l’utilisateur humain par contre, des mots sont plus compréhensibles. Nous utilisons un tuple pour faire la conversion d’un entier vers un mot. Comme l’indexage en Python commence toujours avec 0, nous devons décaler l’index de un avec l’expression [i-1]
.
Un grand avantage de séparer la logique abstraite du jeu, et les mots concrets, est qu’il devient très facile de traduire le jeu dans une autre langue. Par exemple, il suffit de changer le tuple objets
en ('rock', 'paper', 'cissors')
pour traduire en anglais, ou ('Stein', 'Papier', 'Schere')
pour le traduire en allemand.
Tour de l’ordi¶
Pour jouer contre un ordinateur, nous avons besoin d’une fonction qui fait un choix aléatoire. Les fonctions aléatoires se trouvent dans le module random
que nous importons au début. La fonction randint(a, b)
renvoie un entier aléatoire dans l’intervalle [a, b].
Psychologiquement, le jeu se présente mieux quand il y a un petit délai entre notre réponse et la réponse de l’ordinateur. Nous utilisons la fonction sleep()
du module time
pour insérer un délai d’une seconde.
Décider qui gagne¶
Une fois le choix est fait par les deux joueurs (humain et ordinateur) nous devons décider qui va gagner. Nous pouvons représenter la situation pour l’humain avec ce tableau.
humain |
pierre |
papier |
ciseaux |
|
---|---|---|---|---|
ordinateur |
1 |
2 |
3 |
|
pierre |
1 |
match nul |
gagne |
perd |
papier |
2 |
perd |
match nul |
gagne |
ciseaux |
3 |
gagne |
perd |
match nul |
Avec les instructions conditionnelles if-elif-else
nous pouvons décider alors qui gagne pour une combinaison donnée. Avec un choix judicieux, nous pouvons décider avec seulement 4 tests les 9 combinaisons différentes.
Jouer en boucle¶
Maintenant nous pouvons tout mettre dans une boucle pour jouer multiples fois.
Dans la première ligne, nous indiquons le tour. Comme pour l’indexage des objets, quand nous affichons le nombre du tour, nous le décalons d’un avec l’expression n+1
.
Décrire un chemin¶
Un programme de dessin avec la tortue est une séquence d’instructions. Si la tortue ne se déplace que sur les lignes d’une grille, nous pouvons représenter un chemin par une séquence d’actions où chaque action peut être représentée avec une seule lettre :
f
= avancerl
= tourner à gaucher
= tourner à droite
Nous pouvons insérer des espaces dans chemin
pour rendre la description plus lisible. Lors de l’exécution, ils ne sont pas pris en considération.
Exercice : Définissez et dessinez la lettre F.
Opérations logiques¶
Les opérateurs logiques permettent de combiner des valeurs logiques. En Python, nous avons :
et logique (
and
),ou logique (
or
),négation (
not
).
Pour tester si un nombre x est dans l’intervalle (a, b) il faut combiner deux comparaisons avec une opération logique.
L’opérateur not
inverse la valeur logique :
True
devientFalse
,False
devientTrue
.
Une double inversion revient à l’identité.
Dans l’exemple suivant, essayez de changer la valeur de p
.
Dans un intervalle ?¶
Python permet de remplacer (a < x) and (x < b)
par l’expression plus compacte a < x < b
.
Exercices¶
Téléchargez l’exercice
Lancez un éditeur externe (tel que Thonny)
Depuis l’éditeur, ouvrez le fichier téléchargé
Remplacez … par votre code
Déposez vos exercices sur Moodle
Équation quadratique¶
En mathématiques, une équation quadratique est une équation polynomiale qui peut s’écrire sous la forme
Calculez d’abord le déterminant
Selon le déterminant vous avez 3 cas. Si le déterminant est :
négatif : pas de solution
zéro : une solution
positif : deux solutions
Écrivez un programme qui calcule la solution d’une équation quadratique.
Jeu multilangue¶
Adaptez le jeu pierre-papier-ciseaux
pour qu’on puisse choisir la langue du jeu entre :
Français
Anglais
Allemand
Big Bang Theory¶
Une nouvelle variante de pierre-papier-ciseaux a été popularisée par la série américaine The Big Bang Theory. Il s’agit de Pierre-Papier-Ciseaux-Lézard-Spock. Ici, les règles classiques s’appliquent, mais il faut ajouter que le lézard mange le papier, empoisonne Spock, il est écrasé par la pierre et est décapité par les ciseaux. Spock vaporise la pierre, casse les ciseaux, et est discrédité par le papier.
Cette variante augmente le nombre de combinaisons de 3 à 10, et est censée réduire le nombre d’égalités entre deux joueurs qui se connaissent (bien qu’entre les personnages de la série, cette variante amène systématiquement à une égalité Spock vs. Spock).
humain |
pierre |
papier |
ciseaux |
lézard |
Spock |
|
---|---|---|---|---|---|---|
ordinateur |
1 |
2 |
3 |
4 |
5 |
|
pierre |
1 |
nul |
gagne |
perd |
perd |
gagne |
papier |
2 |
perd |
nul |
gagne |
gagne |
perd |
ciseaux |
3 |
gagne |
perd |
nul |
perd |
gagne |
lézard |
4 |
gagne |
perd |
gagne |
nul |
perd |
Spock |
5 |
perd |
gagne |
perd |
gagne |
nul |