Exercices visant à consolider définitivement les connaissances vues pendant la première période. Nous pourrons à partir de là réaliser des programmes plus utilitaires.
Temps estimé : 10 questions, donc entre 30 et 45 minutes de rédaction au maximum. Si vous avez mis plus, c'est qu'il va falloir rédiger plus vite, ou que vous n'aviez plus assez de connaissances pour résoudre tout cela rapidement.
Tous les exercices sont corrigés. Néanmoins, lire une correction ne sert à rien si on ne sait pas le faire.
En cas de problèmes de compréhension des corrections proposées, pensez à utiliser le site Python Tutor.
Les rappels de cours ne sont pas nécessairement à lire si vous savez encore de quoi ils parlent.
Une instruction conditionnelle permet d'exécuter un bloc d'instructions uniquement si la condition évaluée est vraie (True en Python).
Ci-dessous, un exemple où on change l'appréciation si la note est bonne (if en anglais)
1
2
3
4
5
6
fatigue="En forme !"appreciation="Moyen"note=20ifnote>15:appreciation="Très bien"fatigue="Grosse fatigue"
Signification des lignes en français
L3 : note référence 20.
L4 : si la note est strictement supérieure à 15
(L5 tabulée, appartient au if) : alors appreciation référence "Très bien".
L6 (pas tabulée, n'appartient pas au if) : fatigue passe à "Grosse fatigue" (sans condition car pas de tabulation).
Importance de la tabulation
La tabulation (4 espaces) permet de signaler à l'intepréteur Python le début et la fin du bloc de la condition. La ligne 6 n'appartient donc pas au bloc : elle sera exécutée que la condition soit vraie ou fausse.
On peut rendre le code plus clair pour un débutant en utilisant des lignes vides :
1
2
3
4
5
6
7
8
fatigue="En forme !"appreciation="Moyen"note=20ifnote>15:appreciation="Très bien"fatigue="Grosse fatigue"
fatigue="En forme !"appreciation="Moyen"note=20ifnote>15:# Vrai pour une note de 20appreciation="Très bien"# donc on effectue cette lignefatigue="Grosse fatigue"
Déroulé pour note = 10
L1-L2-L3-L4 (avec condition fausse) - L6 - fin
1
2
3
4
5
6
fatigue="En forme !"appreciation="Moyen"note=14ifnote>15:# Faux pour une note de 14appreciation="Très bien"# donc on n'effectue pas cette lignefatigue="Grosse fatigue"
✎ 05° Fournir les numéros de lignes suivies par l'interpréteur Python pendant ce programme. Donner alors (sans justification écrite, mais il faudra bien entendu suivre l'état du programme mentalement) le contenu d'appreciation, moyenne et t[0].
Définir une fonction revient à stocker ses instructions pour les utiliser plus tard.
On voit d'ailleurs que vous ne pourriez pas l'utiliser pour le moment car vous ne savez pas ce que contient réellement la variable x.
Par contre, si vous avez bien compris ce qu'est une variable, vous devriez comprendre qu'on va remplir le double de ce qu'on va recevoir un jour en entrée.
Pour définir une fonction, on utilise le mot-clé def puis
le nom de la fonction
des parenthèses contenant les entrées séparées par des virgules
le caractère : pour finir cette première ligne
le bloc tabulé contenant les instructions à réaliser un jour.
1
2
defdouble(x):return2*x
Le mot-clé return permet d'indiquer la sortie que la fonction devra renvoyer.
Placer des commentaires en français dans le code Python
On peut placer du texte à destination des développeurs qui vont lire le programme en utilisant le caractère #. Voir la partie suivante pour un exemple.
Attention : sur votre ligne, tout ce qui se trouve derrière ce # sera purement ignoré par l'interpréteur.
Lancer un appel veut dire utiliser une fonction en lui fournissant des entrées puis attendre pour récupérer la réponse qu'elle fournira.
Sur le code d'exemple, on lance un appel en ligne 4.
Lors d'un appel, l'interpréteur Python transfère les données envoyées une à une dans les variables visibles sur la définition. Pour comprendre où sont stockées les entrées, il suffit de comparer la ligne de la définition et celle de l'appel.
Avec l'appel de la ligne 5, on a 10 qui est stocké dans a lors de cet appel :
définition
appel
deffois2(a):x=fois2(10)
[Déroulé] Lors d'un appel, on part de la ligne d'appel vers la ligne de définition puis la réponse est renvoyée vers la ligne d'appel.
L4 (réception de la réponse) - fin car il n'y a rien ensuite
Explications complètes
Ligne 1 : déclaration d'une fonction double() qui va recevoir une donnée qu'on placera dans une variable x.
Ligne 4 : appel à la fonction double() en lui envoyant 12
Ligne 1 : l'interpréteur place 12 dans x.
Ligne 2 : la fonction envoie la réponse 24 à la ligne qui a lancé l'appel
Ligne 4 : réception de la réponse et n référence 24.
Lancer plusieurs appels
Les fonctions ont deux avantages :
Permettre l'envoi d'une sortie dont la valeur dépend des entrées reçues ;
Permettre plusieurs appels successifs à une même fonction.
1
2
3
4
5
defdouble(x):return2*xa=double(10)b=double(30)
Déroulé
L1 (déclaration)
L4 (appel) - L1 - L2 (envoi de la réponse)
L4 (réception de la réponse et affectation du 20 à a)
L5 (appel) - L1 - L2 (envoi de la réponse)
L5 (réception de la réponse et affectation du 60 à b) - fin
Bilan
Vous devez donc savoir distinguer ces deux étapes, sous peine de ne pas comprendre correctement ce qui est réalisé :
La définition (mise en mémoire d'un bloc d'instructions pour l'utiliser plus tard)
L'appel (utilisation de ce bloc d'instructions)
✎ 07° Fournir les numéros de lignes suivies par l'interpréteur Python pendant ce programme puis donner le contenu de a et b à la fin de l'exécution du programme (sans justification particulière sur votre feuille, mais il faudra bien entendu suivre l'état du programme mentalement).
1
2
3
4
5
deff(x):returnx*xa=f(10)b=f(5)
...CORRECTION...
L1 (déclaration)
L4 (appel en envoyant 10) - L1 - L2 (envoi de 100) - L4 (réception)
L5 (appel en envoyant 5) - L1 - L2 (envoi de 25) - L5 (réception)
✎ 08° Plus compliqué. Il faut être vigilant et rigoureux. Fournir les numéros de lignes suivies par l'interpréteur Python pendant ce programme puis donner le contenu de a et a à la fin de l'exécution du programme (sans justification particulière).
(Rappel) 4.1 Boucle POUR : réaliser plusieurs fois EXACTEMENT la même action
A - Principe
Pour réaliser plusieurs fois exactement la même série d'actions, il suffit d'utiliser une boucle bornée POUR, qu'on déclare à l'aide du mot-clé for en Python.
B - Exemple
1
2
3
4
5
6
7
print("Avant boucle")# Pas tabulée : avant la bouclefor_inrange(3):# Déclaration de la boucleprint("A")# Tabulée : dans la boucleprint("-- B")# Tabulée : dans la boucleprint("Après boucle")# Pas tabulée : avant la boucle
Déroulé du programme
L1 L3 - L4 - L5 L3 - L4 - L5 L3 - L4 - L5 L7
Résultat du programme
Avant boucleA-- BA-- BA-- BAprès boucle
C - Sémantique
3
for_inrange(3):
Traduction en français : "Réalise 3 fois le bloc d'instructions indentées"
✎ 09° Trois questions :
Traduire les lignes 2 et 3 en français.
Compléter le texte proposé pour justifier le contenu de la variable n à la fin de l'exécution du programme en signalant la succession des lignes suivies par l'interpréteur.
Pourquoi voit-on apparaître un seul affichage ?
1
2
3
4
5
n=0for_inrange(4):n=n+5n=n+10print(n)
Solution à compléter :
L1 : n = 0.
L2-L3 (1er tour) : n = 5
...
...CORRECTION...
On utilise un underscore, on peut donc traduire de cette façon :
L2 : Réaliser 4 fois la boucle (les lignes indentées)
L3 : Incrémente n de 5.
Voici le déroulé tel que l'énoncé le demande :
L1 : n = 0.
L2-L3 (1er tour) : n = 5
L2-L3 (2e tour) : n = 10
L2-L3 (3e tour) : n = 15
L2-L3 (4e tour) : n = 20
L4 : n = 30
L5 : on affiche n dans la console
L'affichage n'apparaît qu'une fois puisque print() est après la boucle.
4.2 Boucle POUR : réaliser plusieurs fois PRESQUE la même action
A - Valeurs successives de la variable de boucle
On réalise des actions un peu différentes car utilisant une variable de boucle dont le nom se situe derrière le mot clé for.
forkinrange(5):
Sur cet exemple, k est la variable de boucle :
k commence à 0
k est incrémentée de 1 à chaque tour de boucle.
Ainsi, k va prendre les valeurs 0 puis 1 puis 2 puis 3 puis 4.
Attention
k n'ira pas jusqu'à 5, c'est une borne exclue.
5 correspond néanmoins bien au nombre de tours de boucle effectuées : 0-1-2-3-4.
La valeur finale de k est 4, obtenue en calculant (5 - 1).
B - Déroulé d'une boucle avec variable de boucle
1
2
3
4
5
6
7
print("Avant boucle")forkinrange(3):# Pour k variant de 0 à 2print("A")# Affiche le string "A"print(k)# Affiche le contenu de kprint("Après boucle")
Traduction en français : "Pour chaque valeur de k dans [0, 1, 2], réalise le bloc d'instructions indentées"
✎ 10° Trois questions :
Traduire les lignes 2 et 3 en français.
Compléter le texte proposé pour justifier le contenu de la variable n à la fin de l'exécution du programme en signalant la succession des lignes suivies par l'interpréteur.
Pourquoi voit-on apparaître cinq affichages ?
1
2
3
4
5
n=50forkinrange(5):n=n+k * 10print(n)n=n * 10
Solution à compléter :
L1 : n = 50
L2 (k = 0) - L3 - L4 : n = 50 + 0*10 = 50
L2 (k = 1) - L3 - L4 : n = 50 + 1*10 = 60
...
...CORRECTION...
On utilise une vraie variable de boucle, on peut donc traduire de cette façon :
L2 : "Réalise la boucle pour k valant 0, 1, 2, 3 puis 4" ou juste "Pour k variant de 0 à 4". ATTENTION : pas 5 !
L3 : Incrémente n de k*10.
Voici le déroulé tel que l'énoncé le demande :
L1 : n = 50
L2 (k = 0) - L3 - L4 : n = 50 + 0*10 = 50
L2 (k = 1) - L3 - L4 : n = 50 + 1*10 = 60
L2 (k = 2) - L3 - L4 : n = 60 + 2*10 = 80
L2 (k = 3) - L3 - L4 : n = 80 + 3*10 = 110
L2 (k = 4) - L3 - L4 : n = 110 + 4*10 = 150
L5 : n = 150 * 10 = 1500
FIN
Activité publiée le 21 10 2023
Dernière modification : 21 10 2023
Auteur : ows. h.