Mon programme python ne marche pas

Résolu/Fermé
Mano272520 Messages postés 10 Date d'inscription lundi 4 novembre 2019 Statut Membre Dernière intervention 22 décembre 2021 - Modifié le 4 nov. 2019 à 20:32
Mano272520 Messages postés 10 Date d'inscription lundi 4 novembre 2019 Statut Membre Dernière intervention 22 décembre 2021 - 4 nov. 2019 à 21:01
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

_Ritchi_ Messages postés 21210 Date d'inscription samedi 17 mars 2007 Statut Contributeur Dernière intervention 20 avril 2024 6 058
4 nov. 2019 à 19:46
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
Mano272520 Messages postés 10 Date d'inscription lundi 4 novembre 2019 Statut Membre Dernière intervention 22 décembre 2021
4 nov. 2019 à 19:53
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
Mano272520 Messages postés 10 Date d'inscription lundi 4 novembre 2019 Statut Membre Dernière intervention 22 décembre 2021
4 nov. 2019 à 19:58
0
_Ritchi_ Messages postés 21210 Date d'inscription samedi 17 mars 2007 Statut Contributeur Dernière intervention 20 avril 2024 6 058
4 nov. 2019 à 20:26
OK et donc ton souci est lequel ? Serait-ce que ton code n'affiche rien ?
0
Mano272520 Messages postés 10 Date d'inscription lundi 4 novembre 2019 Statut Membre Dernière intervention 22 décembre 2021
4 nov. 2019 à 20:31
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
_Ritchi_ Messages postés 21210 Date d'inscription samedi 17 mars 2007 Statut Contributeur Dernière intervention 20 avril 2024 6 058
Modifié le 4 nov. 2019 à 20:36
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
_Ritchi_ Messages postés 21210 Date d'inscription samedi 17 mars 2007 Statut Contributeur Dernière intervention 20 avril 2024 6 058
4 nov. 2019 à 20:52
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
Mano272520 Messages postés 10 Date d'inscription lundi 4 novembre 2019 Statut Membre Dernière intervention 22 décembre 2021
4 nov. 2019 à 21:01
Je n'y manquerai pas. Merci beaucoup
0