Aller au contenu

TP Python – Intérêts, épargne et emprunt en Python

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

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 – Capital en intérêts composés

Écris capital_compose(c0, taux, n) qui renvoie le capital après n périodes au taux taux (en pour cent), arrondi à 2 décimales.

J'anticipe. Pour 10 000 € à 3 % sur 5 ans, quel résultat attends-tu ?

###
assert capitalpy-undcompose(10000, 3, 5) == 11592.74bksl-nlassert capitalpy-undcompose(5000, 4, 10) == 7401.22bksl-nlassert capitalpy-undcompose(1000, 0, 7) == 1000.0bksl-nlassert capitalpy-undcompose(800, 5, 0) == 800.0bksl-nlbksl-nl ∞/∞

def capitalpy-undcompose(c0, taux, n):bksl-nl """Capital apres n periodes, interets composes (taux en %), arrondi a 2 decimales."""bksl-nl ...bksl-nlbksl-nl



Exercice B – Épargne à versements réguliers

Écris epargne(versement, taux, n) qui renvoie le capital après n versements, effectués en fin de période, au taux taux (en pour cent) par période, arrondi à 2 décimales. Utilise une boucle : à chaque période, le capital est multiplié par \(1 + t\) puis on ajoute le versement.

J'anticipe. Pour 1 000 € par an, 4 %, 5 ans, quel résultat attends-tu ?

###
assert epargne(1000, 4, 5) == 5416.32bksl-nlassert epargne(200, 0.25, 12) == 2433.28bksl-nlassert epargne(500, 0, 4) == 2000.0bksl-nlassert epargne(100, 3, 0) == 0.0bksl-nlbksl-nl ∞/∞

def epargne(versement, taux, n):bksl-nl """Capital apres n versements en fin de periode (taux en %), arrondi a 2 decimales."""bksl-nl ...bksl-nlbksl-nl



Je comprends. Compare avec la formule du cours : pourquoi les deux méthodes donnent-elles le même résultat ?

Exercice C – Mensualité d'un emprunt

Écris mensualite(capital, taux, n) qui renvoie la mensualité d'un emprunt de capital euros remboursé en n mois au taux mensuel taux (en pour cent), arrondie à 2 décimales. Si le taux est nul, la mensualité est capital / n.

J'anticipe. Pour l'exercice 3 (12 000 €, 0,5 %, 24 mois), quelle mensualité attends-tu ?

###
assert mensualite(12000, 0.5, 24) == 531.85bksl-nlassert mensualite(1200, 0, 12) == 100.0bksl-nlassert mensualite(10000, 1, 12) == 888.49bksl-nlassert mensualite(5000, 0.25, 10) == 506.9bksl-nlbksl-nl ∞/∞

def mensualite(capital, taux, n):bksl-nl """Mensualite constante (taux mensuel en %), arrondie a 2 decimales."""bksl-nl ...bksl-nlbksl-nl



Exercice D – Capital restant dû

Écris capital_restant(capital, taux, n, k) qui renvoie le capital restant dû après k mensualités (0 <= k <= n), arrondi à 2 décimales. Calcule la mensualité exacte (non arrondie) puis applique K = K * (1 + t) - M k fois.

J'anticipe. Quel capital restant dû attends-tu après 0 mois ? après n mois (aux arrondis près) ?

###
assert capitalpy-undrestant(12000, 0.5, 24, 0) == 12000.0bksl-nlassert capitalpy-undrestant(12000, 0.5, 24, 1) == 11528.15bksl-nlassert capitalpy-undrestant(12000, 0.5, 24, 3) == 10577.37bksl-nlassert abs(capitalpy-undrestant(12000, 0.5, 24, 24)) < 0.01bksl-nlassert capitalpy-undrestant(1200, 0, 12, 6) == 600.0bksl-nlbksl-nl ∞/∞

def capitalpy-undrestant(capital, taux, n, k):bksl-nl """Capital restant du apres k mensualites (taux mensuel en %), arrondi a 2 decimales."""bksl-nl ...bksl-nlbksl-nl



Je comprends. Pourquoi le test final utilise-t-il abs(...) < 0.01 plutôt qu'une égalité ?

Exercice E – Quand le disque est-il plein ?

Un volume u0 (en Go) augmente chaque mois de taux % puis de ajout Go. Écris mois_stockage_plein(u0, taux, ajout, capacite) qui renvoie le premier mois \(n\) tel que \(u_n \ge\) capacite (avec ajout > 0).

J'anticipe. Pour 200 Go, 10 %, 50 Go et 1 000 Go, quel mois attends-tu (exercice 4) ?

###
assert moispy-undstockagepy-undplein(200, 10, 50, 1000) == 8bksl-nlassert moispy-undstockagepy-undplein(1000, 10, 50, 1000) == 0bksl-nlassert moispy-undstockagepy-undplein(100, 0, 25, 200) == 4bksl-nlassert moispy-undstockagepy-undplein(10, 100, 1, 100) == 4bksl-nlbksl-nl ∞/∞

def moispy-undstockagepy-undplein(u0, taux, ajout, capacite):bksl-nl """Premier mois n avec upy-undn >= capacite, upy-und{n+1} = upy-undnpy-str(1+taux/100) + ajout."""bksl-nl ...bksl-nlbksl-nl



Je comprends. Quel est le variant de ta boucle ? Pourquoi ajout > 0 garantit-il l'arrêt ?