Comment afficher un calendrier de remboursement ? (en Python, avec Idle)

Le but du programme est d’afficher un calendrier avec:
– des dates d’échéance de remboursement
– un montant d’échéance
– et le solde à rembourser.

Fonctionne avec Python 3.8.1

Conçu avec IDLE (sous windows 10)

Références :

#!/usr/bin/python
import math  # on importe le module math
import datetime

# ce programme permet d'ajouter un mois à une date saisie
# on rentre un montant d'emprunt puis une mensualité souhaitée
# il calcule le nombre d’échéances principales ainsi qu'une échéance d'une mensualité différente si nécessaire
# merci à http://www.france-ioi.org/algo/course.php?idChapter=650&idCourse=2697 pour l'info sur les arrondis (floor) from math import *
# merci: https://www.dotnetperls.com/math-floor-python

print("Saisissez des valeurs cohérentes")
# -----------partie recup info utilisateur
ddate = input('Saisissez une date de début de prélèvement  JJ/MM/AAAA=')  # on recupere une date saisie au clavier au format indiqué
niemejour = input('Saisissez le nième jour du mois souhaité= ')
dduree=input('Saisissez la durée en mois ! =')
# ---ddate est un string ici ce qui empeche de la travailler avec datetime !


emprunt = int(input('Montant emprunté= '))
mensualitype = int(input('Mensualité type (arrondir au supérieur) ='))


# ------------------------partie traitement des échéances principales #et secondaires
ddate = ddate.split("/")  # alors on découpe cette date selon les slash; elle devient une liste

jour = ddate[0]  # le jour est egal à l'index zero de la liste ddate créée
mois = ddate[1]
annee = ddate[2]

# -------le format du mois doit etre sur un chiffre donc on se separe du zero devant ce chiffre
if mois[0] == "0":  # si l'index zero du mois est egal à zero alors...
    mois = mois.replace("0", "")  # ...on supprime le zero afin de pouvoir utiliser...

if jour[0] == "0":  # ...la formule a = datetime.datetime(2009,6,8) qui permet des manipulations
    jour = jour.replace("0", "")

# -------
jour = int(jour)
mois = int(mois)
annee = int(annee)
boucl = 0
b = datetime.datetime(annee, mois, jour, 0, 0)  # b est une date manipulable desormais
dduree = emprunt / mensualitype
ddureeArrondi = math.floor(dduree)  # un arrondi particulier sur le nombre d'échéances

bbis=datetime.datetime(annee, mois, jour, 0, 0)# permet d'avoir accès à la date saisie au debut sans etre contraint par le traitement
# de b'
# -----------------------------LA BOUCLE !
if dduree > ddureeArrondi: # ça veut dire qu'il y a une première échéance
    # boucle sur le nombre de mois choisi pour le prélèvement
    b = b + datetime.timedelta(30, 5)  # on ajoute la moyenne du nombre de jour d'un mois
    l = b.strftime('%d-%m-%Y')  # on lui donne un nouveau format
    l = l[2:10]  # on retire les deux premiers caractères et on garde jusquà la fin
    l = str(l)
    niemejour = str(niemejour)
    l = niemejour,l  # on place le nieme jour choisi juste devant le texte restant. C'est cet objetc qu'il.....
    # ....faudra récupérer si on veut l'associer à une somme en euro
    # -------------debut ici la boucle sur le calcul du solde à payer
    premEcheance = emprunt - (ddureeArrondi * mensualitype)
    solde = emprunt - premEcheance
    l = l, premEcheance,solde
    
    print("il faudra une échéance à", premEcheance, " euros et ", ddureeArrondi, " échéances à ", mensualitype, " euros")
    print("jj-mm-aaaa--€€--Solde")
    while boucl < ddureeArrondi:
        # ------ traitement de la premiere echeance
        bbis = bbis + datetime.timedelta(30, 5)
        bbis=bbis.strftime('%d-%m-%Y')        
        bbis=bbis[3:10]
        bbis=str(bbis)
        firstEche="%s-%s--%s--%s"% (niemejour,bbis,premEcheance,solde)
        print(firstEche)
        # ------ fin traitement de la premiere echeance
        while boucl < ddureeArrondi:
            # boucle sur le nombre de mois choisi pour le prélèvement
            b = b + datetime.timedelta(30, 5)  # on ajoute la moyenne du nombre de jour d'un mois
            l = b.strftime('%d-%m-%Y')  # on lui donne un nouveau format
            #l = b  # on cree un nouvel objet
            l = l[2:10]  # on retire les deux premiers caractères et on garde jusquà la fin
            #print(type(l),type(str(niemejour)))
            l=str(l)
            niemejour=str(niemejour)
            l = niemejour,l  # on place le nieme jour choisi juste devant le texte restant. C'est cet objetc qu'il.....
            # ....faudra récupérer si on veut l'associer à une somme en euro
            l=''.join(l)
            solde=solde - mensualitype
            z="%s--%s--%s"% (l,mensualitype,solde)
            boucl += 1
            print(z)
else:
    print("il faudra ", dduree, " échéances à", dduree, " euros")
    # boucle sur le nombre de mois choisi pour le prélèvement
    b = b + datetime.timedelta(30, 5)  # on ajoute la moyenne du nombre de jour d'un mois
    l = b.strftime('%d-%m-%Y')  # on lui donne un nouveau format
    #l = b  # on cree un nouvel objet
    l = l[2:10]  # on retire les deux premiers caractères et on garde jusquà la fin
    # print(type(l),type(str(niemejour)))
    l = str(l)
    niemejour = str(niemejour)
    l = niemejour,l  # on place le nieme jour choisi juste devant le texte restant. C'est cet objetc qu'il.....
    # ....faudra récupérer si on veut l'associer à une somme en euro
    # -------------debut ici la boucle sur le calcul du solde à payer
    premEcheance = emprunt - (ddureeArrondi * mensualitype)
    solde = emprunt - premEcheance
    l = l, premEcheance,solde
    
    print("il faudra une échéance à", premEcheance, " euros et ", ddureeArrondi, " échéances à ", mensualitype, " euros")
    print("jj-mm-aaaa--€€--Solde")
    while boucl < ddureeArrondi:
        # boucle sur le nombre de mois choisi pour le prélèvement
        b = b + datetime.timedelta(30, 5)  # on ajoute la moyenne du nombre de jour d'un mois
        l = b.strftime('%d-%m-%Y')  # on lui donne un nouveau format
        l = l[2:10]  # on retire les deux premiers caractères et on garde jusqu'à la fin
        l=str(l)
        niemejour=str(niemejour)
        l = niemejour,l  # on place le nieme jour choisi juste devant le texte restant. C'est cet objetc qu'il.....
        # ....faudra récupérer si on veut l'associer à une somme en euro
        l=''.join(l)
        solde=solde - mensualitype
        z="%s--%s--%s"% (l,mensualitype,solde)
        boucl += 1
        print(z)