Mon programme python ne marche pas

Résolu
Mano272520 Messages postés 11 Statut Membre -  
Mano272520 Messages postés 11 Statut Membre -
bonsoir. J'ai un devoir a faire en python mais je comprend pas pourquoi j'ai beau tout faire il fonctionne pas. Je suis presque au bord des larmes. est ce que quelqu'un pourrait m'aider rapidement s'il vous plait?
def impots(revenu, nb_part):
  "renvoie le montant de l'impot à payer en fonction des tranches d'impositions"
  #var
  revenu = 0 #int
  nb_part = 0.0  #float
  r = 0.0  #float
  qf = 0.0 #float
  impot = 0.0 #float
 
  #begin
  r = revenu-(revenu*0.1)
  qf = r / nb_part
  if qf < 9964 :
     impot = 0.0
  elif qf > 9964 and qf < 27516  :
    impot = (r*0.14) - (1394.96*nb_part)
  elif  qf > 27516 and qf< 73779 :
    impot = (r*0.3) - (5798*nb_part)
  elif qf> 73779 and qf< 156244 :
    impot = (r*0.41) - (13913.69*nb_part)
  else :
    impot = (r*0.45) - (20163.45*nb_part)
  return impot 

#...........................................................
def main():
   "demande la saisine du montant de revenu annuel et du nombre de part et affiche le montant de l’impôt à payer"
#begin
print ("veuillez saisir le montant du revenu")
revenu = int(input())
print ("veuillez saisir le nombre de parts")
nb_part = float(input())
print ("le montant de l'impot a payer est ", impots(revenu, nb_part))


l'exercice:

1. Écrire une fonction impots qui reçoit un revenu annuel entier revenu et un nombre de parts nb_part et qui renvoie le montant de l'impot sur le revenu à payer en fonction des diverses tranches d'imposition. Vous trouverez toutes les information sur le calcul de l'impot ici : https://impots.dispofi.fr/bareme-impot/calcul-impot-par-tranche.
2. Écrire une action principale main qui demande à l'utilisateur de saisir une montant de revenu annuel et un nombre de part, appelle la fonction impots et affiche un message indiquant le montant de l’impôt à payer.
Voici les tranches d'imposition pour 2019
Numéro de tranche
Fraction du revenu imposable
Taux d’imposition 1 jusqu’à 9 964 € 0 % 2 de 9 964 à 27 519 € 14 % 3 de 27 519 à 73 779 € 30 % 4 de 73 779 € à 156 244 € 41 % 5 Au-delà de 156 244 € 45 %

2 réponses

  1. _Ritchi_ Messages postés 21130 Date d'inscription   Statut Contributeur Dernière intervention   6 135
     
    Bonsoir,

    Deux choses:
    1- faire le copié/collé de ton code en indiquant que c'est du python: ainsi l'indentation sera respectée et on comprendra mieux ton code. Pour faire cela:
    - utilise le bouton suivant et choisit Python dans la liste déroulante:

    - fais le copié/collé de ton code entre les deux balises qui sont apparues:


    2- en lisant ton code, il semble que tu n'aies pas compris le principe des tranches d'imposition car tu ne fais pas l'addition des impôts dûs tranche par tranche. Je te fais donc un copié/collé du contenu du lien vers le site des impôts que tu as donné:

    Pour les revenus de 2019 (impôts 2020), les tranches de revenus et les taux d'imposition correspondants sont les suivants :
    La tranche de votre quotient familial comprise entre 0 € et 10 064 € n'est pas imposée
    La tranche de 10 064 € à 27 794 € est imposée à 14 %
    La tranche de 27 794 € à 74 517 € est imposée à 30 %
    La tranche de 74 517 € à 157 806 € est imposée à 41 %
    La tranche au-delà de 157 806 € est imposée à 45 %

    La somme des montants obtenus par tranche correspond à l'impôt brut de votre foyer fiscal pour une part de quotient familial.
    Exemple :

    Célibataire déclarant 31 000 € de salaires
    Salaires imposables = 27 900 € après déduction des 10 % pour frais
    Quotient familial = 27 900 € / 1 part = 27 900 €
    Taux marginal d'imposition = 30 %

    Le calcul de l'impôt se décompose comme suit

    De 0 € à 10 064 € = 10 064 € x 0 % = 0 €
    De 10 064 € à 27 794 € = 17 730 € x 14 % = 2 482,20 €
    De 27 794 € à 27 900 €= 106 € x 30 % = 31,80 €

    La somme des montants obtenus correspond à l'impôt brut, soit 2 514 €.


    Ritchi
    1
    1. Mano272520 Messages postés 11 Statut Membre
       
      def impots(revenu, nb_part):
        "renvoie le montant de l'impot à payer en fonction des tranches d'impositions"
        #var
        revenu = 0 #int
        nb_part = 0.0  #float
        r = 0.0  #float
        qf = 0.0 #float
        impot = 0.0 #float
       
        #begin
        r = revenu-(revenu*0.1)
        try:
         qf = r / nb_part
        except ZeroDivisionError:
         if qf < 9964 :
          impot = 0.0
         elif qf > 9964 and qf < 27516  :
            impot = (r*0.14) - (1394.96*nb_part)
         elif  qf > 27516 and qf< 73779 :
            impot = (r*0.3) - (5798*nb_part)
         elif qf> 73779 and qf< 156244 :
            impot = (r*0.41) - (13913.69*nb_part)
         else :
            impot = (r*0.45) - (20163.45*nb_part)
        
        return impot 
      
      
      #...........................................................
      def main():
         "demande la saisine du montant de revenu annuel et du nombre de part et affichele montant de l’impôt à payer"
      #begin
      print ("veuillez saisir le montant du revenu")
      revenu = int(input())
      print ("veuillez saisir le nombre de parts")
      nb_part = float(input())
      print ("le montant de l'impot a payer est ", impots(revenu, nb_part))



      Déjà merci de m'avoir répondu

      Par rapport au 2ème point j'ai compris le principe mais en cherchant sur le net j'ai trouvé une formule qui me permet de calculer directement donc j'ai préférer l'utiliser
      0
    2. _Ritchi_ Messages postés 21130 Date d'inscription   Statut Contributeur Dernière intervention   6 135
       
      OK et donc ton souci est lequel ? Serait-ce que ton code n'affiche rien ?
      0
    3. Mano272520 Messages postés 11 Statut Membre
       
      oui. Quand je rentre les valeurs du revenu et du nombre de part il m'affiche a chaque fois 0. Ca bloque quelque part, je pense qu'il n'exécute pas les formules que j'ai entré ou autre chose
      0
    4. _Ritchi_ Messages postés 21130 Date d'inscription   Statut Contributeur Dernière intervention   6 135
       
      Tout à fait
      Tu as défini la fonction main() mais tu ne l'appelles jamais...
      Note: tes calculs sont quand même faux ... d'où la division par zéro que tu rencontres
      0
  2. _Ritchi_ Messages postés 21130 Date d'inscription   Statut Contributeur Dernière intervention   6 135
     
    Bonsoir,
    Quand tu écris "def impots(revenu, nb_part)": tu définis cette fonction.
    Cette fonction impots() est appelée par la fonction main() que tu as défini avec "def main()".
    Mais cette fonction main(), dis moi où est-elle appelée dans le code que tu as écrit ?
    Réponse: nulle part !
    Donc il faut l'appeler et comme il est tard, je te donne une version qui marche et je te fais confiance pour l'étudier et comprendre tes erreurs:
    def impots(revenu, nb_part):
        # renvoie le montant de l'impot à payer en fonction des tranches d'impositions
        RN = 0
        impot = 0
        # tranches d'imposition
        tranche_1 = 9964
        tranche_2 = 27519
        tranche_3 = 73779
        tranche_4 = 156244
        # taux d'imposition
        taux_1 = 0.14
        taux_2 = 0.30
        taux_3 = 0.41
        taux_4 = 0.45
    
        # begin
        RN = revenu / nb_part
        if RN <= tranche_1:
            impot = 0
        elif tranche_1 < RN <= tranche_2:
            impot = (revenu * taux_1) - (1394.96 * nb_part)
        elif tranche_2 < RN <= tranche_3:
            impot = (revenu * taux_2) - (5798 * nb_part)
        elif tranche_3 < RN <= tranche_4:
            impot = (revenu * taux_3) - (13913.69 * nb_part)
        else:
            impot = (revenu * taux_4) - (20163.45 * nb_part)
    
        return impot
    
    
    def main():
        # demande la saisine du montant de revenu annuel et du nombre de part et affichele montant de l’impôt à payer"
    
    
        # begin
        print("veuillez saisir le montant du revenu")
        revenu = int(input())
        print("veuillez saisir le nombre de parts")
        nb_part = float(input())
        print("le montant de l'impot a payer est %d" % (impots(revenu, nb_part)))
    
    
    main()
    1
    1. Mano272520 Messages postés 11 Statut Membre
       
      Je n'y manquerai pas. Merci beaucoup
      0