Aller au contenu

Exercices

Introduction aux variables

Dans chacun des cas ci-dessous, déterminer le contenu des variables a et b à la fin de l'exécution du programme.

  1. 🐍 Code Python
    1
    2
    3
    a = 1
    b = a + 3
    a = 3
    
  2. 🐍 Code Python
    1
    2
    3
    a = 7
    a = 8
    a = a + 2
    
  3. 🐍 Code Python
    1
    2
    3
    4
    a = 5
    b = a + 4
    a = a + 1
    b = a - 4       
    
  4. 🐍 Code Python
    1
    2
    3
    4
    a = 4
    b = 6
    a = b
    b = a       
    
  5. 🐍 Code Python
    1
    2
    3
    4
    5
    a = 4
    b = 6
    temp = b
    b = a
    a = b       
    
  6. 🐍 Code Python
    1
    2
    3
    4
    5
    a = 4
    b = 6
    a = a + b
    b = a - b
    a = a - b
    

Branchement conditionnel

  1. Déterminer le contenu des variables a et b à l'issue de l'exécution du programme ci-dessous.

    🐍 Code Python
    1
    2
    3
    4
    5
    6
    a = 3
    b = 6
    if a > 5 or b != 3:
        b = 4
    else:
        b = 2  
    
  2. On considère les trois fonctions ci-dessous, dont on a omis la spécification complète.

🐍 Code Python
1
2
3
4
5
6
7
8
def f1(val):
    """int->str"""
    if val > 50:
        return "B"
    elif val > 100:
        return "A"
    else:
        return "C"
🐍 Code Python
1
2
3
4
5
6
7
8
def f2(val):
    """int->str"""
    if val > 100:
        return "A"
    elif val > 50:
        return "B"
    else:
        return "C"
🐍 Code Python
1
2
3
4
5
def f3(val):
    """int->str"""
    if val < 0:
        return 0
    return val

Déterminer le résultat de l'évaluation de :

  1. f1(0)
  2. f1(25)
  3. f1(110)
  4. f2(0)
  5. f2(25)
  6. f2(110)
  7. f3(-5)
  8. f3(10)
  9. f3(0)

Un petit piège

Quelle est la valeur affichée par la console après la séquence d'instructions suivantes :

⚙️ Résultat
>>> largeur, longueur = 5, 7
>>> aire = largeur * longueur
>>> largeur, longueur = 10, 21
>>> aire

Écriture de fonctions simples

  1. Écrire le corps de la fonction valeur_absolue dont on donne la spécification et les tests ci-dessous. Écrire 2 tests supplémentaires pour la fonction valeur_absolue

    🐍 Code Python
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def valeur_absolue(x):
        """ float -> float
        Retourne la valeur absolue de x, c'est à dire x si x est négatif, -x sinon """       
        # ... à compléter
    
    assert valeur_absolue(3) == 3
    assert valeur_absolue(-3) == 3
    assert valeur_absolue(0) == 0
    # ... à compléter
    
    1. Écrire une fonction max2 qui prend en argument deux entiers a et b et qui renvoie le plus grand des deux.

    2. Écrire une fonction max3 qui prend en argument trois entiers a, b, et c et qui renvoie le plus grand des trois.

    3. En utilisant un appel à la fonction max3, écrire une fonction max4 qui prend en argument quatre entiers a, b, c et d et qui renvoie le plus grand des quatre.

Bilan sur les fonctions

C'est bientôt les soldes, et un commerçant camerounais décide d'écrire un code python afin de l'aider à calculer le prix de ses produits. Il possède une toute petite boutique, qui contient :

Objet Tasses Assiettes Vases
Nombre 20 15 5
Prix à l'unité en euros 10 30 70
  1. Initialement, il se dit qu'il va faire très simple : tous les objets sont à moins $30\%$.

    1. Écrire une fonction python tout_en_solde qui prend en argument un prix p en euros et qui renvoie le nouveau prix, calculé en appliquant une réduction de $30\%$.

    2. Écrire les instructions python qui affectent aux variables prix_tasses, prix_assiettes et prix_vases leur nouveau prix.

      Quelle(s) instruction(s) doit-on écrire pour faire afficher ces prix ?

  2. Après mûre réflexion, le commerçant se dit qu'il faut être un peu plus agressif dans ses réductions : certains items sont encore trop chers et il faut leur appliquer une remise plus importante. Il utilise pour cela la méthode suivante :

    • si le prix p de l'objet est supérieur ou égal à $50$€, alors on applique une réduction de $60\%$.

    • sinon on applique une réduction de $30\%$ comme avant.

    • Écrire une fonction python grosses_soldes qui prend en argument un prix p et qui renvoie le nouveau prix, calculé en appliquant la nouvelle méthode.

    • Écrire un jeu de test qui vérifie que les nouveaux prix des tasses, assiettes, et vases sont correctement calculés par la fonction grosses_soldes.

  3. En étudiant les horaires d'affluence de son magasin, il se rend compte du phénomène suivant : lors de la période janvier-juin (inclus), il y a vraiment beaucoup de clients dans son magasin. Par contre, dans la période juillet-décembre, il n'y a pas grand monde. Il pense à la troisième méthode :

    • si le numéro du mois en cours est compris entre 1 et 6 (inclus), alors il ne fait aucune réduction ! Il y a bien assez de clients, il y aura bien quelqu'un qui achètera ses objets.
    • si le numéro du mois en cours est compris entre 7 et 12 (inclus), alors il applique la méthode des grosses_soldes pour calculer le nouveu prix.

    • Calculer :

      • le prix d'une tasse en mai ;

      • le prix d'une assiette en octobre ;

      • le prix d'un vase en novembre ;

      • le prix d'un vase en janvier.

    • Écrire une fonction soldes_malines qui prend en argument un prix p et un entier numero_mois et qui renvoie le nouveau prix de l'objet au mois numero_mois. Vous pourrez faire appel aux fonctions précédentes.

    • En avril 2026, lors d'une sortie à Yaoundé, M. Picard tombe sous le charme désuets des céramiques que vend le commerçant. Il achète l'intégralité de son stock ! Écrire un code python qui permet de calculer puis d'afficher la somme gagnée par le commerçant en vendant tous ses objets en avril.

Boucle for et trace d'exécution

Déterminer la valeur de la variable d après exécution du programme dans chacun des cas ci-dessous.

  1. 🐍 Code Python
    1
    2
    3
    4
    5
    6
    a, b, c, d = 1, 2, 3, 4
    for k in range(2):
        a = a + b
        b = b + a
        c = c + b
        d = d + c
    
  2. 🐍 Code Python
    1
    2
    3
    4
    5
    6
    a, b, c, d = 1, 2, 3, 4
     for k in range(2):
         a = a + b
         b = b + a
         c = c + b
     d = d + c
    
  3. 🐍 Code Python
    1
    2
    3
    4
    5
    6
    a, b, c, d = 1, 2, 3, 4
    for k in range(2):
        a = a + b
        b = b + a
    c = c + b
    d = d + c
    
  4. 🐍 Code Python
    1
    2
    3
    4
    5
    6
    a, b, c, d = 1, 2, 3, 4
    for k in range(2):
        a = a + b
    b = b + a
    c = c + b
    d = d + c
    

Trace d'exécution : introduction

Le tableau ci-contre permet de dresser la trace d'exécution d'un programme contenant une boucle for. À la fin de chaque exécution du bloc répété, on note l'état des variables dans la ligne correspondante.

img

  1. 🐍 Code Python
    1
    2
    3
    4
    u = 15
    for i in range(3):
        u = 2*u + 1
    print(u)
    
  2. 🐍 Code Python
    1
    2
    3
    4
    s = 0
    for i in range(5):
        s = s + i
    print(s)
    
  3. 🐍 Code Python
    1
    2
    3
    4
    p = 1
    for i in range(4):
        p = p * i
    print(p)
    
  4. 🐍 Code Python
    1
    2
    3
    4
    s = 3
    for i in range(2, 9):
        s = s + i
    print(s)
    
  5. 🐍 Code Python
    1
    2
    3
    4
    chaine = ""    
    for c in "tr", "uc", "de", "bg":
        chaine = chaine + c
    print(chaine)
    
  6. 🐍 Code Python
    1
    2
    for k in range(4):
        print(k**2)
    
  7. 🐍 Code Python
    1
    2
    3
    for i in range(9):
        if i % 3 == 0:
            print(i)
    

Pour chacun des codes ci-dessus.

  1. Dresser la traces d'exécution du programme.
  2. Déterminer l'affichage réalisé par le programme.

Écriture de fonction

  1. Écrire le corps de la fonction ci-dessous.

    🐍 Code Python
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    def somme_carres(n):
        """int -> int
        precondition: n >= 1
        retourne la somme des n premiers carrés."""
        ...
    
    assert somme_carres(3) == 1 + 2 ** 2 + 3 ** 2
    assert somme_carres(4) == 1 + 4 + 9 + 16
    assert somme_carres(1) == 1
    assert somme_carres(10) == 385
    
  2. On souhaite écrire une fonction python somme_pairs qui prend en argument un entier n et qui renvoie la somme de tous les entiers pairs compris entre $0$ et $n$ strictement.

    1. Écrire un jeu de test que doit satisfaire cette fonction. Vous écrirez au moins 5 tests différents.

    2. Écrire le code de la fonction somme_pairs. Attention à la rédaction de la spécification de la fonction.

Fonctions mystères

  1. Soit la fonction mystere dont on donne le code ci-dessous.

    🐍 Code Python
    1
    2
    3
    4
    5
    6
    def mystere(a, b):
        m = O
        while b > 0:
            m = m + a
            b = b - 1
        return m      
    
    1. Déterminer la valeur renvoyée par mystere(5, 4). Justifier votre réponse à l'aide d'une trace d'éxecution.

    2. Écrire la spécification complète de la fonction mystere.

    3. Écrire un jeu de 5 tests pour la fonction mystere.

  2. Soit la fonction mystere2 dont on donne le code ci-dessous.

    🐍 Code Python
    1
    2
    3
    4
    5
    6
    def mystere2(a):
        k, i = 1, 0
        while k < a + 1:
            k = k * 10
            i = i + 1
        return i
    
    1. Déterminer la valeur renvoyée par mystere2(1024). Justifier votre réponse à l'aide d'une trace d'exécution.

    2. Déterminer la valeur renvoyée par mystere2(42), et mystere2(100).

    3. Écrire la spécification complète de la fonction mystere2.

    4. Écrire un jeu de 5 tests pour la fonction mystere2.

  3. Soit la fonction mystere3 dont on donne le code ci-dessous.

    🐍 Code Python
    1
    2
    3
    4
    5
    6
    7
    8
    def mystere3(a, b):
        m = 0
        while b > 0:
            if b % 2 == 1:
                m = m + a
            a = 2 * a
            b = b // 2
        return m
    
    1. Déterminer la valeur renvoyée par mystere3(3, 5). Justifier votre réponse à l'aide d'une trace d'exécution.

    2. Écrire la spécification complète de la fonction mystere3.

    3. Écrire un jeu de 5 tests pour la fonction mystere3.

  4. Soit la fonction mystere4 dont on donne le code ci-dessous.

    🐍 Code Python
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    def mystere4(a, n):
        b = 1
        while n != 0:
            if n % 2 == 1:
                b = b * a
                n = n - 1
            else:
                a = a * a
                n = n // 2
        return b
    
    1. Déterminer la valeur renvoyée par mystere4(2, 5). Justifier votre réponse à l'aide d'une trace d'exécution.

    2. Écrire la spécification complète de la fonction mystere4.

    3. Écrire un jeu de 5 tests pour la fonction mystere4.

Boucles for imbriquées, ordre d'exécution

  1. Déterminer ce qu'affiche le programme ci-dessous.

    🐍 Code Python
    1
    2
    3
    for i in range (3):
        for j in range (2):
            print(i, j)
    
  2. Déterminer ce qu'affiche le programme ci-dessous.

    🐍 Code Python
    1
    2
    3
    for j in range (2):
        for i in range (3):
            print(i, j)
    
  3. Déterminer ce qu'affiche le programme ci-dessous.

    🐍 Code Python
    1
    2
    3
    4
    5
    for i in range (1000) :
        for j in range (1000) :
            for k in range (1000) :
                for m in range (1000) :
                    print ("Mille sabords !")
    
  4. Déterminer ce qu'affiche le programme ci-dessous.

    🐍 Code Python
    1
    2
    3
    for i in range (2, 15):
        for j in range (4, 9):
            print("*")
    

Spécification et tests

On considère le code python ci-dessous.

🐍 Code Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
def val_abs (nbr):
    """ float -> float
    Renvoie la valeur absolue de nbr """
    if nbr >= 0:
        return nbr
    else:
        return -nbr
assert val_abs(-3) == 3
assert val_abs (3) == 3

def myst_1(x, y):
    return (x + y + val_abs (x - y)) / 2
def myst_2(x, y):
    return (x + y - val_abs (x - y)) / 2
  1. Compléter les tests ci-dessous pour qu'ils soient validés.

    🐍 Code Python
    1
    2
    3
    4
    assert myst_1 (3, 7) == ...
    assert myst_2 (3, 7) == ...
    assert myst_1 (6, 4) == ...
    assert myst_2 (6, 4) == ...
    
  2. Proposer des noms plus adaptés pour les fonctions myst_1 et myst_2.

  3. Écrire la spécification de ces fonctions.