1ère Séance : Installation et premier programme

a = int(input("entrer la valeur de a : "))

b = int(input("entrer la valeur de b : "))

S = a * b

print("s =", S)

print("a + b =", a + b)

print("a - b =", a - b)

print("a / b =", a / b)

print("a puissance b =", a ** b)

2ème Séance : Variables, listes et tests logiques

Exercice 1 (Page 18)

Question : Qu’affiche le code suivant ?

a = 15

b = 3

c = a + b

a = b

b = c

b = b - a

print(b)

Réponse : Analysons étape par étape :

  1. a = 15 : a vaut 15.
  2. b = 3 : b vaut 3.
  3. c = a + b : c = 15 + 3 = 18.
  4. a = b : a = 3.
  5. b = c : b = 18.
  6. b = b – a : b = 18 – 3 = 15.
  7. print(b) : Affiche 15.

Résultat : Le programme affiche 15.

Question supplémentaire : Quelle affectation doit-on donner à la variable a pour que le programme affiche 11 ?

Réponse : La dernière étape donne b = c – a, où c = a_initial + b_initial. Nous voulons b = 11.

  • Initialement, b = 3 (donné).
  • Donc, c = a_initial + 3.
  • À la fin, b = c – a, mais ici a = b = 3 (car a = b dans le code).
  • Ainsi, b = c – 3 = (a_initial + 3) – 3 = a_initial.
  • Pour que b = 11, il faut a_initial = 11.

Résultat : Il faut affecter a = 11 initialement.

Exercice 2 (Page 18)

Question : Tester le code suivant :

largeur, longueur = 10, 15.5

surface = largeur * longueur

print(type(largeur), type(longueur), type(surface))

Quel est le rôle de la fonction type() ?

Réponse : Exécutons le code :

  • largeur = 10 : Un entier.
  • longueur = 15.5 : Un flottant.
  • surface = largeur * longueur = 10 * 15.5 = 155.0 : Un flottant (car une multiplication avec un flottant donne un flottant).
  • print(type(largeur), type(longueur), type(surface)) : Affiche les types des variables.

Résultat affiché :

<class ‘int’> <class ‘float’> <class ‘float’>

Rôle de la fonction type() : La fonction type() retourne le type de données d’une variable ou d’une valeur (par exemple, int pour un entier, float pour un nombre à virgule, str pour une chaîne de caractères, etc.).

Exercice 3 (Page 24)

Question (Partie i) : Répondre aux questions sans coder le script suivant :

a = [2., "3", 5]

a.append(15.4)

print(a)

a.insert(3, 21)

print(a)

a.pop(-3)

print(a)

a.pop()

print(a)

a[1] = int(a[1])

print(a)

Prédire les résultats affichés.

Réponse : Analysons chaque étape :

  1. a = [2., « 3 », 5] : Liste initiale [2.0, « 3 », 5].
  2. a.append(15.4) : Ajoute 15.4 à la fin.
    • Nouvelle liste : [2.0, « 3 », 5, 15.4].
    • print(a) : Affiche [2.0, « 3 », 5, 15.4].
  3. a.insert(3, 21) : Insère 21 à l’indice 3 (avant 15.4).
    • Nouvelle liste : [2.0, « 3 », 5, 21, 15.4].
    • print(a) : Affiche [2.0, « 3 », 5, 21, 15.4].
  4. a.pop(-3) : Supprime l’élément à l’indice -3 (troisième en partant de la fin, soit 5).
    • Nouvelle liste : [2.0, « 3 », 21, 15.4].
    • print(a) : Affiche [2.0, « 3 », 21, 15.4].
  5. a.pop() : Supprime le dernier élément (15.4).
    • Nouvelle liste : [2.0, « 3 », 21].
    • print(a) : Affiche [2.0, « 3 », 21].
  6. a[1] = int(a[1]) : Convertit a[1] (la chaîne « 3 ») en entier (3).
    • Nouvelle liste : [2.0, 3, 21].
    • print(a) : Affiche [2.0, 3, 21].

Résultats affichés :

[2.0, « 3 », 5, 15.4]

[2.0, « 3 », 5, 21, 15.4]

[2.0, « 3 », 21, 15.4]

[2.0, « 3 », 21]

[2.0, 3, 21]

Question (Partie ii) : Vérifier les réponses en recopiant le script dans un fichier Python.
Réponse : La vérification consiste à exécuter le script et confirmer que les sorties correspondent aux prédictions ci-dessus. Les résultats sont corrects comme indiqué.

Exercice 4 (Page 27)

Question (Partie i) : Répondre aux questions sans coder le script suivant :

a = [2., "3", 5]

list_1 = ["Téléviseur", "Téléphone", "Tablette", "Ordinateur", "Switch", "PS5"]

list_2 = [1, 40, 75.5]

list_3 = list_1 + list_2

print(list_3)

list_4 = list_2 * 3

print(list_4)

test1 = list_2 == list_4

print(test1)

test2 = list_2[0] == list_4[0]

print(test2)

list_5 = sorted(list_4)

test3 = list_5 == list_4.sort()

print(test3)

test4 = "Tél" in list_1[0] and "Tél" in list_1[1]

print(test4)

list_1.remove("Téléviseur")

list_1.append("Livre")

test5 = "Tél" in list_1[0] and "Tél" in list_1[1]

print(test5)

Prédire les résultats affichés.

Réponse : Analysons chaque étape :

  1. list_3 = list_1 + list_2 : Concatène list_1 et list_2.
    • list_1 = [« Téléviseur », « Téléphone », « Tablette », « Ordinateur », « Switch », « PS5 »].
    • list_2 = [1, 40, 75.5].
    • list_3 = [« Téléviseur », « Téléphone », « Tablette », « Ordinateur », « Switch », « PS5 », 1, 40, 75.5].
    • print(list_3) : Affiche [« Téléviseur », « Téléphone », « Tablette », « Ordinateur », « Switch », « PS5 », 1, 40, 75.5].
  2. list_4 = list_2 * 3 : Répète list_2 trois fois.
    • list_4 = [1, 40, 75.5, 1, 40, 75.5, 1, 40, 75.5].
    • print(list_4) : Affiche [1, 40, 75.5, 1, 40, 75.5, 1, 40, 75.5].
  3. test1 = list_2 == list_4 : Vérifie si list_2 est égal à list_4.
    • list_2 = [1, 40, 75.5], list_4 = [1, 40, 75.5, 1, 40, 75.5, 1, 40, 75.5].
    • Les listes sont différentes (longueur et contenu).
    • print(test1) : Affiche False.
  4. test2 = list_2[0] == list_4[0] : Compare le premier élément de list_2 et list_4.
    • list_2[0] = 1, list_4[0] = 1.
    • print(test2) : Affiche True.
  5. list_5 = sorted(list_4) : Trie list_4 par ordre croissant.
    • list_4 = [1, 40, 75.5, 1, 40, 75.5, 1, 40, 75.5].
    • list_5 = [1, 1, 1, 40, 40, 40, 75.5, 75.5, 75.5].
    • list_4.sort() : Trie list_4 en place, donc list_4 = [1, 1, 1, 40, 40, 40, 75.5, 75.5, 75.5].
    • test3 = list_5 == list_4.sort() : Attention, list_4.sort() renvoie None (car c’est une méthode qui modifie en place).
    • print(test3) : Affiche False (car list_5 est une liste et list_4.sort() est None).
  6. test4 = « Tél » in list_1[0] and « Tél » in list_1[1] : Vérifie si « Tél » est dans list_1[0] et list_1[1].
    • list_1[0] = « Téléviseur », contient « Tél ».
    • list_1[1] = « Téléphone », contient « Tél ».
    • test4 = True and True.
    • print(test4) : Affiche True.
  7. list_1.remove(« Téléviseur ») : Supprime « Téléviseur ».
    • list_1 = [« Téléphone », « Tablette », « Ordinateur », « Switch », « PS5 »].
    • list_1.append(« Livre ») : Ajoute « Livre » à la fin.
    • list_1 = [« Téléphone », « Tablette », « Ordinateur », « Switch », « PS5 », « Livre »].
    • test5 = « Tél » in list_1[0] and « Tél » in list_1[1] :
      • list_1[0] = « Téléphone », contient « Tél ».
      • list_1[1] = « Tablette », ne contient pas « Tél ».
      • test5 = True and False.
    • print(test5) : Affiche False.

Résultats affichés :

text

Copier

[« Téléviseur », « Téléphone », « Tablette », « Ordinateur », « Switch », « PS5 », 1, 40, 75.5]

[1, 40, 75.5, 1, 40, 75.5, 1, 40, 75.5]

False

True

False

True

False

Question (Partie ii) (implicite) : Vérifier les réponses en exécutant le script.
Réponse : La vérification consiste à exécuter le script et confirmer que les sorties correspondent aux prédictions ci-dessus. Les résultats sont corrects comme indiqué.


4ème Séance : Travaux pratiques – Jeux et application

Créer un jeu de devinette (Page 38)

Question : Refaire le jeu de devinette avec une boucle for au lieu de while.
Solution proposée avec while :

nombre = 13

input("j'ai choisi un nombre entre 0 et 20, essayez de le deviner")

nbrMax = 5

essai = 0

N = ""

while essai < nbrMax and N != nombre:

    essai += 1

    N = int(input("proposez un nombre"))

    if N == nombre:

        print("Bravo vous avez trouvé le nombre en ", essai, " tentative")

    elif N < nombre:

        print("Ce nombre est petit!")

    else:

        print("Ce nombre est grand !")

Réponse : Pour utiliser une boucle for, nous itérons sur range(nbrMax). Voici la solution :

nombre = 13

input("j'ai choisi un nombre entre 0 et 20, essayez de le deviner")

nbrMax = 5

for essai in range(1, nbrMax + 1):

    N = int(input("proposez un nombre"))

    if N == nombre:

        print("Bravo vous avez trouvé le nombre en ", essai, " tentative")

        break

    elif N < nombre:

        print("Ce nombre est petit!")

    else:

        print("Ce nombre est grand !")

else:

    print("dommage, vous avez perdu! Le nombre à deviner est:", nombre)

Explication :

  • La boucle for essai in range(1, nbrMax + 1) compte les essais de 1 à 5.
  • Si N == nombre, le programme affiche le succès et sort avec break.
  • Sinon, il indique si le nombre est trop petit ou trop grand.
  • Si la boucle se termine sans break (aucun succès), le bloc else affiche le message de défaite.

Exercice : Utiliser la fonction randint (Page 41)

Question : Utilisez la fonction randint dans votre solution du jeu de devinette.

Réponse : Modifions le programme précédent pour utiliser randint :

from random import randint

nombre = randint(0, 20)

input("j'ai choisi un nombre entre 0 et 20, essayez de le deviner")

nbrMax = 5

for essai in range(1, nbrMax + 1):

    N = int(input("proposez un nombre"))

    if N == nombre:

        print("Bravo vous avez trouvé le nombre en ", essai, " tentative")

        break

    elif N < nombre:

        print("Ce nombre est petit!")

    else:

        print("Ce nombre est grand !")

else:

    print("dommage, vous avez perdu! Le nombre à deviner est:", nombre)

Explication :

  • from random import randint importe la fonction.
  • nombre = randint(0, 20) choisit un nombre aléatoire entre 0 et 20 inclus.
  • Le reste du programme est identique, mais le nombre est maintenant aléatoire.

Application : Script de révision des tables de multiplication (Page 41-42)

Script :

from random import randint

from random import choice

iterMax = 5

nbrQuestion = 10

msgCourage = ["Tu y es presque, essaie un autre nombre : ", "Courage, tu vas finir par trouver la bonne réponse : ", "Essaie encore, ne te décourage pas : ", "Ah dommage, tu y es presque, essaie encore : "]

msgFelicit = ["Bravo! Tu es un(e) champion(ne)", "Et encore une bonne réponse!", "Oui oui oui ouiiiii", "C'est tout simplement Génial! ", "ça c'est un travail de PRO!", "Trop trop fort, ne change rien!"]

q = 0

while q < nbrQuestion:

    nbr1 = randint(2,9)

    nbr2 = randint(2,9)

    sol = int(input(str(nbr1) + "x" + str(nbr2) + " = "))

    it = 0

    while it < iterMax:

        if sol == nbr1 * nbr2:

            print(choice(msgFelicit))

            print("Félicitations!")

            break

        elif it == iterMax-1:

            print("la réponse juste est ", nbr1 * nbr2)

            break

        else:

            print(choice(msgCourage))

            sol = int(input("Courage, nouvelle réponse:"))

            it = it + 1

    q = q + 1

Questions et réponses :

  1. Recopier le script puis l’exécuter :
    Réponse : Le script peut être copié et exécuté dans un IDE Python ou une plateforme en ligne comme replit.com. Il pose 10 questions de multiplication (nombres de 2 à 9), avec jusqu’à 5 essais par question, et affiche des messages d’encouragement ou de félicitations.
  2. Quelle variable permet de réduire ou augmenter le nombre de questions posées par le programme ?
    Réponse : La variable nbrQuestion contrôle le nombre de questions. Elle est initialement définie à 10.
  3. Changer le programme pour qu’il ne pose que 3 questions :
    Réponse : Modifier la ligne nbrQuestion = 10 en :

nbrQuestion = 3

  1. Que se passe-t-il si la variable q dépasse la valeur de la variable nbrQuestion ?
    Réponse : La boucle while q < nbrQuestion s’arrête lorsque q atteint ou dépasse nbrQuestion. Si q dépasse nbrQuestion (ce qui ne peut arriver dans ce programme sauf si modifié), aucune question supplémentaire ne serait posée, et la boucle se terminerait.
  2. Que se passe-t-il si la variable it dépasse la valeur de la variable iterMax ?
    Réponse : La boucle interne while it < iterMax s’arrête lorsque it atteint iterMax. À it == iterMax-1, le programme affiche la réponse correcte (print(« la réponse juste est « , nbr1 * nbr2)) et sort avec break. Si itdépassait iterMax (impossible sans modifier le code), la boucle interne se terminerait.
  3. Comment sont obtenues les variables nbr1 et nbr2 ?
    Réponse : nbr1 et nbr2 sont générés aléatoirement par la fonction randint(2,9), qui choisit un entier entre 2 et 9 inclus.
  4. Proposer une explication du fonctionnement de la fonction choice importée depuis le module random :
    Réponse : La fonction choice du module random sélectionne aléatoirement un élément dans une liste. Ici, elle est utilisée pour choisir un message aléatoire dans msgCourage (en cas d’erreur) ou msgFelicit (en cas de succès). Exemple : choice(msgFelicit) retourne un message comme « Bravo! Tu es un(e) champion(ne) » au hasard.
  5. Changer le programme pour qu’il renseigne le nombre des réponses justes et fausses :
    Réponse : Ajoutons des compteurs correctes et fausses. Une réponse est correcte si l’utilisateur trouve la bonne réponse avant iterMax essais. Une réponse est fausse si iterMax essais sont atteints. Voici le programme modifié :
from random import randint

from random import choice

iterMax = 5

nbrQuestion = 10

msgCourage = ["Tu y es presque, essaie un autre nombre : ", "Courage, tu vas finir par trouver la bonne réponse : ", "Essaie encore, ne te décourage pas : ", "Ah dommage, tu y es presque, essaie encore : "]

msgFelicit = ["Bravo! Tu es un(e) champion(ne)", "Et encore une bonne réponse!", "Oui oui oui ouiiiii", "C'est tout simplement Génial! ", "ça c'est un travail de PRO!", "Trop trop fort, ne change rien!"]

q = 0

correctes = 0

fausses = 0

while q < nbrQuestion:

    nbr1 = randint(2,9)

    nbr2 = randint(2,9)

    sol = int(input(str(nbr1) + "x" + str(nbr2) + " = "))

    it = 0

    while it < iterMax:

        if sol == nbr1 * nbr2:

            print(choice(msgFelicit))

            print("Félicitations!")

            correctes += 1

            break

        elif it == iterMax-1:

            print("la réponse juste est ", nbr1 * nbr2)

            fausses += 1

            break

        else:

            print(choice(msgCourage))

            sol = int(input("Courage, nouvelle réponse:"))

            it = it + 1

    q = q + 1

print("Nombre de réponses justes :", correctes)

print("Nombre de réponses fausses :", fausses)
  1. Changer le bloc de la deuxième boucle while par une boucle for :
    Réponse : Remplaçons la boucle while it < iterMax par une boucle for. Voici le programme modifié :
from random import randint

from random import choice

iterMax = 5

nbrQuestion = 10

msgCourage = ["Tu y es presque, essaie un autre nombre : ", "Courage, tu vas finir par trouver la bonne réponse : ", "Essaie encore, ne te décourage pas : ", "Ah dommage, tu y es presque, essaie encore : "]

msgFelicit = ["Bravo! Tu es un(e) champion(ne)", "Et encore une bonne réponse!", "Oui oui oui ouiiiii", "C'est tout simplement Génial! ", "ça c'est un travail de PRO!", "Trop trop fort, ne change rien!"]

q = 0

while q < nbrQuestion:

    nbr1 = randint(2,9)

    nbr2 = randint(2,9)

    sol = int(input(str(nbr1) + "x" + str(nbr2) + " = "))

    for it in range(iterMax):

        if sol == nbr1 * nbr2:

            print(choice(msgFelicit))

            print("Félicitations!")

            break

        elif it == iterMax-1:

            print("la réponse juste est ", nbr1 * nbr2)

            break

        else:

            print(choice(msgCourage))

            sol = int(input("Courage, nouvelle réponse:"))

    q = q + 1

Explication : La boucle for it in range(iterMax) itère de 0 à iterMax-1. Le comportement reste identique, avec break pour sortir en cas de réponse correcte ou à la fin des essais.

  1. Que se passe-t-il si l’utilisateur entre une lettre au lieu d’un chiffre au clavier ?
    Réponse : Si une lettre est entrée, la fonction int(input(…)) lève une exception ValueError, car elle ne peut pas convertir une chaîne non numérique en entier. Le programme s’arrête avec une erreur.
  2. Changer le programme pour palier à cette éventualité :
    Réponse : Utilisons une gestion d’exception avec try/except pour gérer les entrées invalides. Voici une version modifiée :
from random import randint

from random import choice

iterMax = 5

nbrQuestion = 10

msgCourage = ["Tu y es presque, essaie un autre nombre : ", "Courage, tu vas finir par trouver la bonne réponse : ", "Essaie encore, ne te décourage pas : ", "Ah dommage, tu y es presque, essaie encore : "]

msgFelicit = ["Bravo! Tu es un(e) champion(ne)", "Et encore une bonne réponse!", "Oui oui oui ouiiiii", "C'est tout simplement Génial! ", "ça c'est un travail de PRO!", "Trop trop fort, ne change rien!"]

q = 0

while q < nbrQuestion:

    nbr1 = randint(2,9)

    nbr2 = randint(2,9)

    while True:

        try:

            sol = int(input(str(nbr1) + "x" + str(nbr2) + " = "))

            break

        except ValueError:

            print("Veuillez entrer un nombre entier !")

    for it in range(iterMax):

        if sol == nbr1 * nbr2:

            print(choice(msgFelicit))

            print("Félicitations!")

            break

        elif it == iterMax-1:

            print("la réponse juste est ", nbr1 * nbr2)

            break

        else:

            print(choice(msgCourage))

            while True:

                try:

                    sol = int(input("Courage, nouvelle réponse:"))

                    break

                except ValueError:

                    print("Veuillez entrer un nombre entier !")

    q = q + 1

Explication : Les blocs try/except autour de int(input(…)) capturent les ValueError et demandent à l’utilisateur de réessayer jusqu’à ce qu’un entier valide soit entré.

  1. Changer le programme pour qu’il donne également le temps mis par l’utilisateur pour répondre à toutes les questions :
    Réponse : Utilisons le module time pour mesurer le temps. Voici le programme modifié :
from random import randint

from random import choice

import time

iterMax = 5

nbrQuestion = 10

msgCourage = ["Tu y es presque, essaie un autre nombre : ", "Courage, tu vas finir par trouver la bonne réponse : ", "Essaie encore, ne te décourage pas : ", "Ah dommage, tu y es presque, essaie encore : "]

msgFelicit = ["Bravo! Tu es un(e) champion(ne)", "Et encore une bonne réponse!", "Oui oui oui ouiiiii", "C'est tout simplement Génial! ", "ça c'est un travail de PRO!", "Trop trop fort, ne change rien!"]

start_time = time.time()  # Temps de départ

q = 0

while q < nbrQuestion:

    nbr1 = randint(2,9)

    nbr2 = randint(2,9)

    sol = int(input(str(nbr1) + "x" + str(nbr2) + " = "))

    for it in range(iterMax):

        if sol == nbr1 * nbr2:

            print(choice(msgFelicit))

            print("Félicitations!")

            break

        elif it == iterMax-1:

            print("la réponse juste est ", nbr1 * nbr2)

            break

        else:

            print(choice(msgCourage))

            sol = int(input("Courage, nouvelle réponse:"))

    q = q + 1

end_time = time.time()  # Temps de fin

elapsed_time = end_time - start_time

print("Temps total :", round(elapsed_time, 2), "secondes")

Explication : time.time() retourne le temps actuel en secondes. La différence entre end_time et start_time donne le temps écoulé, arrondi à 2 décimales avec round(elapsed_time, 2).


5ème Séance : Fonctions et manipulation des fichiers texte et CSV

Exercice : Créer une fonction pour afficher une table de multiplication (Page 44)

Question : Créer une fonction qui affiche la table de multiplication d’un nombre x. Proposer une autre solution que celle donnée :

def table_multiplication(x):

    n = 1

    while n <= 10:

        print(x, " x ", n, "=", n*x)

        n = n + 1

Réponse : Une autre solution utilisant une boucle for :

def table_multiplication(x):

    for n in range(1, 11):

        print(x, "x", n, "=", n*x)

Explication :

  • La boucle for n in range(1, 11) itère de 1 à 10.
  • À chaque itération, affiche x x n = n*x.
  • Résultat identique à la solution avec while, mais plus concise.

Travaux pratiques : Écrire les tables de multiplication dans un fichier texte (Page 48)

Question : S’inspirer de l’exercice sur les tables de multiplication pour écrire toutes les tables de multiplication (de 1 à 9) dans un document texte.

Réponse :

with open("tables_multiplication.txt", "w") as fichier:

    for x in range(1, 10):

        fichier.write(f"Table de {x}:\n")

        for n in range(1, 11):

            fichier.write(f"{x} x {n} = {x*n}\n")

        fichier.write("\n")

Explication :

  • Ouvre un fichier tables_multiplication.txt en mode écriture (« w »).
  • Boucle externe for x in range(1, 10) parcourt les tables de 1 à 9.
  • Boucle interne for n in range(1, 11) écrit chaque ligne de la table (x x n = x*n).
  • Ajoute une ligne vide après chaque table pour la lisibilité.
  • Résultat dans le fichier :

Table de 1:

1 x 1 = 1

1 x 2 = 2

1 x 10 = 10

Table de 2:

2 x 1 = 2

Si vous avez aimé l'article vous êtes libre de le partager :)