Reconnaître un pangramme

Un pangramme est une phrase contenant toutes les lettres de l'alphabet.

Il existe dans l'alphabet latin utilisé en français 26 lettres minuscules « usuelles ». Si l'on tient compte des lettres accentuées et des ligatures (à, â, ..., ç, æ et œ), le décompte passe à 42 caractères minuscules distincts.

On se limite dans cet exercice aux lettres minuscules usuelles de l'alphabet : a, b, c, ..., z.

Un exemple classique de pangramme est « portez ce vieux whisky au juge blond qui fume ». Chaque lettre y apparaît au moins une fois.

Par contre « portez un vieux whisky au juge blond qui fume » n'est pas un pangramme ; il manque la lettre c.

Vous devez écrire une fonction est_pangramme qui :

  • prend en paramètre une chaîne de caractères phrase,
  • renvoie le booléen indiquant si cette chaîne est un pangramme ou non.

On fournit la fonction indice qui prend en argument une lettre entre "a" et "z" et renvoie son indice dans l'alphabet (en débutant à 0 pour "a"). Il n'est pas indispensable de l'utiliser.

Exemples
>>> indice("a")
0
>>> indice("z")
25
>>> est_pangramme("portez ce vieux whisky au juge blond qui fume !")
True
>>> est_pangramme("portez un vieux whisky au juge blond qui fume !")
False
>>> est_pangramme("jugez que ce texte renferme l'alphabet, dix voyelles, k et w")
True
>>> est_pangramme("jugez que ce texte renferme l'alphabet, dix voyelles et w")
False
###(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 : 5/5
.128013s3_8èufvIy n7aS1me(P24:twi]D[h*)6Oo;bcdg/T0lîàqp.rFL-,}=Nzk{95Rxé050N0s0y0o0A0S0b0l0M0S0o0b0b0(010y0A0W010406050b0g0r0r0o0Y0k040p0J0S0g150J0m0l020o0r0W0K0l0/0s1f0Y0V0g0s0b050P1c1e1g1i1a0W041G1N051Q0P1Q1S1N1a0N0A0i0}0 11130E0A0O0E0S1*0E0y18050^0L0S0s1#1012011)1+1-1+0y1?1^1;0y0L0J0N1i1=0Y1O0y0E0}1l0b0W0o0m130v011`1%010h0`0s0m1t0s1;2i2k2p1|2s1^2v0r2x040a0l0u0Y0J0W0J0b0A1o1q0?2g0Y0Y0s0M2S1G2z0m1O0P2e2(0y2c2b2d0N2B131-0m2u2P1;1Y1!0~1{2=0A2@0m281Z1;0W2X1O2$2(391b2j1q2}2q320Y1f0S180l0q2#3d193c2A3f1|3h3j3l0v3o2k3q2$2;013v0o3k040l0c3z2%1a3C3t133F3H0l0w3L3B3d3D3R3l0.3V3N3X3P3E0J3i3G3l0H3$3r3e1$3u3+3w3I0n3:3O3?3Q3^3-3I0e3|3(3~3*3,3S0-443s463Z040q0R4b3=2~473_0q3n1H3p3%4c4k4e0q3y4p3A4r4j3g403H0q3K4x3M3;3Y4C180q3U4G3W4s4B484L3#4O4z4J4S4f3/4O1P371G2{2+0N2/3D0M282H0=1Z1O360s383p3V054.0?4_4Q1|0+180?0h4{3}4k0z3l56454t0h18301Y0M0s5b501317040t5k4A3u180r300g0b0M0g1^5q3D5n0G0x3$0l5H0l4I3)52042X0y0g0Y0m3V5J573g0L183+0N5B3)5n5p4#5V5s045u0m5w5y5A5)5c2q5D5T5K460J180#5_5*3Q5X045Z5#465%654k0b2n04010o01685@180G3$064W5L530s555=5l01593I6g3u5e041E0y0d3d0O0Y1t2G6w5m185(3b603E180W0E6F0b5j6r5r6J045E5G5I5`4t6P2X6T0m5i1F4O5U5?1|5|040(5 6:6X0D6I010+0M180Z3G6T6|5n0B6^6s6=0F776W015u180v4!396l5I6/6s5M0h3+7b3Y180M1g0o2Z0s2X7q3)0J6u307z4d6P6R106U6M6_015n5F4V7k7k6$2q5M0A6q397l7c6a186d6f6.7S6;18020S0y0K6@7(6N0m7s7u7w7y7;7L6=7,7.7:7X7)137!6c0*7%7K6s7N6!7Q7Q826O044@6*6,74186{6V7r045g0A5i8k5o6|7?047t6F7_7J4`6N5D767{7818803p7Y3D6~180Q0Y1D6k7R6N7n7p8G7c8w0A7E4k7B5f5S8X3Y626F0m0O8B3A8e678n3)7e047g8t6Z7P8c8L6n8p7W8K8e8%04320y8#3g6(1E2u8j8@668l8v5f8t0B7O7i8 8d8U185O5Q8)818U6 04710{8:3M068T7L5M9t5R9a519y8P8R4V1G4}4^4$9S0P4)1G0y4+9X2-2)27292+0o1@9U4)1M4 7c2X0r0d0h0o0+0s0d0E0c181y1A1C1E0l9n4`1T3q1N0I3e0Y0;1_0y0J1n0l0N009*5Z0l0 am0A0b0y1_0?0|271lac0m0|8q7tar5Q0|2Uan360;8ias1_0M0E0oa1am0@2,as2k0|aG7H6T0X1Pa704a90l2j0Y4.5Q0y0l2u1c2R1_anaM0o0T2@ahaL7^0y0f6)0X2Kaf0Y0}aNaP8y7va~2X0l1p0l0L105:a=0o0l0i3G0s5Qah0gbe0Jaw2u0l0U5J9R3D1~1,1.1:9/8M9M8Q9C2(9R04aZa69.0!bja@a_1_6Aah1p0M0l0g1q6D6F1e1_2Q0$a.1q2s2T1_270g0~0sb*an1-aq1_4|4/8g6)9e1E9Qb}0la`4.0m152ua-aPatbx4/bz1.201/2y9GbG9O3b0PbKb1a%1^bk0;0Y7V0Ab?0l8r0Ab*bw0Saj0A2UaibZb/afb=bM1W1R040j0S0l0o5Q0_a-cU110A0l0;0y0;a(2P2Q9+ah001n0`ap7xbY2T8r2S2v0A2Xb10CaU0}a|0bb*bd0majcV2Ra(10a.bq2Xa+0Y0|cDbj7o6+2Scd2U3)bAchbD8e8Z0m5hbIc24~a3a!1X1Zcf1 bCcj6s2D2u2w182J0p0Mcv0Wa-0u0k2e1p4{4@9/3a4`bK8e5M546|6u5J9g5d186A6C2k6E6Gdw8D6K9j8gaXd@7L5Da44y9F6s8w8hc06-9w7|8I9K6X0,0%8b90468V0Yeb8fb88Aek967D8*3)e4d|8te03M9pd$5f933Aeg696b7$eo7+7-7/ek8wemar7`e88H047~eKer46840186evefey7=9caJe78Cd~9id,9b8xa}7xd}89188FeQ7c6=8JeCd$clbI7j6#9r5N0@9ueL622E8t6Le+e3e(e68|eH6?e}2%eD2q8_8{9Pcob}9T2(9-cP0)0Jaeayb+b-0la1b*0Nc cs7taEc.a`b_ara{brbtayb@dibWdlb|4~3G0Sdx4^a(7x2Ga-2Uarb`b4b7aN5y2T00c9bbbn0:bkcUa-fXaL46dpdF049N6Ucp0la%0WbncX302Q0l2Q1u1-2sc=cs0?5Rcxb4f,a-7OcO2{dDbB21dG7cdI2F2HdMdO16dRdT0EdV4#dX3;dZ8;d#f4d(e.1|d*8v6yd/b#d?fbd`6Q6Se?7cd efdsff6+c1eV8$eag/6h048m887c8N9z72g%5Ce^fi7ag=1|fo7h4qe2g`187oejh33Q7@8zeObIfm6;7C9v94e%d{g$e!8~8cez92ekeX6efieTfk6vhoeNe=hzeJhBhj83eFeZgR6Xew199ph88oe5g-e*8;d^g@d`aAg~5$d_hNele;ePfdg(6ie_hne96?ekg{g48Sf39G9sf69Jhd3E62fZgZh)e4b hVfhfqd#1T4%9V4=1a9V0@0_0{04.
Astuce

On pourra utiliser une structure de données, une liste de booléens ou un dictionnaire par exemple, afin de garder trace des lettres lues lors du parcours de la chaîne de caractères.