Dérouler un programme sur papier

Pourquoi

Les trois choses à tenir à jour

  1. Le fil : la suite des lignes exécutées, dans l’ordre réel (pas l’ordre du fichier).
  2. L’ardoise : le tableau des variables — nom et valeur.
  3. La sortie : ce que print affiche, une ligne à la fois.

Les règles

Exemple

1  a = 3
2  b = a + 1
3  print(a, b)
4  a = a * 2
5  b = a - b
6  print(a, b)

Le fil

Étape Ligne Ce qui se passe
1 1 création de a
2 2 création de b
3 3 affichage
4 4 a change
5 5 b change
6 6 affichage

Ici le fil est simple : 1, 2, 3, 4, 5, 6. Avec un test ou une boucle, il saute.

L’ardoise

Nom Valeur
a 3 6
b 4 2

À l’étape 4, a = a * 2 : on lit l’ancienne valeur (3), on calcule (6), on raye 3, on écrit 6.

À l’étape 5, b = a - b : on lit les valeurs courantes, donc 6 - 4 = 2.

La sortie

3 4
6 2

À retenir

Les fonctions demandent une ardoise par appel (cf. PyMemViz : une carte Programme principal + une carte par appel). On verra ça plus tard.

Les corrections

Chaque exercice a un lien PyMemViz (mode ardoise). À ouvrir après avoir déroulé sur papier :

Exercices : types et opérations

Exercice 1

print(7 // 2)
print(7 % 2)
print(7 / 2)
print(2 ** 5)
print(type(7 // 2))
print(type(7 / 2))

Donner la sortie complète.

Correction : dérouler dans PyMemViz

Exercice 2

print(int(4.99))
print(float(4))
print(int("12") + 3)
print("12" + "3")
print(0.1 + 0.2 == 0.3)

Donner la sortie. Expliquer les deux dernières lignes.

Correction : dérouler dans PyMemViz

Exercices : variables et affectation

Exercice 3

a = 2
b = 5
a += b - 6
b -= a
a *= b
print(a, b)

Ardoise complète (valeurs rayées) + sortie.

Correction : dérouler dans PyMemViz

Exercice 4

x = "chat"
y = "chien"
z = x
x = y
y = z
print(x, y, z)

Ardoise + sortie. Que fait ce programme, en une phrase ?

Correction : dérouler dans PyMemViz

Exercice 5

x = 3
y = 8
x = y
y = x
print(x, y)

Ardoise + sortie. Pourquoi l’échange ne marche-t-il pas ?

Correction : dérouler dans PyMemViz

Exercice 6

a = b = c = 3
b = 5
print(a, b, c)
x, y = 1, 2
x, y = y + 1, x + 1
print(x, y)

Ardoise + sortie. Sur la ligne x, y = y + 1, x + 1 : qu’est-ce qui est calculé en premier ?

Correction : dérouler dans PyMemViz

Exercice 7

a = "chat"
b = "chien"
a, b = b, a
print(a, b)

Ardoise + sortie. Pourquoi ça marche, alors que la méthode de l’exercice 5 ne marche pas ? Combien de variables sont nécessaires, contre l’exercice 4 ?

Correction : dérouler dans PyMemViz

Exercices : booléens et tests

Exercice 8

a = 7
b = 7
print(a > 3 and b < 10)
print(a > 3 or b > 10)
print(not (a == b))
print(3 <= a < 7)
print(a != b or not (a > 100))

Donner la sortie.

Correction : dérouler dans PyMemViz

Exercice 9

Écrire (sans machine) le test correspondant :

Correction : dérouler dans PyMemViz

Exercices : structures conditionnelles

Exercice 10

note = 11
if note >= 16:
    mention = "TB"
elif note >= 14:
    mention = "B"
elif note >= 12:
    mention = "AB"
elif note >= 10:
    mention = "passable"
else:
    mention = "recalé"
print(mention)

Donner le fil (numéros de lignes exécutées) et la sortie, pour :

Correction : dérouler dans PyMemViz

Exercice 11

x = 15
if x > 5:
    print("plus de 5")
if x > 10:
    print("plus de 10")
if x > 20:
    print("plus de 20")
else:
    print("pas plus de 20")

Sortie ? Puis : réécrire avec des elif et redonner la sortie. Conclusion ?

Correction : dérouler dans PyMemViz

Exercices : boucles while

Exercice 12

compteur = 10
total = 0
while compteur > 0:
    total += compteur
    compteur -= 3
print(compteur, total)

Ardoise (toutes les valeurs successives, rayées) + sortie. Combien de tours ?

Correction : dérouler dans PyMemViz

Exercice 13

i = 0
while True:
    i += 1
    if i % 3 == 0:
        continue
    if i > 7:
        break
    print(i, end=" ")
print("fin", i)

Sortie ? Que fait continue ? que fait break ?

Correction : dérouler dans PyMemViz

Exercice 14

Écrire une boucle while qui calcule 6!6! (=1×2×...×6= 1 \times 2 \times ... \times 6) dans une variable resultat. Puis dérouler l’ardoise pour vérifier.

Correction : dérouler dans PyMemViz

Exercices : listes

Exercice 15

t = [4, 8, 15, 16, 23, 42]
print(t[0], t[3], t[-1])
print(len(t))
print(t[1:4])
print(t[:2])
print(t[-2:])
print(23 in t, 24 in t)

Donner la sortie.

Correction : dérouler dans PyMemViz

Exercice 16

t = [1, 2, 3]
t.append(4)
t.insert(1, 99)
del t[0]
t[2] = 0
print(t)
print(len(t))

Ardoise : une seule variable, une valeur rayée à chaque modification.

Correction : dérouler dans PyMemViz

Exercice 17

grille = [[0, 0, 0],
          [0, 0, 0],
          [0, 0, 0]]
grille[1][1] = 1
grille[0][2] = 2
grille[2][1] = 1
print(grille)
print(grille[1])
print(grille[1][2])

Dessiner la grille 3 × 3 à la fin, puis donner la sortie.

Correction : dérouler dans PyMemViz

Exercices : boucles for

Exercice 18

for i in range(3, 12, 4):
    print(i, end=" ")
print()
for i in range(4):
    print(i * i, end=" ")

Sortie ?

Correction : dérouler dans PyMemViz

Exercice 19

notes = [12, 8, 17, 3]
total = 0
maxi = 0
for n in notes:
    total += n
    if n > maxi:
        maxi = n
print(total, total / 4, maxi)

Ardoise (n, total, maxi changent à chaque tour) + sortie.

Puis : que renvoie ce programme si toutes les notes sont négatives ? Corriger.

Correction : dérouler dans PyMemViz

Exercice 20

mots = ["un", "deux", "trois", "quatre"]
for pos, mot in enumerate(mots):
    if len(mot) == 4:
        continue
    print(pos, mot)
    if mot == "trois":
        break

Fil + sortie. Combien de tours de boucle réellement exécutés ?

Correction : dérouler dans PyMemViz

Exercice 21

carres = [n * n for n in range(1, 6) if n % 2 == 1]

Réécrire avec une boucle for et append. Donner le contenu final de carres.

Correction : dérouler dans PyMemViz

Exercices : références

Exercice 22

a = [1, 2, 3]
b = a
c = a[:]
b[0] = 99
c[1] = 77
print(a, b, c)

Sortie ? Quelles variables désignent la même liste en mémoire ?

Correction : dérouler dans PyMemViz

Exercices : dictionnaires

Exercice 23

fiche = {"nom": "Martin", "age": 17}
fiche["classe"] = "TNSI"
fiche["age"] = 18
del fiche["nom"]
print(fiche)
print(len(fiche))
print("nom" in fiche, "classe" in fiche)

Ardoise (une ligne fiche, valeurs rayées) + sortie.

Correction : dérouler dans PyMemViz

Exercice 24

stock = {"pomme": 5, "poire": 0, "kiwi": 12}
for produit in stock:
    print(produit, end=" ")
print()
for n in stock.values():
    print(n, end=" ")
print()
total = 0
for produit, n in stock.items():
    if n > 0:
        total += n
print(total)

Sortie ? Différence entre les trois parcours ?

Correction : dérouler dans PyMemViz

Exercice 25

notes = {"alice": [10, 12], "bob": [14, 16]}
notes["alice"].append(8)
notes["charlie"] = [9]
print(notes["alice"][2])
print(len(notes))
print(notes)

Sortie ? Que compte len(notes) exactement ?

Correction : dérouler dans PyMemViz