Avant de commencer, quelques rappels des notions vues dans les TP 1 et 2.
- Variables et affectation :
x = 5 - Types :
int,float,str,bool— vérifiable avectype() - Opérateurs :
+-*/**%— comparaisons :==!=<> - Affichage :
print("texte", variable)
type(7 / 2) ?int — le résultat est un entierfloat — l'opérateur / renvoie toujours un float en Python 3str — le résultat contient un pointRésultat : 42 en utilisant la variable res = 42 ?print("Résultat : 42")print("Résultat :", res)print(Résultat, res)range(n)Comprendre comment répéter des instructions un nombre fixe de fois avec for et range().
Une boucle for permet de répéter un bloc d'instructions. range(n) génère les entiers de 0 à n−1.
for i in range(n) : # instructions répétées n fois⚠ Le bloc à répéter doit être indenté (décalé de 4 espaces ou une tabulation Tab). C'est l'indentation qui indique à Python ce qui est "dans" la boucle.
| Expression | Valeurs produites | Nombre de tours |
|---|---|---|
| range(5) | 0, 1, 2, 3, 4 | 5 tours |
| range(3) | 0, 1, 2 | 3 tours |
| range(1) | 0 | 1 tour |
| range(0) | (rien) | 0 tour |
Après avoir tapé
for i in range(5): et appuyé sur Entrée, utilise la touche Tab pour indenter la ligne suivante de 4 espaces. C'est obligatoire : c'est ce décalage qui indique à Python que l'instruction fait partie de la boucle.
Complète le programme ci-dessous, puis réponds aux questions.
- 1Remplace le premier
...par le nombre de tours souhaité, et le second par ce qu'on veut afficher. Lance. - 2Change
range(...)enrange(3)et relance — combien de lignes s'affichent ? - 3Affiche
i * 2au lieu dei— qu'obtiens-tu ?
for i in range(5): print(i) ?range(n) commence toujours à 0 et s'arrête à n−1print(i) sous le for ?Sans aide, écris une boucle for qui affiche les nombres de 1 à 5. L'éditeur est vide : tu pars de zéro.
- La ligne
forse termine bien par: - Le
print()est bien indenté avec Tab (ou 4 espaces) - Le
range()produit bien 1, 2, 3, 4, 5 — attention à la borne de départ !
range() as-tu utilisé pour afficher 1, 2, 3, 4, 5 ?range(5) — donne 0, 1, 2, 3, 4 (commence à 0)range(1, 6) — donne 1, 2, 3, 4, 5 (commence à 1, s'arrête avant 6)range(1, 5) — donne 1, 2, 3, 4 (s'arrête avant 5)Une boucle est très utile pour accumuler des résultats. Ici on calcule la somme des entiers de 0 à 4 pas à pas.
somme = somme + i signifie « ajoute i à la valeur actuelle de somme et range le résultat dans somme ».- 1Complète les
...pour calculer la somme 0+1+2+3+4. - 2Ajoute un
print()à l'intérieur de la boucle pour affichersommeaprès chaque ajout. - 3Modifie le programme pour calculer la somme de 0 à 9 (change juste le
range()).
somme après for i in range(5): somme = somme + i (en partant de somme = 0) ?irange(a, b) : choisir son point de départUtiliser range(a, b) pour contrôler précisément la plage de valeurs parcourue par la boucle.
range(a, b) génère les entiers de a inclus jusqu'à b exclu. On peut aussi ajouter un pas avec range(a, b, pas).
| Expression | Valeurs produites |
|---|---|
| range(1, 6) | 1, 2, 3, 4, 5 |
| range(0, 10, 2) | 0, 2, 4, 6, 8 |
| range(10, 0, -1) | 10, 9, 8, …, 1 |
| range(5, 5) | (rien — a égal b) |
Complète et lance ces trois variantes une par une en modifiant le range() à chaque étape.
- 1Complète avec
range(1, 6)et lance — quelles valeurs obtiens-tu ? - 2Remplace par
range(0, 10, 2)et relance — à quoi sert le 3e argument ? - 3Remplace par
range(10, 0, -1)et relance — que se passe-t-il avec un pas négatif ?
range(1, 6) ?range() faut-il pour afficher les nombres pairs de 2 à 10 inclus ?range(2, 10)range(2, 11, 2) — début 2, fin 11 (exclu), pas de 2range(2, 10, 2) — s'arrête à 8 car 10 est exclurange(0, 10, 2) — commence à 0Complète ce programme qui affiche la table de multiplication d'un nombre choisi.
range() faut-il écrire ? (écris uniquement l'expression range(...))Comprendre ce qu'est une fonction, comment la définir avec def et comment l'appeler.
Une fonction est un bloc d'instructions auquel on donne un nom, pour pouvoir le réutiliser facilement. Plutôt que de réécrire le même code plusieurs fois, on l'écrit une seule fois dans une fonction et on l'appelle autant de fois qu'on veut.
def nom_de_la_fonction(parametre1, parametre2) : # instructions de la fonctionPuis pour l'utiliser :
nom_de_la_fonction(valeur1, valeur2)
def ma_fonction(): crée la fonction mais ne l'exécute pas. Pour l'exécuter, il faut l'appeler : ma_fonction().Ce programme est entièrement écrit. Lis-le attentivement, essaie de deviner ce qu'il va afficher, puis lance-le pour vérifier.
- 1Repère la définition de la fonction (ligne commençant par
def) et les appels de la fonction (lignes du bas). - 2Lance le programme — combien de lignes s'affichent ?
- 3Ajoute un 4e appel :
saluer("Grace")— que se passe-t-il ?
print()def saluer(prenom):, à quoi sert prenom ?Voici d'abord une fonction complète à observer : elle calcule le double d'un nombre. Lance-la, vérifie que tu comprends chaque ligne, puis réponds à la question ci-dessous.
À toi maintenant ! Complète la fonction afficher_table en t'inspirant de l'exemple ci-dessus et de la boucle de l'exercice 4.
- 1Remplace les
...dans la bouclefor(même logique qu'exercice 4). - 2Complète les deux appels de la fonction.
Apprendre à renvoyer une valeur depuis une fonction avec return, pour pouvoir réutiliser le résultat dans la suite du programme.
Jusqu'ici nos fonctions affichaient des choses mais ne renvoyaient rien. Avec return, une fonction peut renvoyer une valeur qu'on peut stocker dans une variable ou réutiliser dans un calcul.
Sans return | Avec return |
|---|---|
| def double(x): print(x * 2) double(5) # affiche 10 y = double(5) # y vaut None ! |
def double(x): return x * 2 y = double(5) # y vaut 10 print(y) # affiche 10 |
return arrête immédiatement la fonction et renvoie la valeur indiquée. Tout code écrit après un return dans la même fonction ne sera jamais exécuté.- 1Lance le programme ci-dessous et observe les résultats.
- 2Remplace
returnparprint()à la ligne 2 — que se passe-t-il quand on essaie de stocker le résultat dansr? - 3Restaure le
returnet ajoute l'utilisation detriple()dans un calcul :print(triple(4) + triple(2)).
r après r = triple(5) avec la fonction def triple(x): return x * 3 ?None — la fonction n'a pas de print()return x * 3 renvoie 5 × 3 = 15, qui est affecté à rxreturn x * 3 par print(x * 3) et qu'on écrit r = triple(5) ?r vaut 15 — print() et return font la même choser vaut None — print() affiche sans renvoyer de valeurreturnVoici d'abord une fonction complète à observer : elle calcule l'aire d'un carré. Lance-la, lis bien le return, et vois comment on récupère et utilise son résultat.
À toi maintenant ! Complète les trois fonctions ci-dessous en t'inspirant de l'exemple. Chacune reçoit des paramètres, effectue un calcul et renvoie le résultat.
perimetre(8, 5) avec la bonne formule ?return de la fonction prix_reduit.reduction est déjà calculée.Combiner boucles for, fonctions avec return, types, variables et print() dans un programme complet.
Ce programme génère un rapport de notes pour une classe. Il utilise une fonction pour calculer la moyenne, et une boucle pour afficher toutes les notes.
- 1Complète la fonction
calculer_moyennequi prend trois notes et renvoie leur moyenne. - 2Complète la boucle pour afficher chaque élève avec sa moyenne, en appelant la fonction.
- 3Complète la boucle finale pour calculer la meilleure moyenne de la classe.
round().- AÉcris une fonction
est_pair(n)qui renvoieTruesinest pair etFalsesinon. (Rappel :n % 2 == 0). Teste-la avec une bouclefor i in range(1, 11). - BÉcris une fonction
factorielle(n)qui calcule n! (ex : 5! = 5×4×3×2×1) en utilisant une boucleforet une variable accumulatrice. Teste avecfactorielle(5)→ 120. - CModifie le programme de l'exercice 9 pour afficher aussi le prénom de l'élève ayant la meilleure moyenne.
est_pair(7) ?True — 7 est impair donc c'est vraiFalse — 7 % 2 = 1 ≠ 0, donc 7 n'est pas pair1 — c'est le reste de 7 / 2factorielle(5) ?