Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Licence CC BY-NC-ND Thierry Parmentelat & Arnaud Legout Inria - UCA

Cet exercice, comme tous les autres, a pour but de vous faire travailler les notions vues dans la partie courante, mais aussi dans les cours précédents. Ainsi, même si le chapitre en cours concerne les boucles while, vous n’êtes pas tenu.e.s d’utiliser une boucle while pour résoudre le problème proposé ci-dessous.

Niveau basique

On se propose d’écrire une fonction taxes qui calcule le montant de l’impôt sur le revenu au Royaume-Uni.

Le barème est publié ici par le gouvernement anglais, voici les données de 2020 qui sont utilisées pour l’exercice :

TrancheRevenu imposableTaux
Non imposablejusque £12.5000%
Taux de base£12.501 à £50.00020%
Taux élevé£50.001 à £150.00040%
Taux supplémentaireau delà de £150.00045%

Donc naturellement il s’agit d’écrire une fonction qui prend en argument le revenu imposable, et retourne le montant de l’impôt, arrondi à l’entier inférieur.

from corrections.exo_taxes import exo_taxes
exo_taxes.example()
Loading...

Indice

Consigne

on ne doit pas trouver de nombre ‘en dur’ dans le code de la fonction; c’est-à-dire pour être bien explicite il s’agit de ne pas écrire quelque chose comme

if 0 <= income <= 12_500:
   ...

mais plutôt de définir par exemple

# c'est juste un exemple, par forcément une bonne idée hein...
TICKS = (12_500, 50_000, 150_000)
RATES = (20, 40, 45)

ou tout autre structure de données qui vous paraitra adaptée à décrire le barême, mais extérieure à la fonction proprement dite, pour qu’on puisse facilement réutiliser et/ou mettre à jour le code.

def taxes(income):
    # ce n'est pas la bonne réponse
    return (income-12_500) * (20/100)
exo_taxes.correction(taxes)
Loading...

Représentation graphique

Comme d’habitude vous pouvez voir la représentation graphique de votre fonction :

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
plt.ion()
<contextlib.ExitStack at 0x7f300410d190>
X = np.linspace(0, 200_000)
Y = [taxes(x) for x in X]
plt.plot(X, Y);
<Figure size 640x480 with 1 Axes>
# et pour changer la taille de la figure
plt.figure(figsize=(10, 8))
plt.plot(X, Y);
<Figure size 1000x800 with 1 Axes>