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 :
- merci à http://www.france-ioi.org/algo/course.php?idChapter=650&idCourse=2697 pour l’info sur les arrondis (floor)
- merci: https://www.dotnetperls.com/math-floor-python
#!/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)