TP Python – Suites arithmétiques en Python
BTS SIO SISR 2e année – Pour aller plus loin – S02
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.
Exercice A – Terme général
Écris terme_arith(u0, r, n) qui renvoie \(u_n = u_0 + nr\).
J'anticipe. Pour u0 = 12, r = 5, n = 20, quelle valeur attends-tu ?
def termepy-undarith(u0, r, n):bksl-nl """Renvoie upy-undn d'une suite arithmétique."""bksl-nl ...bksl-nlbksl-nl
Exercice B – Somme de termes
Écris somme_arith(u0, r, n) qui renvoie \(u_0 + u_1 + \dots + u_n\) avec la formule (pas de boucle), en nombres entiers.
J'anticipe. Combien de termes la somme contient-elle pour n = 20 ?
def sommepy-undarith(u0, r, n):bksl-nl """upy-und0 + ... + upy-undn avec la formule."""bksl-nl ...bksl-nlbksl-nl
Je comprends. Vérifie ta fonction avec sum(...) sur quelques valeurs : pourquoi cette double vérification est-elle utile ?
Exercice C – Est-ce arithmétique ?
Écris est_arithmetique(liste) qui renvoie True si les différences entre éléments consécutifs sont toutes égales. Une liste de 0, 1 ou 2 éléments est arithmétique.
def estpy-undarithmetique(liste):bksl-nl """True si les differences consecutives sont toutes egales."""bksl-nl ...bksl-nlbksl-nl
Je comprends. Une liste finie arithmétique prouve-t-elle que la suite l'est ?
Exercice D – Nombre de termes d'une plage
Écris nb_termes(a, b, pas) qui renvoie combien d'entiers de la forme \(a, a+\text{pas}, a+2\,\text{pas}, \dots\) sont inférieurs ou égaux à b (avec pas > 0). Renvoie 0 si b < a.
J'anticipe. Combien y a-t-il de termes dans 10, 14, ..., 250 (exercice 6) ?
def nbpy-undtermes(a, b, pas):bksl-nl """Nombre de termes a, a+pas, ... qui restent <= b."""bksl-nl ...bksl-nlbksl-nl
Exercice E – Quelle offre choisir ?
Deux offres coûtent a0 + ra * n et b0 + rb * n. Écris rang_moins_cher(a0, ra, b0, rb) qui renvoie le plus petit entier \(n \ge 0\) pour lequel l'offre B est strictement moins chère que A, en supposant rb < ra (sinon la boucle ne s'arrêterait pas).
J'anticipe. Pour A : 30 + 4n et B : 50 + 3n, quel rang attends-tu (exercice 7) ?
def rangpy-undmoinspy-undcher(a0, ra, b0, rb):bksl-nl """Plus petit n >= 0 avec b0 + rbpy-strn < a0 + rapy-strn (rb < ra)."""bksl-nl ...bksl-nlbksl-nl
Je comprends. Quel est le variant de ta boucle ? Pourquoi l'hypothèse rb < ra est-elle indispensable ?