TP Python – Auto-évaluation et exercices de programmation
BTS SIO SISR 1re année – Mathématiques pour l'informatique – 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.
Ces trois exercices reprennent le type de programmation de l'épreuve : une fonction à écrire à partir d'un énoncé, avec des tests.
Exercice A – Première série en alerte
Écris premiere_serie(releves, seuil, k) : l'indice du premier relevé de la première série d'au moins k relevés consécutifs strictement supérieurs au seuil (avec k >= 1), ou -1.
J'anticipe. Pour [30, 10, 30, 31, 32, 10], le seuil 25 et k = 3, quel résultat attends-tu ?
def premierepy-undserie(releves, seuil, k):bksl-nl """Indice du premier relevé de la première série d'au moins k relevés consécutifsbksl-nl strictement supérieurs à seuil (k >= 1), ou -1 s'il n'y en a pas."""bksl-nl courante = 0bksl-nl for i in range(len(releves)):bksl-nl # À compléter : mettre à jour courante (+1 si en alerte, sinon retour à 0)bksl-nl # puis, si courante vaut k, renvoyer l'indice du début de la sériebksl-nl passbksl-nl return -1bksl-nlbksl-nl
Exercice B – Journal
Écris compte_erreurs(lignes) : un dictionnaire adresse → nombre de lignes de niveau ERROR. Puis adresse_la_plus_active(lignes) : l'adresse qui a le plus d'erreurs (la plus petite dans l'ordre alphabétique en cas d'égalité), ou None s'il n'y a pas d'erreur.
def comptepy-underreurs(lignes):bksl-nl d = {}bksl-nl for ligne in lignes:bksl-nl c = ligne.split()bksl-nl # À compléter : si c[3] vaut "ERROR", incrémenter d[c[2]]bksl-nl # (la créer à 1 si l'adresse n'est pas encore dans d)bksl-nl return dbksl-nlbksl-nldef adressepy-undlapy-undpluspy-undactive(lignes):bksl-nl d = comptepy-underreurs(lignes)bksl-nl meilleure = Nonebksl-nl for adresse in sorted(d):bksl-nl # À compléter : garder l'adresse si elle a strictement plus d'erreurs que meilleurebksl-nl passbksl-nl return meilleurebksl-nlbksl-nl
Exercice C – Bilan de relevés
Écris bilan_releves(releves, seuil) qui renvoie un quadruplet (minimum, maximum, nombre de relevés en alerte, pourcentage de relevés en alerte) pour une liste non vide.
Je comprends. Pourquoi faut-il écrire n * 100 / len(releves) et non n // len(releves) * 100 ?
def bilanpy-undreleves(releves, seuil):bksl-nl """Pour une liste non vide : (minimum, maximum, nombre de relevés en alerte,bksl-nl pourcentage de relevés en alerte). Un relevé est en alerte s'il est > seuil."""bksl-nl mini = releves[0]bksl-nl maxi = releves[0]bksl-nl n = 0bksl-nl for r in releves:bksl-nl # À compléter : mettre à jour mini, maxi et nbksl-nl passbksl-nl pourcentage = 0bksl-nl # À compléter : n py-str 100 / len(releves) (multiplier avant de diviser)bksl-nl return (mini, maxi, n, pourcentage)bksl-nlbksl-nl