Aller au contenu

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 ?

###
assert termepy-undarith(12, 5, 20) == 112bksl-nlassert termepy-undarith(7, -4, 3) == -5bksl-nlassert termepy-undarith(3, 0, 50) == 3bksl-nlassert termepy-undarith(2, 4, 0) == 2bksl-nlbksl-nl ∞/∞

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 ?

###
assert sommepy-undarith(12, 5, 20) == 1302bksl-nlassert sommepy-undarith(0, 1, 100) == 5050bksl-nlassert sommepy-undarith(5, 0, 3) == 20bksl-nlassert sommepy-undarith(100, 25, 29) == 13875bksl-nlassert all(sommepy-undarith(a, b, k) == sum(a + j py-str b for j in range(k + 1)) for a in range(-3, 4) for b in range(-3, 4) for k in range(0, 8))bksl-nlbksl-nl ∞/∞

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.

###
assert estpy-undarithmetique([5, 9, 13, 17]) == Truebksl-nlassert estpy-undarithmetique([1, 2, 4, 7]) == Falsebksl-nlassert estpy-undarithmetique([]) == Truebksl-nlassert estpy-undarithmetique([4]) == Truebksl-nlassert estpy-undarithmetique([4, 9]) == Truebksl-nlassert estpy-undarithmetique([10, 8, 6, 4]) == Truebksl-nlassert estpy-undarithmetique([3, 3, 3]) == Truebksl-nlassert estpy-undarithmetique([1, 2, 3, 5]) == Falsebksl-nlbksl-nl ∞/∞

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) ?

###
assert nbpy-undtermes(10, 250, 4) == 61bksl-nlassert nbpy-undtermes(1, 10, 3) == 4bksl-nlassert nbpy-undtermes(5, 4, 1) == 0bksl-nlassert nbpy-undtermes(7, 7, 5) == 1bksl-nlassert all(nbpy-undtermes(a, b, p) == len(range(a, b + 1, p)) for a in range(0, 6) for b in range(0, 20) for p in range(1, 6))bksl-nlbksl-nl ∞/∞

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) ?

###
assert rangpy-undmoinspy-undcher(30, 4, 50, 3) == 21bksl-nlassert rangpy-undmoinspy-undcher(0, 5, 10, 3) == 6bksl-nlassert rangpy-undmoinspy-undcher(0, 2, 1, 1) == 2bksl-nlassert rangpy-undmoinspy-undcher(10, 5, 0, 1) == 0bksl-nlbksl-nl ∞/∞

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 ?