IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Autre proposition de résolution?


Sujet :

Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Par défaut Autre proposition de résolution?
    Bonjour, je commence tout juste avec Python et avec la programmation en général.

    j'aurai voulu avoir vos avis sur cet exercice que j'ai pu trouver dans le livre écrit par M Swinnen: "Écrivez un programme qui calcule les intérêts accumulés chaque années pendant 20 ans par capitalisation d'une somme de 100€ placée en banque à i=4,3%."

    Voilà comment j'ai procédé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> i=0.043
    >>> a=100
    >>> x,y=a*i,a*i
    >>> t=1
    >>> while t<=20:
    	print "intérêts","année",t,"=",y
    	t=t+1
    	x,y=y,y+(a*i)
    Cela marche, mais est-il possible de résoudre cela autrement?

  2. #2
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    oui, c'est très possible, en fait en procédant à un petit raccourcissement du code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    interet=0.043
    capital=100
    for annee in range(20): #range(20) nous retourne une liste de 20 entiers partant de 0 et allant jusqu'a 20 non inclut donc 19
        capital*=interet #équivaut à capital=capital*interet
        print 'capital au bout de %i annees'%annee+1
    On pourrait en faire un fonctio aussi, mais tu verras ça un peu plus tard dans le bouquin...

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Je ne peux pas m'empêcher de faire remarquer que la question (de Swinnen, si elle est bien rapportée) est mal posée.

    «LES intérêts ACCUMULÉS CHAQUE année»
    Il y a plusieurs intérêts qui puissent être accumulés dans une année donnée ?
    Ça veut dire quoi ?

    Que faut il donner comme résultat ?
    - La liste des intérêts annuels sur 20 ans, c'est à dire pour chacune des 20 années l'intérêt qu'a produit le capital sur cette année ?
    - Ou la liste des intérêts cumulés sur 20 ans, c'est à dire pour chacune des 20 années l'intérêt produit par le capital depuis le début de la période de 20 ans ?
    - Ou l'intérêt final au bout de 20 ans ?

    Ceci dit, on peut décider soi même de ce qu'on veut calculer, mais il faut tenir compte de l'énoncé:
    «.. par capitalisation...»
    http://www.intellego.fr/soutien-scol...-interets/1941
    Capitalisation, cela veut dire qu'à l'expiration de chaque année N, quand les intérêts sont produits (c'est à dire en fait LA somme qui est appelée les intérêts... sic), ils ne sont pas retirés mais ils sont considérés comme du nouveau capital, ce qui veut essentiellement dire que les intérêts de l'année N+1 seront calculés sur la base du capital du début de l'année N augmenté des intérêts de l'année N.
    On parle alors d'intérêts composés.
    Or tu calcules des intérêts simples.

    Tu affiches les valeurs de t et y.
    x prend la valeur de y et c'est tout
    À quoi sert x ?

    Personnellement, j'appelerais taux le taux, au lieu de i (qui fait penser à intérêt),
    ci (capital initial), au lieu de a (qui fait penser à année)
    et a (année) au lieu de t.

    Pour ma part, j'utilise while quand la variable dont dépend l'arrêt est recalculée au sein de chaque tour de la boucle while et n'est pas connue avant d'y entrer.
    Dans les cas où le nombre de tours est connu ou calculable avant d'entrer dans la boucle, j'utilise plutôt for.
    Ici c'est très simple, on sait que c'est sur 20 ans, donc usage d'un Tu pourras être aussi intéressé par
    http://www.diveintopython.org/native...g_strings.html


    Sur la solution de N.tox

    - il manque des parenthèses autour de annee+1
    - il manque l'affichage de la valeur de capital !!
    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    capital*=interet
    # signifie
    capital = capital * interêt
    Mais utilisée telle quelle, cette formule ne donne pas la bonne revalorisation du capital dans une épargne par capitalisation. La bonne est

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Par défaut
    Merci pour vos réponses.

    En fait, dans le livre de Swinnen, lorsque cet exercice est proposé, l'utilisation du "for" n'a pas encore été introduite. Seuls if, else, elif et while ont fait l'objet d'explication.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 7
    Par défaut
    salut ,

    j'ai procédé comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    # Écrivez un programme qui calcule les intérêts accumulés chaque année 
    # pendant 20 ans, par capitalisation d'une somme de 100 euros placée 
    # en banque au taux fixe de 4,3 %
     
    capital = 100
    taux = 0.043
    an = 0
     
    while an < 20 :
     
    	an = an + 1 # à chaque boucle , incrément de "an" + 1
    	capNew = capital * taux # ajoute 4.3% d'interet à son capital
    	capital = (capital + capNew) # calcul du nouveau capital avec interet
    	intAn = capital - 100
     
    	print ("année " , an ," interêt cumulé de  = " , intAn , " € ")
    C'est vrai que l'énoncé n'est pas très clair. Donc j'ai calculé le total d'interêt / an à 4.3% chaque année :

    année 1 : 100 + 4.3% = 104.3
    année 2 : 104.3 + 4.3% = 108.7849

    etc , puis j'ai soustrais le capital de base pour connaitre l'interet / an

    d'ailleurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while an < 20 :
     
    	an = an + 1 # à chaque boucle , incrément de "an" + 1
    	capNew = capital * taux # ajoute 4.3% d'interet à son capital
    	capital = (capital + capNew) # calcul du nouveau capital avec interet
    	intAn = capital - 100
    ne donne pas le même résultat que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while an < 20 :
     
    	an = an + 1 # à chaque boucle , incrément de "an" + 1
    	capNew = capital * taux # ajoute 4.3% d'interet à son capital
    	capital = (capital + capNew) -100 # calcul du nouveau capital avec interet
    et ça j'ai du mal à comprendre. Obligé d'initialiser une autre variable pour obtenir ce que je voulais.

    Edit : le corrigé de l'exercice n'existe pas dans le livre en ligne ( http://python.developpez.com/cours/a...ge=page_22#L22)

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Salut,

    Citation Envoyé par piedroidor Voir le message
    C'est vrai que l'énoncé n'est pas très clair.
    Le but de l'exercice est de vous faire faire une boucle while pour construire une suite Un+1 = f(Un)
    Mais Python n'est pas un langage qui permet d'écrire cela littéralement - enfin il y a quand même des bibliothèques qui permettent de ... mais ce n'est pas le sujet -.
    Le compteur n, n+1 est joué par la variable "an" qu'on incrémente à chaque "tour".
    La valeur de Un est stocké dans "capital".

    L'histoire du calcul d'intérêt sur 20 ans n'est que pour vous aider à y raccrocher quelque chose de concret.
    Le débutant lambda n'ira pas se prendre le chou avec les "intérêts accumulés".
    Celui qui a un peu de formation financière va hurler de voir des termes aussi mal traduits.
    Ca n'a pas grande importance, le but est de programmer cette suite pour se familiariser avec cette structure de boucle.
    note: vous donner à faire de vrais calculs financiers est encore prématuré, et la boîte ne va pas fermer si votre code sort des calculs faux: relax!

    Citation Envoyé par piedroidor Voir le message
    d'ailleurs :

    ...CODE...

    ne donne pas le même résultat que

    ...CODE...

    et ça j'ai du mal à comprendre. Obligé d'initialiser une autre variable pour obtenir ce que je voulais.
    De toutes façons, si dans un cas vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
             capital = (capital + capNew) # calcul du nouveau capital avec interet
    et dans l'autre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
             capital = (capital + capNew) - 100 # calcul du nouveau capital avec interet
    Il y a peu de chances pour que çà donne le même résultat.
    Le soucis est de lire le commentaire, le code n'est pas encore assez familier pour que vous sachiez "valider" que çà fait bien ce que vous voulez.
    Pire, vous pouvez lire le truc 10 fois et passer à côté.

    Il n'y a que des heures de pratique à la console pour se familiariser un peu avec tout çà.
    Bonne continuation

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 7
    Par défaut
    merci

  8. #8
    Membre actif Avatar de Zembla
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 95
    Par défaut
    moi j'ai fait ça (en utilisant les notions vus au moment de l'exo (boucle while)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    i=0
    taux = 4.3
    while(i<20):
      i=i+1
      capital = 100
      cumul = round(capital+capital*((taux/100)*(i)),2)
      total_cumul = cumul - capital
      print("capital : ",cumul, " / cumul d’intérêt : ", round(total_cumul,2))
    désolé d'avoir déterré ce post mais comme je n'ai pas vu dans le livre de Swinnen le corrigé de cet exercice

    en tout cas le livre de Swinnen est excellent dans sa pédagogie

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Zembla Voir le message
    désolé d'avoir déterré ce post mais comme je n'ai pas vu dans le livre de Swinnen le corrigé de cet exercice
    Ce n'était pas vraiment la peine vu que piedroidor a déjà donné une solution. En plus ton calcul est faux. Dans un calcul de capitalisation (le terme est indiqué dans le premier post), les intérêts de l'année N sont inclus dans le capital pour eux-même produire des intérêts à l'année N+1, ce que tu ne fais pas. Et ta variable "total_cumul" ne totalise rien (son nom n'est donc pas en adéquation avec son rôle).

    Maintenant même sans parler de la validité du calcul (faut-il/ne faut-il pas réinclure le capital et de toute façon ce n'est qu'un exercice de style) d'un point de vue Python pur, à quoi servent les parenthèses autour de "taux/100"? autour de "taux/100*i"?? et tant qu'à faire autour de "i<20"...??? (avec le pompon que sont ces parenthèses autour de "i" tout seul !!!)
    Donc voilà, merci de ton essai mais il ne casse pas des briques et ne méritait certainement pas un déterrage de topic.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Membre actif Avatar de Zembla
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 95
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Ce n'était pas vraiment la peine vu que piedroidor a déjà donné une solution. En plus ton calcul est faux. Dans un calcul de capitalisation (le terme est indiqué dans le premier post), les intérêts de l'année N sont inclus dans le capital pour eux-même produire des intérêts à l'année N+1, ce que tu ne fais pas. Et ta variable "total_cumul" ne totalise rien (son nom n'est donc pas en adéquation avec son rôle).

    Maintenant même sans parler de la validité du calcul (faut-il/ne faut-il pas réinclure le capital et de toute façon ce n'est qu'un exercice de style) d'un point de vue Python pur, à quoi servent les parenthèses autour de "taux/100"? autour de "taux/100*i"?? et tant qu'à faire autour de "i<20"...??? (avec le pompon que sont ces parenthèses autour de "i" tout seul !!!)
    Donc voilà, merci de ton essai mais il ne casse pas des briques et ne méritait certainement pas un déterrage de topic.
    Désolé d'avoir froissé tes yeux en postant cet horrible post mr Svear , mais je suis débutant en python et c'est un peu normal de faire des erreurs. Je n'ai pas repris la solution proposé plus haut parce que je voulais savoir si la solution que j'avais trouvé était valable. Je ne suis pas là pour copier bêtement des solutions mais pour avoir un peu d'aide. C'est bien de dire que les parenthèses sont inutiles etc, c'est mieux, surtout pour un jedi du python comme toi, d'expliquer pourquoi.


    Un peu moins de suffisance et un peu plus de modestie serait bienvenue. Avec ou sans pompon.

    Cordialement.

  11. #11
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Zembla Voir le message
    parce que je voulais savoir si la solution que j'avais trouvé était valable
    Pas tout à fait. Tu arrives en disant "j'ai déterré ce topic parce que je n'ai pas vu la solution dans le livre de Swinnen" ce qui ne change pas le fait qu'ici il y en a bel et bien une, même si tu ne veux pas l'utiliser. Maintenant si tu ne veux pas utiliser celle-ci tout en en cherchant une dans le livre de Swinnen ok mais ça semble quand-même assez contradictoire...

    Citation Envoyé par Zembla Voir le message
    C'est bien de dire que les parenthèses sont inutiles etc, c'est mieux, surtout pour un jedi du python comme toi, d'expliquer pourquoi.
    Je pensais ça inutile vu c'est expliqué dans le Swinnen en page 38 que tu dis l'avoir lu (paragraphe "Priorité des opérations"). Python applique les règles élémentaires de l'arithmétique. Les parenthèses servent à prioriser des opérations qui, sans elles, ne se feraient pas dans l'ordre voulu. Exemple (2+3)*4 où les parenthèses sont obligatoires si on veut effectuer l'addition, moins prioritaire que la multiplication, en premier. Donc déjà les parenthèses ne se justifient que s'il y a au minimum deux opérations dont une qui doit être à prioriser sur l'autre. Or dans (i) il n'y a pas d'opération donc i suffit (fallait-il vraiment te l'expliquer?). Et dans capital+capital*((taux/100)*i), la multiplication et la division étant déjà prioritaires sur l'addition, elle se feront de toute façon avant cette dernière et dans l'ordre naturel de lecture donc de gauche à droite. Donc capital+capital*taux/100*i suffit. Et enfin pour i < 20 il y a bien une opération mais il n'y en n'a qu'une seule donc qui n'a pas besoin d'être priorisée sur une autre vu qu'il n'y en n'a pas d'autre. Ceci dit, je t'accorderai le fait que dans le Swinnen, il y a aussi des parenthèses inutiles au premier exemple du while montré en page 48 (mais pas aux autres).

    Citation Envoyé par Zembla Voir le message
    Un peu moins de suffisance et un peu plus de modestie serait bienvenue. Avec ou sans pompon.
    C'est "seraient" parce que "moins de suffisance et un peu plus de modestie" c'est du pluriel...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Membre actif Avatar de Zembla
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 95
    Par défaut
    Et bien au moins j'ai eu une explication sur la distributivité et les règles de priorité ( que je connaissais, mais que je n'ai pas appliqué dans mon code) et le fait d'avoir mis trop de parenthèses dans mon code.

    Si j'ai déterré ce post, c'est que je suis en plein dans le livre de Swinnen , que le corrigé de cet exo n'est pas donné et qu'en tapant dans google ,on atterrit sur celui-ci.

    Cordialement.

  13. #13
    Membre actif Avatar de Zembla
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 95
    Par défaut
    voila mon code , pour un calcul d’intérêt simple
    pouvez vous me dire si il y a des erreurs ?merci à tous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    i=0
    taux = 4.3
    capital = 100
    print("capital initial : ",capital)
    print("")
    while(i<20):
      i=i+1  
      cumul = round(capital+capital*taux/100*i,2)
      total_interet = cumul - capital
     
      print( " / cumul d’intérêt :  année ",i," = ", round(total_interet,2))
    print("capital + interet = ", capital+total_interet )
    cordialement

  14. #14
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Zembla Voir le message
    pouvez vous me dire si il y a des erreurs ?
    Il n'y a pas d'erreur puisque le code fonctionne et donne le bon résultat (finalement ce n'est qu'une bête table de multiplication)
    Maintenant tu écris cumul=capital + X puis en dessous total_interet=cumul - capital. Peut-être qu'une intelligente substitution te montrera alors comment ça peut se simplifier...

    Accessoirement, les règles de ponctuation du français peuvent aussi s'appliquer pour la ponctuation dans Python => print(" / cumul d’intérêt : année ", i, " = ", round(total_interet, 2)) ce n'est pas plus... rafraichissant?
    Après quand tu verras le formatting des chaines tu pourras l'écrire plus facilement :
    print(" / cumul d’intérêt : année %d = %.2f" % (i, total_interet)).
    print(" / cumul d’intérêt : année {0} = {1:.2f}".format(i, total_interet)).
    print(f" / cumul d’intérêt : année {i} = {total_interet:.2f}").
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  15. #15
    Membre actif Avatar de Zembla
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 95
    Par défaut
    merci pour les explications

    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Résolut]Passer un objet d'une page à une autre
    Par toun1988 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 04/11/2008, 00h21
  2. Réponses: 17
    Dernier message: 05/12/2007, 17h56
  3. Tester site sous une autre résolution
    Par black-out dans le forum Webdesign & Ergonomie
    Réponses: 2
    Dernier message: 05/02/2007, 10h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo