Aller au contenu

TP Python – Suites géométriques en Python

BTS SIO SISR 2e année – Pour aller plus loin – S03

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_geo(u0, q, n) qui renvoie \(u_n = u_0 q^n\).

J'anticipe. Pour u0 = 3, q = 2, n = 10, quelle valeur attends-tu ?

###
assert termepy-undgeo(3, 2, 10) == 3072bksl-nlassert termepy-undgeo(4, -3, 3) == -108bksl-nlassert termepy-undgeo(5, 1, 40) == 5bksl-nlassert termepy-undgeo(7, 2, 0) == 7bksl-nlbksl-nl ∞/∞

def termepy-undgeo(u0, q, n):bksl-nl """Renvoie upy-undn d'une suite géométrique."""bksl-nl ...bksl-nlbksl-nl



Exercice B – Somme de termes

Écris somme_geo(u0, q, n) qui renvoie \(u_0 + \dots + u_n\) pour des entiers, avec la formule (traite à part le cas q == 1).

J'anticipe. Pour u0 = 1, q = 2, n = 9, quelle somme attends-tu (exercice 6) ?

###
assert sommepy-undgeo(1, 2, 9) == 1023bksl-nlassert sommepy-undgeo(3, 2, 10) == 6141bksl-nlassert sommepy-undgeo(5, 1, 4) == 25bksl-nlassert sommepy-undgeo(2, 3, 0) == 2bksl-nlassert all(sommepy-undgeo(a, b, k) == sum(a py-str b py-strpy-str j for j in range(k + 1)) for a in range(-3, 4) for b in range(-3, 5) for k in range(0, 8))bksl-nlbksl-nl ∞/∞

def sommepy-undgeo(u0, q, n):bksl-nl """upy-und0 + ... + upy-undn avec la formule (entiers)."""bksl-nl ...bksl-nlbksl-nl



Je comprends. Pourquoi la division // est-elle exacte ici ?

Exercice C – Est-ce géométrique ?

Écris est_geometrique(liste) qui renvoie True s'il existe un nombre q tel que chaque élément soit q fois le précédent. Utilise Fraction pour éviter les erreurs d'arrondi. Une liste de 0 ou 1 élément est géométrique ; si le premier élément est nul, tous les suivants doivent l'être.

###
assert estpy-undgeometrique([3, 6, 12, 24]) == Truebksl-nlassert estpy-undgeometrique([2, 5, 8]) == Falsebksl-nlassert estpy-undgeometrique([]) == Truebksl-nlassert estpy-undgeometrique([5]) == Truebksl-nlassert estpy-undgeometrique([4, -12, 36]) == Truebksl-nlassert estpy-undgeometrique([8, 4, 2, 1]) == Truebksl-nlassert estpy-undgeometrique([0, 0, 0]) == Truebksl-nlassert estpy-undgeometrique([0, 3]) == Falsebksl-nlassert estpy-undgeometrique([1, 2, 4, 9]) == Falsebksl-nlbksl-nl ∞/∞

from fractions import Fractionbksl-nlbksl-nldef estpy-undgeometrique(liste):bksl-nl """True s'il existe q avec liste[i+1] == q py-str liste[i]."""bksl-nl ...bksl-nlbksl-nl



Je comprends. Pourquoi un test d'égalité entre flottants serait-il risqué ici ?

Exercice D – Évolution en pourcentage

Écris valeur_apres(valeur, taux, periodes) qui renvoie la valeur obtenue après periodes évolutions de taux % (négatif pour une baisse), arrondie à 2 décimales avec round.

J'anticipe. Pour 2 000 € avec un taux de −15 % pendant 4 ans, que vaut le résultat (exercice 5) ?

###
assert valeurpy-undapres(2000, -15, 4) == 1044.01bksl-nlassert valeurpy-undapres(1000, 10, 2) == 1210.0bksl-nlassert valeurpy-undapres(500, 20, 3) == 864.0bksl-nlassert valeurpy-undapres(300, 7, 0) == 300.0bksl-nlbksl-nl ∞/∞

def valeurpy-undapres(valeur, taux, periodes):bksl-nl """valeur apres periodes evolutions de taux pour cent."""bksl-nl ...bksl-nlbksl-nl



Exercice E – Premier rang dépassant un seuil

Écris rang_depasse(u0, q, seuil) qui renvoie le plus petit \(n\) tel que \(u_0 q^n \ge \text{seuil}\), avec u0 > 0 et q > 1, en multipliant à chaque tour (pas de formule avec logarithme).

J'anticipe. Pour le trafic de l'exercice 4 (500, 1,2, 2000), quel rang attends-tu ?

###
assert rangpy-unddepasse(1, 2, 1000) == 10bksl-nlassert rangpy-unddepasse(500, 1.2, 2000) == 8bksl-nlassert rangpy-unddepasse(3, 2, 3) == 0bksl-nlassert rangpy-unddepasse(100, 1.1, 1586) == 29bksl-nlbksl-nl ∞/∞

def rangpy-unddepasse(u0, q, seuil):bksl-nl """Plus petit n avec u0 py-str qpy-strpy-strn >= seuil (u0 > 0, q > 1)."""bksl-nl ...bksl-nlbksl-nl



Je comprends. Pourquoi les hypothèses u0 > 0 et q > 1 garantissent-elles l'arrêt ?