Exo Python

Identification

Infoforall

13 - Exo Rappel Python


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.

1 - Types construits

✎ 01° Répondre aux questions suivantes liées au programme ci-dessous.

  1. Quel est le type de la variable a ?
  2. Quels sont les caractères permettant de délimiter sa déclaration ?
  3. Comment traduire en français le terme a ?
  4. Comment traduire en français le terme i ?
  5. Comment traduire en français le terme a[i] ?
  6. Que va contenir la variable b ?
1 2 3
a = [10, 15, 12] i = 0 b = a[i]

...CORRECTION...

  1. Quel est le type de la variable a ?
  2. Un tableau, le type list de Python.

  3. Quels sont les caractères permettant de délimiter sa déclaration ?
  4. Les crochets : [ et ].

  5. Comment traduire en français le terme a ?
  6. Le tableau a, ou mieux : l'adresse du tableau a.

  7. Comment traduire en français le terme i ?
  8. L'indice, le numéro de case.

  9. Comment traduire en français le terme a[i] ?
  10. Le contenu de la case i du tableau a.

  11. Que va contenir la variable b ?
  12. Le contenu de la case 0 du tableau a, soit 10.

✎ 02° Répondre aux questions suivantes liées au programme ci-dessous.

  1. Quel est le type de la variable a ?
  2. Quels sont les caractères permettant de délimiter sa déclaration ?
  3. Comment traduire en français le terme a ?
  4. Comment traduire en français le terme i ?
  5. Comment traduire en français le terme a[i] ?
  6. Que va contenir la variable b ?
1 2 3
a = (10, "Bob", 2) i = 1 b = a[i]

...CORRECTION...

  1. Quel est le type de la variable a ?
  2. Un n-uplet, le type tuple de Python.

  3. Quels sont les caractères permettant de délimiter sa déclaration ?
  4. Les parenthèses : ( et ).

  5. Comment traduire en français le terme a ?
  6. Le n-uplet a, ou mieux : l'adresse du n-uplet a.

  7. Comment traduire en français le terme i ?
  8. L'indice, le numéro de case.

  9. Comment traduire en français le terme a[i] ?
  10. Le contenu de la case i du n-uplet a.

  11. Que va contenir la variable b ?
  12. Le contenu de la case 1 du n-uplet a, soit "bob".

✎ 03° Répondre aux questions suivantes liées au programme ci-dessous.

  1. Quel est le type de la variable a ?
  2. Quels sont les caractères permettant de délimiter sa déclaration ?
  3. Comment traduire en français le terme a ?
  4. Comment traduire en français le terme i ?
  5. Comment traduire en français le terme a[i] ?
  6. Que va contenir la variable b ?
1 2 3
a = "Bonjour i = 2 b = a[i]

...CORRECTION...

  1. Quel est le type de la variable a ?
  2. Un string, le type str de Python.

  3. Quels sont les caractères permettant de délimiter sa déclaration ?
  4. Les guillemets : " ".

  5. Comment traduire en français le terme a ?
  6. Le string a, ou mieux : l'adresse du string a.

  7. Comment traduire en français le terme i ?
  8. L'indice, le numéro de case.

  9. Comment traduire en français le terme a[i] ?
  10. Le contenu de la case i du string a.

  11. Que va contenir la variable b ?
  12. Le contenu de la case 2 du string a, soit "n".

✎ 04° Répondre aux questions suivantes liées au programme ci-dessous.

  1. Quel est le type de la variable a ?
  2. Quels sont les caractères permettant de délimiter sa déclaration ?
  3. Comment traduire en français le terme a ?
  4. Comment traduire en français le terme i ?
  5. Comment traduire en français le terme a[i] ?
  6. Que va contenir la variable b ?
1 2 3
a = {"Alice": 13, "Bob": 8, "Charlie": 12} c = "Bob" b = a[c]

...CORRECTION...

  1. Quel est le type de la variable a ?
  2. Un dictionnaire, le type dict de Python.

  3. Quels sont les caractères permettant de délimiter sa déclaration ?
  4. Les accolades : { }.

  5. Comment traduire en français le terme a ?
  6. Le dictionnaire a, ou mieux : l'adresse du dictionnaire a.

  7. Comment traduire en français le terme i ?
  8. L'indice, le numéro de la case.

  9. Comment traduire en français le terme a[i] ?
  10. Le contenu de la case c du dictionnaire a.

  11. Que va contenir la variable b ?
  12. Le contenu de la case "Bob" du dictionnaire a, soit 8.

2 - Instructions conditionnelles

(Rappel) 2.1 Instruction conditionnelle

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 = 20 if note > 15: appreciation = "Très bien" fatigue = "Grosse fatigue"

TABULATION : le bloc d'instructions à effectuer est décalé de 4 espaces (ligne 5). Ce décalage permet à l'intepréteur Python de signaler le début et la fin du bloc. La ligne 6 n'appartient donc pas au bloc.

Déroulé pour note = 20 : L1-L2-L3-L4-L5-L6

Déroulé pour note = 10 : L1-L2-L3-L4-L6

Traduction :

  • L3 : note vaut 20.
  • L4 : si la note fournie est strictement supérieure à 15
  • L5 tabulée : alors appreciation passe à "Très bien".
  • L6 : fatigue passe à "Grosse fatigue" (sans condition car pas de tabulation).

✎ 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].

1 2 3 4 5 6 7
appreciation = "Insuffisant" t = [0, 10, 5] somme = t[1] + t[2] moyenne = somme / 2 if moyenne > 10: appreciation = "Correct" t[0] = moyenne

...CORRECTION...

Succession des lignes suivies par le programme :

  • L1 - L2 - L3 - L4 - L5 - L7
Valeurs finales :

  • appreciation référence "Insuffisant"
  • moyenne référence 7.5.
  • t[0] référence 7.5

Explications non demandées :

  • L1 : création du commentaire
  • L2 : création du tableau
  • L3 : somme référence 15
  • L4 : moyenne référence 7.5
  • L5 : la condition du SI est fausse, on passe donc en L7
  • L7 : on affecte 7.5 à la case d'indice 0

✎ 06° Mêmes questions avec ce programme où un élève a mal indenté la dernière ligne.

1 2 3 4 5 6 7
appreciation = "Insuffisant" t = [0, 10, 5] somme = t[1] + t[2] moyenne = somme / 2 if moyenne > 10: appreciation = "Correct" t[0] = moyenne

...CORRECTION...

La différence vient de la ligne 7 qu'on ne va plus réaliser.

Succession des lignes suivies par le programme :

  • L1 - L2 - L3 - L4 - L5
Valeurs finales :

  • appreciation référence "Insuffisant"
  • moyenne référence 7.5.
  • t[0] référence 0 du début de programme

Explications non demandées :

  • L1 : création du commentaire
  • L2 : création du tableau
  • L3 : somme référence 15
  • L4 : moyenne référence 7.5
  • L5 : la condition du SI est fausse, on passe donc en fin de programme

3 - Fonction

(Rappel) 3.1 FONCTION : personnelle
1 2 3 4
def double(x): # Déclaration return 2 * x # Déclaration n = double(12) # Appel

On distingue deux choses :

  1. La déclaration (mise en mémoire d'instructions pour les utiliser plus tard)
  2. L'appel (utilisation de ces instructions)
A - Déclarer une fonction

Déclarer la fonction revient à stocker ses instructions.

Pour déclarer une fonction, on écrit dans l'ordre

  1. le mot-clé def.
  2. le nom de la fonction
  3. entre parenthèses : les variables d'entrée séparées par des virgules
  4. le caractère :
  5. les instructions du bloc tabulé
1 2
def double(x): return 2 * x

Important : lors de la déclaration, on ne lance aucun appel, on ne fait que mettre en mémoire.

Le mot-clé return permet d'indiquer ce que la fonction devra renvoyer si on l'appelle.

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.

B - Lancer un appel de fonction

Lancer un appel revient à fournir les entrées et attendre la réponse de la fonction.

Sur l'exemple, l'appel se fait LIGNE 4.

1 2 3 4
def double(x): # Déclaration return 2 * x # Déclaration n = double(12) # Appel

Déroulé

  • L1 (déclaration)
  • L4 (appel) - L1 - L2 (envoi) - L4 (réception de la réponse)

Traduction (et déroulé)

  • 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 24 à la ligne qui a lancé l'appel
  • Ligne 4 (réception de la réponse qu'on stocke dans une variable n.

✎ 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
def f(x): return x * x a = 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).

1 2 3 4 5 6 7 8
def h(k): return k * 3 def g(x): r = h(x + 20) return r + 10 n = g(100)

...CORRECTION...

Réponses attendues : L1 - L4 - L8 - L4 - L5 - L1 - L2 - L5 - L6 - L8 et n référence 370.

Avec des explications :

  • L1 (déclaration)
  • L4 (déclaration)
  • L8 (appel à g() en envoyant 10)
  • L4 (x référence 100)
  • L5 (appel à h() en envoyant 120)
  • L1 (k référence 120)
  • L2 (envoi de 360)
  • L5 (réception du 360 et stockage dans la variable r)
  • L6 (envoi de 370)
  • L8 (réception du 370 et stockage dans la variable n)
  • L1 (déclaration)
  • L4 (déclaration)
  • L8 (appel à g() en envoyant 10)
  • L4 (x référence 100)
  • L5 (appel à h() en envoyant 120)
  • L1 (k référence 120) - L2 (envoi de 360)
  • L5 (réception du 360 et stockage dans la variable r)
  • L6 (envoi de 370)
  • L8 (réception du 370 et stockage dans la variable n)

4 - Boucle POUR / FOR

(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 boucle for _ in range(3): # Déclaration de la boucle print("A") # Tabulée : dans la boucle print("-- B") # Tabulée : dans la boucle print("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 boucle A -- B A -- B A -- B Après boucle
C - Sémantique
3
for _ in range(3):

Traduction en français : "Réalise 3 fois le bloc d'instructions indentées"

✎ 09° Trois questions :

  1. Traduire les lignes 2 et 3 en français.
  2. 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.
  3. Pourquoi voit-on apparaître un seul affichage ?
1 2 3 4 5
n = 0 for _ in range(4): n = n + 5 n = n + 10 print(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.

for k in range(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 au nombre de tours de boucle effectués : 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") for k in range(3): # Pour k variant de 0 à 2 print("A") # Affiche le string "A" print(k) # Affiche le contenu de k print("Après boucle")

Déroulé du programme

L1
L3(k=0) - L4 - L5
L3(k=1) - L4 - L5
L3(k=2) - L4 - L5
L7

Résultat du programme

Avant boucle A 0 A 1 A 2 Après
C - Sémantique
3
for k in range(3):

Traduction en français : "Pour chaque valeur de k dans [0, 1, 2], réalise le bloc d'instructions indentées"

✎ 10° Trois questions :

  1. Traduire les lignes 2 et 3 en français.
  2. 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.
  3. Pourquoi voit-on apparaître cinq affichages ?
1 2 3 4 5
n = 50 for k in range(5): n = n + k * 10 print(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.