Calcul des pensions de retraite

Le montant de la retraite à taux plein est donné par la relation :

\(pension = \frac {trimestres\_cotisés}{trimestres\_attendus} \times 50\% \times salaire\_moyen\)

Le but de cet exercice est de créer une application qui puisse déterminer le montant d'une pension à partir d'une carrière donnée.

Une carrière est représentée par un tableau de couples (année, salaires).

Par exemple, une carriére sur trois ans :

🐍 Script Python
carriere_courte =  [(2009, 1690), (2010, 520), (2011, 35000), (2012, 25000)]

Nombre de trimestres cotisés

Un trimestre est cotisé quand les salaires annuels atteint \(150\) fois le SMIC horaire, avec un maximum de \(4\) trimestres cotisés sur un an.

Exemples

Prenons un SMIC horaire de \(10\) €.

  • Si une année, j'ai perçu \(1000\) €, je n'aurais cotisé aucun trimestre.
  • Si une autre année, j'ai percu \(3000\) € soit \(300\) fois le SMIC horaire, j'aurais cotisé deux trimestres.
  • Si maintenant, j'ai percu \(15000\) € soit \(1500\) fois le SMIC horaire, je n'aurais pas cotisé \(10\) trimestres, mais le maximum de \(4\) trimestres.
Calcul du nombre de trimestre annuel

Ecrire la fonction trimestres_sur_un_an qui prend en paramètres un montant de salaires annuels et le montant du SMIC horaire et qui renvoie le nombre de trimestres cotisés.

>>>  trimestres_sur_un_an(100, 10)
0
>>>  trimestres_sur_un_an(3000, 10)
2
>>>  trimestres_sur_un_an(15000, 10)
4

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013s3o_;8bcdufvgU/0lyq n7apSr1meh,(P2=4:twki95R*)6050j0D0M0x0P0r0b0u0i0r0x0b0b0J010M0P0y010406050b0k0C0C0x0A0s040z0d0r0k0:0d0v0u020x0C0y0f0u0S0D0}0A0t0k0D0b050p0`0|0~100^0y041o1v051y0p1y1A1v0^0j0P0m0(0*0,0.0E0P0n0E0r1O0E0M0?050Z0h0r0D1J0+0-011N1P1R1P0M1X1Z1V0M0h0d0j101W0A1w0M0E0(130b0y0x0v0.0I011#1L010l0#0D0v1b0D1V2022271%2a1Z2d0C2f040a0u0H0A0d0y0d0b0P16180X1~0A0A0D0i2A1o2h0v1w0p1|2M0M1`1_1{0j2j0.1R0v2c2x1V1G1I0)1$2W0P2Y0v1?1H1V0y2F1w2K2M2@0_21182(282-0A0}0r0?0u0B2J2{0@2`2i2}1%2 31330I3622382K2V013d0x32040u0c3h2L0^3k3b0.3n3p0u0K3t3j2{3l3z330R3D3v3F3x3m0d303o330V3K392|1K3c3P3e3q0w3U3w3X3y3Z3R3q0g3%3M3)3O3Q3A0Q3/3a3;3H040B0q3_3W2)3=3!0B351p371x2=1o2$2P0j2T3l0i1?2p0W1H1w2;0D2?48473i054h0X4p3`420O0?0X0l3D3V3l0N334D3(420v0l0?2Q0P2o0b2Q1m0e0`0A0e0k0v0e224I3:420=040G4$4x2~0?2F0C4Y0D0A0x2I4r2L4E3N4)0F3D0u4|3{0?0b0C0P0i4,41284)0U0L3K0u5g514J284z040P4C4`3q524K4/1h4=4@4_2@5i4%280d0?020r0M0f505r28560?0B0R3 5p5z4-1%5C040T5I5j3c5456585p5J1%4)5e5p065h5.5R5a1%5l2F0M0k0A0v5X5A1%5L045P2@5-5h5(0.5l0D1R5o5y653m5t4;2Y5w0P175|5S0.5U5E5G6k5;0.5 3g5Q6c5U5W6v5Y6s0P5M5O6q3l6x6F3N0v5!57593l5*5f5/5g6c5?0Y5_5{6z5}6B5M6Q6S6A0167696I53044:5v4^6i6X6b6(6n5F5H6Y6l015 3s6|6r016H713l5 5N61375:6G0?6y6@6Z6d04556M5%6(6P5,6R6%7g6U5^5`6,426t6$7b3N6*5n7v4.6.5u6g6;6j753N6_6p7K3;5 3C7O42747f6}776E7S5B7d7D5Z7i5#6N4}0?5+627p7z3;7s6W7$6!04707.646(6*0b0D7*3;7n7{6R6T5t7t6?7a6c7Q3U0p4u4o498g0p4c1o0M4e8l2R2N1=1@2P0x1Y8i4c1u4w724:0e0l0x0O0D0e0E0c0?1g1i1k1m0u7-4q1E1z040o180x152F0u0b13156=0u0y140%4@0y0P2C5+8S2$3l1)1Q1S1U8z3l2l2c2e0?2r0z0i0A0;0M2s0s1|7J2_4n8z2^488f8|7A4A0D6a486(4G5q7l7g4L4N954Q4S0b4!0v0v1l0r814(0?4+9r6}6K7F6f4?7I894s7m0?4 7Z7%7j5$2_9R045d7y6c9K0v0h0e4O9w2F1n9U6m0?0J7@7h6/7H5x8a6^0?0p0p9@4)9H9Y7g7X793i7:7T7#9:7h9W9E5b0?0U9$7}877?ac9)0?569P4{9Za39na56C047Ra46}4~9@9(9*9,1m9xaf5)ah8d9h8h2M8x4b0Y0!0$04.
Calcul du nombre total de trimestres

Il est à noter que le SMIC horaire varie chaque année. Le dictionnaire VALEURS_SMIC associe pour chaque année de \(1980\) à \(2024\) la valeur du SMIC horaire correspondant.

Exemple
>>> VALEURS_SMIC[2019]
10.03

Ecrire la fonction trimestres_carriere qui prend en paramètre un tableau de couples et qui renvoie le nombre de trimestres cotisés sur l'ensemble de la carrière.

>>> carriere_courte =  [(2009, 1690), (2010, 520), (2011, 35000), (2012, 25000)]
>>> trimestres_carriere(carriere_courte)
9
Fonction fournie

Une version de la fonction trimestres_sur_un_anest déjà chargée en mémoire.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013s3o_bcdufvgUMI/0ly nAapSr1LmeR,(P2=4:+VCtwki][5hE)050h0D0P0w0S0r0b0t0g0r0w0b0b0J010P0S0x010406050b0i0C0C0w0z0s040y0d0r0i0?0d0u050p0}0 11130{0x041c1j051m0p1m1o1j0{0h0S0k0+0-0/0;0W0S0l0W0r1C0W0P0_050$0f0r0D1x0.0:011B1D1F1D0P1L1N1J0P0f0d0h131K0z1k0P0W0+160b0x0w0u0;0I011P1z010j0(0D0u0w0C0D1J1;1?1{1R1~1N21230_0a0t0H0z0d0x0d0b0S190u0t0!1/0z0z0D0g2o1c260u1k0p1-2B0P1+1*1,0h280;1F0u202l1J1u1w0,1Q2L0S2N0u1%1v1J0x2u1k2z2B2)0|1=2p2T1|2Y0z100r0_0A2y2-0`2,272/1R2;2?0_0I2`1?2|2z2K01310w2@040c352A0{382 0;3b3d0K3g372-393m0_0V3p1l2%1c2R2E0h2I390g1%241k3A1n3y2+1d2{053F0!2(3r3k010R0_0!0j3w3j1y1R0Q0_0t3!3T3$3l0j0_2F0S230b2F0D0b0e0g110z0S0D2u3+2~3-010^040G422.440u0_3|2t3 413N362}4a2U450_0Y0L3p060t4t3*3#4m4c040u0f0e3;3?3^0b3p4v3,4m0d0_0J4H4k390C0S0_0q4r4u4I434m3W040j0d0z4O4w2:0_1?2N0D4939460F4)4J4+042u0C0i2N0z0w2x4i2A4X4l1|0d3(042W4@4Y4_4e3~404/523S5c1R464q5i4s4W4u4P3U4y4A4C3~4E2u4G5i54394L040M4N5B5s4b3:5x3_4F0e0}0z0e4}0e1?4:3U46485i5J4x0_4{4}40500S1a5W444=5b55300_0N0v0B0X0m0E0y0e0y0n0o0O5.4m460U644_4-0D5h2+4*5l0_0T0Y4V5r6e0;4!2u0P0i0z1b5I6l3a0_5v4D5N5z4r1c3Q0D2B2$6E3z1v3B2E2G2C1$1(2E0w1M6H0p3A0{6U0#0%0)04.

Salaire annuel moyen brut

La pension de retraite se calcule d'aprés le salaire annuel moyen brut, qui est la moyenne des \(25\) meilleures années de la carrière.

Si la carrière comporte moins de \(25\) ans, la moyenne se calcule sur les années effectuées.

Bien qu'une carrière soit souvent linéaire, les \(25\) meilleures années ne sont pas forcément les \(25\) dernières.

Classement des années

On souhaite trier en place le tableau pour que les \(25\) dernières années soit également les \(25\) meilleurs.

Compléter la procédure tri_annees qui prend en paramètre un tableau de couples et le modifie pour le trier par ordre croissant des salaires annuels.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013s3o_8;bcdufvg/0ly n7apSr1me,(P2=4:+jtwki9][5h)6050j0B0L0v0O0q0b0s0i0q0v0b0b0G010L0O0w010406050b0k0A0A0v0y0r040x0d0q0k0:0d0t050o0`0|0~100^0w04191g051j0o1j1l1g0^0j0O0m0(0*0,0.0T0O0n0T0q1z0T0L0?050Z0h0q0B1u0+0-011y1A1C1A0L1I1K1G0L0h0d0j101H0y1h0L0T0(130b0w0v0t0.0F011M1w010l0#0B0t0v0A0B1G1.1:1^1O1{1K1~200?0a0s0E0y0d0w0d0b0O160t0s0X1,0y0y0B0i2l19230t1h0o1*2y0L1(1%1)0j250.1C0t1}2i1G1r1t0)1N2I0O2K0t1!1s1G0w2r1h2w2y2$0_1/2m2Q1_2V0y0}0q0?0s0z2v2*0@2)242,1O2.2:2=0F2^1:2`2w2H012 0v2;040s0c332x0^362}0.393b0s0H3f352*373l2=0S3p3h3r3j380d2/3a2=0V3w2{2+1v2~3B303c0u3G3i3J3k3L3D3c0f3P3y3R3A3C3m0P3X2|3Z3t040z0p3(3I2R3!3M0z2@1a2_1i2!192O2B0j2F370i1!211h3~1k3|2(3_3405430X2#3Y3;0N0?0X0l3p3H370M2=4n3Q3;0t0l0?2C0O0e1:2K0B0b4s4h1_0=040D4F3)4u0?0i0~0y0O0B2r4L3:4H0?0U0I3w0s4$0s4o3z0t0?0t0h4A0t4C4E4b2x4(4t1_0d0?0G3p4^4G2~0h0?284V374I4K4?4g4M2-4O4Q4S4U594)3Z4I0U4#4%5i4i0?0l3B4~5o5c040O5t4_1O0d4q5w18594 5b510?0y1:0n0B553z575O3*4,4.4B0B4D5R3;5k4!59064%5(5G4W2~0?5V0B0e2r0A0k2K5K2l0e0A2T5x5F5u5A4|5y503k5d2q5f5N5h5z0.4I0R5Y5v5}2(6a014I0Q5m5)5*3s0?2T1r0i5/5{0t6g2_6o3z4{044}5~6i4+5w6m5)5 0.4j045r0y625H64040K6Q5+0.5B6q5E2$6z3*52045K0t5M6e1O5Q6963386q6V376B0J6@3z5{0?3^6h6;4I0C6{5S044-4/4;6-6b4Y5#2$5%6n6J6i6M0O4m6E6;6G4P664T68706R6j0?6d6:7u6G6U7y6W7v040Q7x7t7D6}3,7a7E6l7m7u6B020q0L0g744N045.5:0B5=5@0v5_6v6x4c6i6c7M7K6 3`7-0?0Q7d2_7f7g7g6K6=7Y4:5W7!7$4T7(0O175`5|7W4`617P7D7o5e7r7M7.7C6p6T8j7@6I7|5(7~6G6r0O6t896w8b606C8A6S7B7e7|8t654R8i8l5P7w7M8u0t6s6u8a8M5j8p8e6^8d6#8I047p8K5g7I568O8V7X7+2x7~6k8q5n6F8J678o047H7=7n6?8.4X7F8D016B6D8#8_804C835?857)8U7e194e0B2y2Z9l3}1s3 2B2D2z1Z1#2B0v1J9o0o3~0^9B0Y0!0$04.
Calcul du montant des pensions

La fonction calcul_pension a été écrite mais présente des erreurs. Cette fonction prend en paramètres le tableau de couples représentant la carrière et le nombre de trimestres attendus et qui renvoie le montant des pensions, arrondi à l'euro près.

Corriger les erreurs de cette fonction.

Fonctions fournies

Une version des fonctions trimestres_sur_un_an, trimestres_carriere et tri_annees sont déjà chargées en mémoire.

>>> carriere_courte =  [(2009, 1690), (2010, 520), (2011, 35000), (2012, 25000)]
>>> calcul_pension(carriere_courte, 9)
7776

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10

.128013s3o_8;bcdufvg/0ly n7apSr1-me,(P2=4:+twki9][5h*)6050j0C0L0v0O0q0b0s0i0q0v0b0b0H010L0O0w010406050b0k0B0B0v0y0r040x0d0q0k0;0d0t050o0{0}0 110_0w041a1h051k0o1k1m1h0_0j0O0m0)0+0-0/0T0O0n0T0q1A0T0L0@050!0h0q0C1v0,0.011z1B1D1B0L1J1L1H0L0h0d0j111I0y1i0L0T0)140b0w0v0t0/0G011N1x010l0$0C0t0v0B0C1H1/1;1_1P1|1L1 210@0a0s0F0y0d0w0d0b0O170t0s0Y1-0y0y0C0i2m1a240t1i0o1+2z0L1)1(1*0j260/1D0t1~2j1H1s1u0*1O2J0O2L0t1#1t1H0w2s1i2x2z2%0`1:2n2R1`2W0y0~0q0@0s0z2w2+0^2*252-1P2/2;2?0G2_1;2{2x2I01300v2=040s0c342y0_372~0/3a3c0s0I3g362+383m2?0S3q3i3s3k390d2:3b2?0W3x2|2,1w2 3C313d0u3H3j3K3l3M3E3d0f3Q3z3S3B3D3n0P3Y2}3!3u040z0p3)3J2S3#3N0z2^1b2`3y3*3=3,0z333`353|3;2.3U3c0z3f423h3I3t470@0z3p4b3r3}463$4g3w4j444e4n3-3G4q4d3A3 3P4w3R3~4f3-3X4j1j2#1a2P2C0j2G380i1#221i4L1l4J2)4H4Q0Y2$3Z3=0N0@0Y0l3q4x3!0M2?4,4C2.0l0@0i3b0i0k0q0e0w1~2k184;4$1`0?040E534l2 4^0 0y0O0C2s59451P560D3q0s4-3~0@2D0O210b2D0C0b0e0v1V1~0j0k0b5i38560V0J3x0s5M5o4=5b040t0h5z0t2L5x5n5p1`0d0@0H5Y5P3l0h0@295G3A56584H5)395c2r5f5h5=545k0@0V5L5N5Z5Q5s5u5w5y4Q0;0b5X4j5O5}0/5#045%6d633l5r5e662s685d5`0C5.3!5:6v5q044_5_5g6u5|5a0/5I615M6l014(040O4+6k5?0t0@5S5U5W5F6R6f016h020n0L0g6j2%6e6G010B0O0@0G4p2)5?565K4q5N6}6-5j6m045s6W0C6c6^6!6x6F705@6A6s6D6y555 6J6~6L6T042!0C6:6D746E6,6L6h6+2`6 3t6U5T1;6X5(6!6h0A7F6.6:6=6@3{6~626S7B7s5y2!0O5y1~0e4Q0B0w0L7t7y7v5$7J7b7L046?7j6L6N0C0%7(356L6`7j6}7l0@7o7q2s7s7,387w853A7.3/6|7P7z4y7S7D757U5e7X0t7Z0d7#7%883!876Z6.7m6V8h763{067~7R720d0!4}2s0B0k2L0y5A0O528u7b8t7u5?8a7;5?6N0l3C8r6z0O8#5!4/6O198Q3t5+048M0t0n7_2y7{0@5;778v808I6t847a5H0@5m8-8f5R7C5V8i7g5~045J7}7Q6!7m0L8F3b0e8I8K5g8N8P8T7G0@0K7x358e3+5^5e7f925/0@0R9c718%9E6w0@0Q9H9L3=7.3_8|7b560Q8W9i0@0b3b0#830B0d0r1~8(1P8S7)8D9k8G9n7p9p8M2v968s0@0o9-718x9a5x4~8k0e7Y7!7$8@0^8C9Z7n508O8,9t6.9/9y7 726o5x678n6a8zam5?6h9 9|6z65aq6q5z5B0t5D6Yaj8R0@0Ua06/6;040S8baJ869~aN9S0paS9:9u04aMaz2.9!9$0O9(9*9,4q8B9h6.6N2s0L0k0yaia!8v8/2g8K0j9I01799U7Aaf0t51a|7`6_94aWaPaZbc787i4w0o4Z0C2z7o2z4U2A4N1a2D2C1!1$2C0v1Kbo4K1t2{0o0Y0!0$0b04.