Exercices de compréhension

Denis Dréano
PROG5-01

Exercices de compréhension

Objectifs cantonaux : O1.6.

La matière a passablement grandi depuis le début de l’année. Cette page vous permet d’évaluer votre niveau de compréhension et de préparer la synthèse de fin d’année. La méthode est toujours la même : tracer le programme à la main, écrire ce qu’il affiche, puis vérifier sur l’ordinateur.

Rappels de vocabulaire

▷ Rappel — Variable

Une variable est un nom donné à un emplacement mémoire. Elle contient une et une seule valeur à n’importe quel instant de l’exécution.

▷ Rappel — Variables locales et globales

Variables globales Variables locales
Définies en dehors de toute fonction Définies à l’intérieur d’une fonction (ou en tant que paramètre)
Visibles depuis n’importe quelle partie du code Visibles uniquement dans la fonction où elles sont définies

Le mot-clé global permet de modifier une variable globale depuis l’intérieur d’une fonction :

def foo(y):
    global x
    x = y + 10

x = 0
foo(10)
print(x)   # affiche 20

Exercice 1 — tracer un programme (affectation)

Sans utiliser l’ordinateur, déterminez ce qu’affiche ce programme, puis vérifiez :

x = 300
y = x + 200
x = 400
print(y)

Exercice 2 — tracer une boucle for

x = 10
for i in range(20):
    print(x)
    x += 30
print(x)

Exercice 3 — tracer une boucle avec deux variables

x = 0
y = 5
for i in range(10):
    print(x, y)
    x += y
    y += 2
print(x)

Exercice 4 — variable locale vs paramètre

def mystery(x, y):
    for i in range(y):
        x += y
        y += 10
    print(x)

x = 0
mystery(x, 4)
print(x)

! Piège classique

La variable x passée en paramètre à mystery est une copie locale : la modifier à l’intérieur de la fonction ne change pas la variable globale x du programme principal. C’est pour cela que le deuxième print(x) affiche encore 0.

Exercice 5 — if vs elif (piège classique)

Tracez à la main les deux fonctions ci-dessous pour les trois appels indiqués, puis vérifiez sur l’ordinateur. Les deux fonctions donnent-elles toujours le même résultat ?

def mystery1(nombre):
    if nombre <= 4:
        print("A")
    if nombre >= 2:
        print("B")
    else:
        print("D")

def mystery2(nombre):
    if nombre <= 4:
        print("A")
    elif nombre >= 2:
        print("B")
    else:
        print("D")

mystery1(1)
mystery2(1)
print("----")
mystery1(3)
mystery2(3)
print("----")
mystery1(5)
mystery2(5)

! Ce que révèle cet exercice

if suivi d’un second if ... else teste deux conditions indépendantes : les deux blocs peuvent s’exécuter. if ... elif ... else teste des conditions mutuellement exclusives : une seule branche s’exécute. Ce sont deux structures différentes, même si elles se ressemblent.

Devoir donné par Cédric

Terminer les exercices de compréhension (tracer les programmes à la main avant de vérifier sur l’ordinateur).