# ------------------------------------------------------------------------------------ # Calcul d'un échéancier d'emprunt # 12/2023 (Python) # Infos : https://www.auditsi.eu/?p=12153 # ------------------------------------------------------------------------------------ # Ecrit initialement en basic (2012) sous FreeBASIC (cf https://www.auditsi.eu/?cat=1207) # Bibliothèques externes import locale #définit la configuration régionale d'un programme (nombres décimaux par exemple) from tabulate import tabulate # nécessite une installation : pip install tabulate # Configure Python pour utiliser les paramètres régionaux (séparateur décimal, séparateur de milliers...) par défaut du système d'exploitation locale.setlocale(locale.LC_ALL, '') # Variables emprunt année interet_periode = 0 capital_periode = 0 # Saisie des paramètres de l'emprunt print("Calcul d'un échéancier d'emprunt") print() capital = float(input("Capital emprunté : ")) duree = int(input("Durée de l'emprunt en années : ")) taux = float(input("Taux annuel : ")) # Calcul et affichage de la mensualité taux /= 100 mens = (capital * taux / 12) / (1 - (1 + taux / 12) ** -(duree * 12)) print(f"Mensualité : {locale._format('%.2f', mens)}") # Calcul, affichage et enregistrement de l'échéancier capital_restant = capital # Définition de la table de données emprunt table_emprunt = [] # En-tête du tableau d'emprunt headers = ["Mois", "Capital restant", "Intérêts", "Capital remboursé", "Capital restant"] # Boucle de calcul de l'échéancier for i in range(1, duree * 12 + 1): interet = capital_restant * taux / 12 capital_remb = mens - interet # Constitution de l'échéance en cours (i) ligne_echeance = [i, locale._format('%.2f', capital_restant), locale._format('%.2f', interet), locale._format('%.2f', capital_remb), locale._format('%.2f', capital_restant - capital_remb)] # Ajout de la ligne dans le tableau table_emprunt.append(ligne_echeance) # MAJ du capital restant à rembourser en fin de période capital_restant -= capital_remb # MAJ des totalisations annuelles interet_periode += interet capital_periode += capital_remb # Dernière échéance de l'année (divisible par 12) if i % 12 == 0: # Affichage des échéances de l'année (sous forme d'un tableau) print(tabulate(table_emprunt, headers=headers, tablefmt="fancy_grid")) # Affichage des totaux de l'année print(f"Total année {i // 12} {'-'*60}") print(f"Intérêts de la période : {locale._format('%.2f', interet_periode)}") print(f"Capital de la période : {locale._format('%.2f', capital_periode)}") print('-' * 75) # RAZ des totalisations de l'année interet_periode=0 capital_periode=0 # RAZ du tableau pour traitement de l'année suivante table_emprunt = []