TP Python – Programmation du sujet blanc
BTS SIO SISR 2e année – Pour aller plus loin – S19
Note
Comment ce TP fonctionne. Chaque exercice a un éditeur Python intégré à la page (il s'exécute dans ton navigateur, rien à installer). Avant de lancer, écris sur ta feuille ce que tu anticipes (« J'anticipe »). Puis lance et compare. Le bouton Valider exécute des tests : un test réussi ne dispense pas de comprendre pourquoi.
Note
Ce TP reprend les questions de programmation du sujet blanc. Fais d'abord le sujet sur papier, dans le temps imparti, puis utilise ces éditeurs pour vérifier tes fonctions.
Exercice A – Dossier A4 : mois de saturation
Écris mois_seuil(u0, taux, seuil) qui renvoie le plus petit entier n tel que u0 * (1 + taux) ** n > seuil, en calculant la suite par une boucle (sans logarithme). On suppose u0 > 0 et taux > 0.
J'anticipe. Que vaut le résultat pour 200, 0.03, 300 (question A3) ?
def moispy-undseuil(u0, taux, seuil):bksl-nl """Plus petit n tel que upy-undn > seuil."""bksl-nl ...bksl-nlbksl-nl
Je comprends. Pourquoi la boucle s'arrête-t-elle ? (la suite est strictement croissante et n'est pas majorée)
Exercice B – Dossier B1 : somme récursive
Écris somme_rec(L) récursive (sans boucle ni sum) qui renvoie la somme des éléments de L.
J'anticipe. Écris la pile d'appels pour [4, 1, 3] (question B2).
def sommepy-undrec(L):bksl-nl """Somme des elements de L, de facon recursive."""bksl-nl ...bksl-nlbksl-nl
Exercice C – Dossier B3 : nombre d'appels
Écris appels_fib(n) qui renvoie le nombre d'appels \(C(n)\) de la question B3, par récursivité : 1 si n < 2, sinon appels_fib(n - 1) + appels_fib(n - 2) + 1.
def appelspy-undfib(n):bksl-nl """Nombre d'appels C(n) de la fonction fib naive."""bksl-nl ...bksl-nlbksl-nl
Exercice D – Dossier C2 : sommets à k sauts
Écris sommets_a_k_sauts(g, depart, k) : liste triée des sommets à exactement k sauts de depart. Le graphe g peut être un dictionnaire de listes ou un dictionnaire de dictionnaires (for v in g[s] donne les voisins dans les deux cas). Utilise un parcours en largeur.
J'anticipe. Pour le réseau rx du sujet, quels sommets sont à 2 sauts de R1 ?
from collections import dequebksl-nlbksl-nlbksl-nldef sommetspy-undapy-undkpy-undsauts(g, depart, k):bksl-nl """Sommets (tries) a exactement k sauts de depart."""bksl-nl ...bksl-nlbksl-nl
Exercice E – Dossier C3 : plus faible latence
Écris plus_court_cout(g, a, b) : latence minimale de a à b dans un graphe pondéré (poids positifs ou nuls), ou None si b est inatteignable. Utilise l'algorithme de Dijkstra avec heapq.
import heapqbksl-nlbksl-nlbksl-nldef pluspy-undcourtpy-undcout(g, a, b):bksl-nl """Latence minimale de a a b, ou None."""bksl-nl ...bksl-nlbksl-nl
Je comprends. Donne la latence minimale de R1 à R5 et le chemin correspondant.