Diagramme en barres⚓︎

Plusieurs fonctions

Cet exercice est en plusieurs parties.

Vous pouvez traiter celles-ci dans l'ordre que vous souhaitez.

Il est possible dans une partie quelconque d'utiliser les fonctions demandées dans les parties précédentes même si vous ne les avez pas écrites.

On souhaite construire un diagramme en barres à partir de deux listes :

  • une liste categories contenant des chaînes de caractères,

  • une liste valeurs contenant des nombres entiers positifs ou nuls.

On garantit que les deux listes ont la même longueur.

Si l'on prend par Exemples :

  • categories = ["Anne", "Luc", "Patrick", "Sam"] ,
  • et valeurs = [10, 8, 5, 15],

on souhaite obtenir :

🐍 Console Python
Anne    : ##########
Luc     : ########
Patrick : #####
Sam     : ###############

La construction de ce diagramme passe par plusieurs étapes détaillées ci-dessous.

1. Longueur maximale

Comme on peut le voir, afin de construire un diagramme convenable, on doit faire en sorte que toutes les « barres » débutent au même niveau. Il faut donc compléter certaines catégories avec des espaces. La taille commune visée est la longueur maximale des chaines de caractères présentes dans categories.

Écrire la fonction longueur_max qui prend en paramètre une liste non-vide de chaînes de caractères et renvoie la longueur de la plus grande d'entre elles.

Exemples
🐍 Console Python
>>> chaines = [""]
>>> taille_max(chaines)
0
>>> chaines = ["Toto", "Titi", "Tata"]
>>> taille_max(chaines)
4
>>> chaines = ["Riri", "Fifi", "Loulou"]
>>> taille_max(chaines)
6
>>> chaines = ["Pomme", "Abricot", "Poire", "Pêche"]
>>> taille_max(chaines)
7

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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 : 5/5

.128013/:spyg_ork2c7Sea05i3mf=xb1P6w) ldtn;uh(v4050H0p0I0q0t0G0d0F0m0G0q0d0d0x010I0t0e010406050d0L0v0v0q0j0f040o0i0G0L0*0i0J050b0;0?0^0`0/0e04051a131d0b1a0/0H0t0O0Y0!0$0(0M0t0g0M0G1r0M0I0-050T0z0G0p1m0#0%011q1s1u1s0I1A1C1y0I0j1b0I0M0Y0}0d0e0q0J0(0l011E1o010w0V0p0J0q0v0p1y1X1Z1(1G1+1C1.1:0-0a0F0B0j0i0e0i0d0t100J0F0R1V0j0j0p0m28131?0J1b0b1T2l1Q1S1R1z0H1^0(1u0J1-251y1j1l0Z1F2v0t2x0J0i2B1y0e2e1b2j2l2P0:1Y292D1)2I0j0@0G0-0A2i2T0.2S1@2V1G2X2Z0-0l2%1Z2)2j2u012.0q2!040u2=2k0/2^2,0(2{2}0P302@2T2_360-0s39323b342`0i2Y2|0-0C3g2*2U1n2-3l2/040n391e2N132B2o0H1S2t3j0m2J1;1b3D1c3B2R142(053J0R2O3i3t0(0k0-0R0w390F3r3c0w0-0G110g0L0p0L0j0h0@0y3z333Y010,040N3{3X2E2`0-0m0M0U2x0d422+3}3 0E0c3g0F4j3)3|440J0-3_0t3(3*3j0i0-0x4s4m1)0v0t0-0r4i4k4t3}3!040w3l4y432W0-0I0p0y4R4N4d440i0D0-2G4V3s4n46482G0p4b3R2?4H443 4h4.314k4_4l4O1G4J0t3%4@044{4W2W0z3-1-4c4%1)3 41514:4P044R4T0p592_4f4$2_4v04020g0I0K5o3j4o044q5l3j4=4F4`4`5f2-4p0q0y4r51535a1G5q4x5N5H3556041{5B4e0-5d2R4z5I5h4S4U5e5(0(5n5106064_5U014J2e0I3?125T5.455z5K5M2P0/0b3U0p2l2M693C1k3E2o2r2m0q1B6c0b3D660R0T0V0d04.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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 : 5/5

.128013/:spyg_ork2c7Sea05i3mf=xb1P6w) ldtn;uh(v4050H0p0I0q0t0G0d0F0m0G0q0d0d0x010I0t0e010406050d0L0v0v0q0j0f040o0i0G0L0*0i0J050b0;0?0^0`0/0e04051a131d0b1a0/0H0t0O0Y0!0$0(0M0t0g0M0G1r0M0I0-050T0z0G0p1m0#0%011q1s1u1s0I1A1C1y0I0j1b0I0M0Y0}0d0e0q0J0(0l011E1o010w0V0p0J0q0v0p1y1X1Z1(1G1+1C1.1:0-0a0F0B0j0i0e0i0d0t100J0F0R1V0j0j0p0m28131?0J1b0b1T2l1Q1S1R1z0H1^0(1u0J1-251y1j1l0Z1F2v0t2x0J0i2B1y0e2e1b2j2l2P0:1Y292D1)2I0j0@0G0-0A2i2T0.2S1@2V1G2X2Z0-0l2%1Z2)2j2u012.0q2!040u2=2k0/2^2,0(2{2}0P302@2T2_360-0s39323b342`0i2Y2|0-0C3g2*2U1n2-3l2/040n391e2N132B2o0H1S2t3j0m2J1;1b3D1c3B2R142(053J0R2O3i3t0(0k0-0R0w390F3r3c0w0-0G110g0L0p0L0j0h0@0y3z333Y010,040N3{3X2E2`0-0m0M0U2x0d422+3}3 0E0c3g0F4j3)3|440J0-3_0t3(3*3j0i0-0x4s4m1)0v0t0-0r4i4k4t3}3!040w3l4y432W0-0I0p0y4R4N4d440i0D0-2G4V3s4n46482G0p4b3R2?4H443 4h4.314k4_4l4O1G4J0t3%4@044{4W2W0z3-1-4c4%1)3 41514:4P044R4T0p592_4f4$2_4v04020g0I0K5o3j4o044q5l3j4=4F4`4`5f2-4p0q0y4r51535a1G5q4x5N5H3556041{5B4e0-5d2R4z5I5h4S4U5e5(0(5n5106064_5U014J2e0I3?125T5.455z5K5M2P0/0b3U0p2l2M693C1k3E2o2r2m0q1B6c0b3D660R0T0V0d04.
2. Allonger les chaînes

La longueur maximale de la chaîne étant connue, il faut désormais ajouter le bon nombre d'espaces aux différentes catégories.

On demande désormais d'écrire la fonction allonge qui prolonge une chaîne de caractères mot avec des espaces jusqu'à ce que sa longueur soit égale au paramètre longueur (entier strictement positif).

Exemples
🐍 Console Python
>>> allonge("Anne", 7)
'Anne   '
>>> allonge("Luc", 7)
'Luc    '
>>> allonge("Patrick", 7)
'Patrick'
>>> allonge("Patrick", 1)
'Patrick'

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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 : 5/5

.128013/,syp:g*vork2cqSeaim=+b1P) ld-tn;uh(f050D0r0F0s0t0C0d0B0o0C0s0d0d0v010F0t0f010406050d0I0u0u0s0l0e040q0k0C0I0$0k0G050b0-0/0;0?0+0f0405160 190b160+0D0t0j0U0W0Y0!0J0t0h0J0C1n0J0F0)050P0x0C0r1i0X0Z011m1o1q1o0F1w1y1u0F0l170F0J0U0_0d0f0s0G0!0n011A1k010L0R0r0G0s0u0r1u1T1V1!1C1%1y1*1,0)0a0B0z0l0k0f0k0d0t0|0G0B0N1R0l0l0r0o240 1/0G170b1P2h1M1O1N1v0D1;0!1q0G1)211u1f1h0V1B2r0t2t0G0k2x1u0f2a172f2h2L0,1U252z1#2E0l0:0C0)0y2e2P0*2O1:2R1C2T2V0)0n2Z1V2h2I0r2h2x2k0D1O2p2(0!0o2F1-172@182J2$2g2.362~0N2K2P2q010m0)0N0L37040B353d0G0L0)0s0C0C0}0h0r3j3m2|010(040K3x2f3n0)0u0k0F3E3c3z3B0c3j3l3F3z0G0)3t0G0h0I0r0I0l3L2%1j1C3B0A0g3j060B3:3R3M3)0!3f042a0F3#0~102!3=3(2A013U043I3K3 2/412Q3@010k0)0w3Q3y4d0d1Y04020p0I3J0H0B4o4q0F0H4i3S4d4f040i4y3?433B3D49364z43453W3Y3!3$4J3k4j434B0E4E422S0x3V1)3%4c4G0)4I2N4L2S3H3J4(3d3+0A3.0 392=1a340b322i2_0 2l530s1x4|4 1g2#4 0O0Q0S04.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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 : 5/5

.128013/,syp:g*vork2cqSeaim=+b1P) ld-tn;uh(f050D0r0F0s0t0C0d0B0o0C0s0d0d0v010F0t0f010406050d0I0u0u0s0l0e040q0k0C0I0$0k0G050b0-0/0;0?0+0f0405160 190b160+0D0t0j0U0W0Y0!0J0t0h0J0C1n0J0F0)050P0x0C0r1i0X0Z011m1o1q1o0F1w1y1u0F0l170F0J0U0_0d0f0s0G0!0n011A1k010L0R0r0G0s0u0r1u1T1V1!1C1%1y1*1,0)0a0B0z0l0k0f0k0d0t0|0G0B0N1R0l0l0r0o240 1/0G170b1P2h1M1O1N1v0D1;0!1q0G1)211u1f1h0V1B2r0t2t0G0k2x1u0f2a172f2h2L0,1U252z1#2E0l0:0C0)0y2e2P0*2O1:2R1C2T2V0)0n2Z1V2h2I0r2h2x2k0D1O2p2(0!0o2F1-172@182J2$2g2.362~0N2K2P2q010m0)0N0L37040B353d0G0L0)0s0C0C0}0h0r3j3m2|010(040K3x2f3n0)0u0k0F3E3c3z3B0c3j3l3F3z0G0)3t0G0h0I0r0I0l3L2%1j1C3B0A0g3j060B3:3R3M3)0!3f042a0F3#0~102!3=3(2A013U043I3K3 2/412Q3@010k0)0w3Q3y4d0d1Y04020p0I3J0H0B4o4q0F0H4i3S4d4f040i4y3?433B3D49364z43453W3Y3!3$4J3k4j434B0E4E422S0x3V1)3%4c4G0)4I2N4L2S3H3J4(3d3+0A3.0 392=1a340b322i2_0 2l530s1x4|4 1g2#4 0O0Q0S04.
longueur_max et allonge chargées !

Il est possible dans la prochaine partie d'utiliser les fonctions longueur_max et allonge même si elles n'ont pas été complétées précédemment.

Une version valide de chaque fonction est déjà disponible dans l'éditeur.

3. Le diagramme complet

Il s'agit donc désormais d'écrire la fonction diagramme qui prend en paramètres la liste categories contenant les noms des catégories et la liste valeurs contenant les entiers associés à chaque catégorie.

Cette fonction renvoie la liste des chaînes de caractères correspondant aux lignes du diagramme.

On garantit que :

  • les deux listes ont la même taille ;
  • les deux listes sont non-vides ;
  • les valeurs sont toutes positives ou nulles.

On notera que dans les règles de typographie française, on ajoute une espace entre la fin d'un mot et les deux points. On écrit ainsi Patrick : et non Patrick:.

Exemples
🐍 Console Python
>>> categories = ["Anne", "Luc", "Patrick", "Sam"]
>>> valeurs = [10, 8, 5, 15]
>>> barres(categories, valeurs)
['Anne    : ##########', 'Luc     : ########', 'Patrick : #####', 'Sam     : ###############']
>>> categories = ["A", "B", "", "EEEEE"]
>>> valeurs = [1, 1, 0, 5]
>>> barres(categories, valeurs)
['A     : #','B     : #', '      : ','EEEEE : #####']

Les affichages des résultats sont toutefois plus lisibles en procédant ainsi :

🐍 Console Python
>>> categories = ["Anne", "Luc", "Patrick", "Sam"]
>>> valeurs = [10, 8, 5, 15]
>>> for chaine in barres(categories, valeurs):
...    print(chaine)
...
Anne    : ##########
Luc     : ########
Patrick : #####
Sam     : ###############

Compléter la fonction barres ci-dessous :

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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 : 5/5

.128013/Rspy,:g*_Ior9k2c.[q7Sea05i3mf=x+b1P6w) éldt8n;uh(v]4050R0x0S0y0B0Q0d0O0r0Q0y0d0d0F010S0B0e010406050d0W0D0D0y0n0f040w0m0Q0W0_0m0U0O020y0D0e0V0O0c0x130n0u0W0x0d050b101214160~0e04051B1u1E0b1B0~0R0B0Z0.0:0=0@0X0B0i0X0Q1S0X0S0|050)0I0Q0x1N0;0?011R1T1V1T0S1#1%1Z0S0n1C0S0X0.190d0e0y0U0@0q011)1P010E0+0x0U1h0x1Z1 21261+291%2c0D2e040a0O0K0n0m0e0m0d0B1c1e0%1}0n0n0x0r2z1u2g0U1C0b1{2L1^1`1_1!0R2i0@1V0U2b2w1Z1K1M0/1*2V0B2X0U0m2#1Z0e2E1C2J2L2?0 201e2%272,0n130Q0|0O0J2I2`0}2_2h2|1+2~30320q3521372J2U013c0y31040O0C3g2K0~3j3a0@3m3o0O0#3s3i2`3k3y320A3C3u3E3w3l0m2 3n320L3J382{1O3b3O3d3p0v3T3v3W3x3Y3Q3p0T3$3L3(3N3P3z0o3.393:3G040J0z3C1F2;1u2#2O0R1`2T3M0r2-2o0$1L1C2:0x2=363 490%4h3_2(010p0|0%0E3C0O3U3F0E0|0I142E1t1v4i3%4o0{040Y3 4G2}0|0r0y0S0x0i3O0B1s4L3/4H0|0g4u4w3M0U0|0Z3n0x0W0n4D2^4M1+4I0N0h3J0O4{4v4=3x0|0Q1d0i1r4.4$4~010m0|0F564Y4N04510U534-0n0k130G4X4n274I4K4E3h4%3`4O4Q4S4U4W5t2K5v4Z040N4`4|5E5e1K0y0i0n1h2n5c5p1+59045b5C3p5K4?0|0t0!5I4{5!0@4q040E3O5S3V4o4)040B5;3k0m0M0|2*5`4(0I0|5P5h0x5o5=5q0|5s4;5d3b625f2b673k5r6i4(5x4R4T0n4V4:4F6d0@4@4^5)4|5*575@1/2X603:5V5X2?4}6u3l0|3n5g0i665Y5+016k6S6B6n5z6q5B6c5T6v5$6l5w5^6*5F0!4#5Y6K6%6M5f52540n6-695G6y6z6T6C1S6E6;6T5V0H6I366=681+0d2404021q0m0S1k0h1f7i7k6 5J6X5f736R6J760|786F4o7e0|7h0W7j0V037E7G7A275V0j7L3b4*4,4.6s5u574I0t6|7Q6,6W6L4I5(5Y066z707s5M5O5Q7v6t6?5V0s7Z4 040y0e0e2b0R7`6U6a82720i746$7c6(6~7*7+7r6L5-2E0S4.0U7P7{7/5P127=3h0~0b4k4g408w0b431u0S458B2R2M0y1$8y431A4m8a012E0D0k0E0y0p0x0k0X0C0|1m1o1q1s0O4_6S1H371B0l0Q0O1s0S0O0y0W0=0B0O2v8_8I0O2B0r0n0P0x0n0O1%8 0B5N8p2n8:1e1b0+0B0d218=0W2X969h4R9d1}1i920X2b2x1d8(1F372#3k1-1U1W1Y8M3k2k2b2d0|2q0w910`8=0K0f1{1d3 4f8M2@4i8v9H3M5-4s8m3l4y044A2D6#7?8N6V893F6Y6p6r824I6:7w7s4+1%7T9|0|6x7*7-6L5@0)0+1%9*6H9*6C6_5j5l0y5n7$6?9?9;9^044P6o5A7U5D7Wa56y6T8h0(8k9*7X856N0Q6P8rax7%84an8N5@at6Z9{aP6j6)aV6m7#9@3M7(9~7a710|abaJaL9$3:4@ae7y9*7C7g7o7l7n7F7p755777a@7f7J7k7Ia`a=047Oa a97Ra24/a4047YaY6+5_bj6.9*5-5/6{bb6?5@bl9 6L5|5~8lbsaQ6f646Qbg6baq61506hbm6}bH7Vbcas5y9`9:bPaoa50N7)2?8t9#8x2L8K420(0*0,04.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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 : 5/5

.128013/Rspy,:g*_Ior9k2c.[q7Sea05i3mf=x+b1P6w) éldt8n;uh(v]4050R0x0S0y0B0Q0d0O0r0Q0y0d0d0F010S0B0e010406050d0W0D0D0y0n0f040w0m0Q0W0_0m0U0O020y0D0e0V0O0c0x130n0u0W0x0d050b101214160~0e04051B1u1E0b1B0~0R0B0Z0.0:0=0@0X0B0i0X0Q1S0X0S0|050)0I0Q0x1N0;0?011R1T1V1T0S1#1%1Z0S0n1C0S0X0.190d0e0y0U0@0q011)1P010E0+0x0U1h0x1Z1 21261+291%2c0D2e040a0O0K0n0m0e0m0d0B1c1e0%1}0n0n0x0r2z1u2g0U1C0b1{2L1^1`1_1!0R2i0@1V0U2b2w1Z1K1M0/1*2V0B2X0U0m2#1Z0e2E1C2J2L2?0 201e2%272,0n130Q0|0O0J2I2`0}2_2h2|1+2~30320q3521372J2U013c0y31040O0C3g2K0~3j3a0@3m3o0O0#3s3i2`3k3y320A3C3u3E3w3l0m2 3n320L3J382{1O3b3O3d3p0v3T3v3W3x3Y3Q3p0T3$3L3(3N3P3z0o3.393:3G040J0z3C1F2;1u2#2O0R1`2T3M0r2-2o0$1L1C2:0x2=363 490%4h3_2(010p0|0%0E3C0O3U3F0E0|0I142E1t1v4i3%4o0{040Y3 4G2}0|0r0y0S0x0i3O0B1s4L3/4H0|0g4u4w3M0U0|0Z3n0x0W0n4D2^4M1+4I0N0h3J0O4{4v4=3x0|0Q1d0i1r4.4$4~010m0|0F564Y4N04510U534-0n0k130G4X4n274I4K4E3h4%3`4O4Q4S4U4W5t2K5v4Z040N4`4|5E5e1K0y0i0n1h2n5c5p1+59045b5C3p5K4?0|0t0!5I4{5!0@4q040E3O5S3V4o4)040B5;3k0m0M0|2*5`4(0I0|5P5h0x5o5=5q0|5s4;5d3b625f2b673k5r6i4(5x4R4T0n4V4:4F6d0@4@4^5)4|5*575@1/2X603:5V5X2?4}6u3l0|3n5g0i665Y5+016k6S6B6n5z6q5B6c5T6v5$6l5w5^6*5F0!4#5Y6K6%6M5f52540n6-695G6y6z6T6C1S6E6;6T5V0H6I366=681+0d2404021q0m0S1k0h1f7i7k6 5J6X5f736R6J760|786F4o7e0|7h0W7j0V037E7G7A275V0j7L3b4*4,4.6s5u574I0t6|7Q6,6W6L4I5(5Y066z707s5M5O5Q7v6t6?5V0s7Z4 040y0e0e2b0R7`6U6a82720i746$7c6(6~7*7+7r6L5-2E0S4.0U7P7{7/5P127=3h0~0b4k4g408w0b431u0S458B2R2M0y1$8y431A4m8a012E0D0k0E0y0p0x0k0X0C0|1m1o1q1s0O4_6S1H371B0l0Q0O1s0S0O0y0W0=0B0O2v8_8I0O2B0r0n0P0x0n0O1%8 0B5N8p2n8:1e1b0+0B0d218=0W2X969h4R9d1}1i920X2b2x1d8(1F372#3k1-1U1W1Y8M3k2k2b2d0|2q0w910`8=0K0f1{1d3 4f8M2@4i8v9H3M5-4s8m3l4y044A2D6#7?8N6V893F6Y6p6r824I6:7w7s4+1%7T9|0|6x7*7-6L5@0)0+1%9*6H9*6C6_5j5l0y5n7$6?9?9;9^044P6o5A7U5D7Wa56y6T8h0(8k9*7X856N0Q6P8rax7%84an8N5@at6Z9{aP6j6)aV6m7#9@3M7(9~7a710|abaJaL9$3:4@ae7y9*7C7g7o7l7n7F7p755777a@7f7J7k7Ia`a=047Oa a97Ra24/a4047YaY6+5_bj6.9*5-5/6{bb6?5@bl9 6L5|5~8lbsaQ6f646Qbg6baq61506hbm6}bH7Vbcas5y9`9:bPaoa50N7)2?8t9#8x2L8K420(0*0,04.