Aller au contenu

Exercice 4 - Transformations⚓︎

On se donne une chaîne de caractères appelée motif ainsi qu'un ensemble de règles du type "Si le caractère lu est un a , remplace-le par ab".

L'ensemble de ces règles est stocké dans un dictionnaire Python dans lequel :

  • une clé est un caractère lu,
  • et la valeur associée est une chaine de caractères par laquelle le caractère doit être remplacé.

Si le caractère lu ne fait pas partie des clés du dictionnaire, il n'est associé à aucune règle et est donc recopié à l'identique.

Exemple

On prend pour règles {'a': 'ab', 'b': 'ac', 'c': 'd'}.

On prend pour motif de départ 'a'.

Après une transformation on obtient 'ab'.

Il est aussi possible d'effectuer cette transformation plusieurs fois de suite en l'appliquant à chaque étape au résultat de l'étape précédente.

Exemple

On garde pour règles {'a': 'ab', 'b': 'ac', 'c': 'd'}

On prend pour encore motif de départ 'a'

Après une transformation on obtient 'ab'

Après deux transformations on obtient 'abac'

Après trois transformations on obtient 'abacabd'

Vous devez écrire deux fonctions Python :

  • transformation(motif, regles) prend en argument un motif initial (une chaine de caractères) ainsi qu'un ensemble de règles (un dictionnaire) et renvoie la chaine obtenue après une transformation.

  • n_transformations(motif, regles, n) prend en argument un motif initial (une chaine de caractères), un ensemble de règles (un dictionnaire) ainsi qu'un entier n et renvoie le résultat obtenu après n transformations.

Exemples

Python Console Session
>>> regles = {'a': 'ab', 'b': 'ac', 'c': 'd'}
>>> motif = 'a'
>>> transformation(motif, regles)
'ab'
>>> n_transformations(motif, regles, 2)
'abac'
>>> n_transformations(motif, regles, 3)
'abacabd'
>>> n_transformations("rien ne change !", {'z': 'y'}, 50)
'rien ne change !'
###(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="I_e+y3qCdRuéàxUEgPvr08-èDêfLbco/m]h(apl,7)['n sS:j6w% 1ki.9Ot25;4A030f090(0H0#0J0R0Q0A0J0H0R0R05060(0#0I06020Y030R0h0D0D0H0q0b020S0B0J0h110B0P0Q000H0D0I0+0Q0g091b0q0d0h090R030C181a1c1e160I02031J1C1M0C1J160f0#0p0_0{0}0 0{0P0n0h0H0n090t0I0b0(0F1l0Q0F0#0n0F0J1;0F0(14030;0z0J091V0|0~061:1=1@1=0(1}1 1{0(0q1K1,0_1h0R0I0H0P0 0)06211X060x0?090P1p091{2j2l2q232t1 2w0D2y02040Q0o0q0B0I0B0R0#1k1m0/2h0q0q090A2T1C2A0P1K0C1,2(2d2f2e1|0f2C1Y0#0P2v2Q1{1S1U0`222=2@0P0B2{1{0I2Y1K2%2(38172k1m2}2r310q1b0J1{0H1/2Y0x0 0108080A32091@300B0t0Z3z140Q0Z1C0H393c153b2B3e233g3i3k3m093o063q3s3u3w2^3z0t2o020Q0)3F3H2l3J2%2;063O0H3j1K3l0F3n3p3r3t0/3Y313!0c3C0c3)2$3I163-3M0 3:3=033@3_3U3{3X2?3Z3A0,3C0,441D463K3d1W3N0B3h3;3Q3^3S3`3W3}4j3 3A0*3C0*4p38473c3.4b4z4f3V3|3v4F3y3A0V3C0V4L4r484u4a4w3P3?3R3T4T4i3x3!0L3C0L4$3+4N3L4(3/4*4y4,4A4.4h4E4;3A0s3C0s4_2'4{4t2~4~4x4c4e4B4g4D4V560t0%3C0%5b3,4O495g4+4d4-4C4U3~4X3z0r140Z0r5t5d4P4 5i5A5l5C4W3!0Z0Z5H3E0C3G454`4s5M5h4R5k4/554k3z3$0Z3(5Y3*5c5$5w4Q514S545n5,0Z41025 5K5@4}5_5z525B4:5~4m614o5;5!2'1N361C2{2+0f2f2:5w4U2`1T1K3509373I6g1K4U6x2B0#0f0 3r2%5T3Q6E6G5m5D6J0Q2G096M5R5o5V2(5Z4'5f0!140/0x6z0Q645f0P0x142d2l0R0x4 2#4q3+6*2r13020G6z6`3N140D0B116'6^6h6Z6{140K6(704a142Y0n1 1B776C5e7a020M0T6z167l5$6L066H3c3!3$5z7w5|6O3A2o6Q2x6T6a4G3#1{5;0Q7Q6)7971022Y180J0;0(7d7T0 0B14057#5v4}0R3$001y740+7/0h7;7s6 3-7D086I3A607C6F7x6N5S7 2p6R7K5+7M807P7R7e066#026=0q7*4|6+140A1c0H2!092Y8l7n230B0W142?8v4P72740#763a7$066|7r7l7t8I4O7|7~0t6c81895}7M4m7I2H8W7F8T7O3G7R8*7S7+6!8A8H3I8,8m3f8o8q8s8u7l8=8w7%8z028B8|8f0P7g097i1A7`8-7o8M4M9a6D827y2l3!4I4,7|6U5,4I8!6S839o7M9l3)8+9y8}8D7V1A0h7Y0H7!938J7'020a7)9I9b7U7h7j9f8~8K140N9T9B8p0q8r0(8t099Y5w6|0E7_7u7{9h7}7z4Y6K9:9u5E4Z9r8$850t4Z6X3%9z8f8h3v0R9(9.9P0 8L9-8P9g6M8S4?9m9^7L5E4?9|9tal4=8(a29z8e8J959C7X7Z8C5w9K9MaB658^9#8`a89ea9af838S58aj9}5o58ao7E9~aQ9xavaa8g960(0h0q0PaF8nay9EaA8N9Y8R9=5p9@aS5,5qaV845o5qa18O6y9/aga?5Ia^ap8a5Eb6a|9_5T5Gb0a;9:8S5Ub7aW6V5Vbcaq3Abka1a46$3Sa+3f6-020P086/0P6;6?0#1l7kae9U6|6~aM9Uax73759)4}6|7c9O8?9Q979SbO3.bVbx7Ua*b$9*147qadb28Qbib57B3l9nbq5-877Jb88Xba7B8d7Qbu8i4wb(7f0208c7068y8Ab*389A5^0z7g2l1'bT5fbMcn8@bAcq236|b.a:b$a=9jbr80b^akb95T41bpcFcBasau948EbSbX9U9K9NcgcN02bDbF4x6@bKb%14bNc#5^cO8Gctab7bcbax9R99b+bUb-b/6_b3aOb58UcDa_7M0Z8Z88b~8%d2cLa!bY0 8h2Ya'a)c/c*8:5#7u0C6B6i6w6k6t1C0(6ndr2.2)0H1~do0C6l1I7m3.2Y0D080x0H0!09080F601u1w1y1A0Q9d6y1P3J2{3.0H0f730P2SbH1m2?6=141IdZd#1ld'1l0t110(2b02076,bGbI1N3J1J0y20350B1~0u2H0Q0R0O0H0I2k2Y0P9%0Q0H0h0k6)5j3T1_0(0I0R0T0C0C0x0q0$0W0#0!12091S0H0$4w0n0CezeB0C0y0t0S0b0R0(0X0e0c0X0-0s2H1{1v02eN0ReQ0(e7c=e#9x2?0p2v0(0i0^2v3D0%0V0s0Qee0Q1 0Q0zbH0J0B0n0#eR200-0qf6112:0y2?0/0P1b0b8tei2t2U200f0i0Afa2Ye~fo0ie/f3ed1ve:0Q0f0O0w2ddS0p1T2l0(0R0$d 161h3J1@e0020l2@e91h1jd(e|2Q2RdyfO0.1T3.1Z1#1%1(1*1,1.251?1^1`dD5w2E2v2x140o1+1-cf6y6v7m5=6A3udDcz0P3#3BaRd55S0)3BcIb gdbo685Qaqgi6W448J8h6%c/bzcX8j1bc!b:da9V6}c,3/dhgHb'cQ9Bc;bJgDbLb-dUdjc#gbgdb@0Qb_cFgi7Hd4bm3Zg$2pgo5*glg*a18*cV7Wa.9GcbcScb7-147?7;g~0(0+c_78b;b49jgicCgZcEg.0tcHg'a}g)hdg+5{hg3 h8d8c3gu148jdg029!9$9'g_9092cUawgJc?co14gT5?cyb=h78'gfg(hm8'gk6Ogi8Zg,hO3yhTho8+c4c+gMc)hu8_9%8{hBa#cd91g33+chaG9C98gPc`a#accxgVhKgcgi9wc gg4;i1b|8#i4hh9qhVhlhX0t9wc2auh=a,g?9F9Hh,gEaDcT8;g=b!c=c(c@029XhEcrhvaJgK149,h}gQhah6i09 blidgd9{hfbdgi9{iciSiMg:a3hq02a6aKiIb,02hH3JhJiKgdai8Vi9hPaniRgq0taniVi^i/ihcMhCa-img_14aEh%h?iCh*i%gUiIgWgiaYi3hWgdaUi@g#0taUi{jlaYihc4dda(h:2'ijcrila/aLh~i-gia i:jhjEi79sjHa@5Pg-hSa@bgi,c|hLb6hNiOgr5GhRgh5Fhj5)jLjV3)b1h`aN9iiLbsjGjX3zbojkhcbkjNj(gs6fi!gwj66+bzbBgzd}bEiEgGiA7UbRh$iwhF02bWiobP96h^k8khisj0jvf`ixcwjBjch gmgYg!j_g%b}j(7HjokAhZc4hsk1crcakK8xhzkqjx3Ncj7Vcljah4gEcpkac8kq8fcvi*j+kXd)kwgrh9kzjP5 jJd0iek;j{j=k;iY9ycVkcdijw8fg`kNc8k5cZd(k8c'i'h?k kmhtgOk80Mh3gak,3zc~iJi;k@d3kCk`hUhkiWd7k|kRdba%juhtldiH6_dlg9dn2(dB1Le$3l6=0P2!f!036Bl6gBl8lH0/3%3t1a2v0Ae31c0_0q0ifk0{0_0F0=fWfI2VlTg9jzg^lY6wfNdWdC0'1mee3ta(0(0Q2v182S20e l^lZlE6B0$2L0Ba(l/0HdR6)6Bj8hxl|3%8M1Q039EfR0#fT2R0_3v0h0#0t0A0#0QdI2Se|1c11fodS0`e=fC0hfC0#lR1l2w0#ftmd6wlgms0K0Q1.0H0Umjehl.0p3;09mk220BmHl,0Q0jmol_9Dj2m(f(0CfS16n5lM2R310Pm)1.e 2Y3t0I0#20m}0J0O6Ee:0#dRl~mvn4mz7tmxm01mh*0D4jm71mef0p0B0bfKm~lZl`9Hmgf(1J0v6:e~lO1lmX1mm$bAbC9#bEgA9Gd(7k6BncnD0i2S0uftl.lVn%1.e@6v2wegfX2?fC202H29ftm}m-mkmc6Bmfg9eie/0Afu0Ql+az9Gn}nJ6wn;2T0Gk m)gOlimsnri+n7n71JdP1cdRnOlN2hlQ9G0i2w2Toh0Al:4j0^2Vj8n.dS6~6BnL0Q9Modiu0R0Nmq2YiG6B0Mm7eR0Q06m49%0ha72pe@g0f;0Pmh0g0i0I0ih*mC29209$f!0h1m0nn!2:310D0zft2V6=f6e|m?m63;f31!l-209%1qoM0O090kfqfZ1.0fmU4Umh0-fmfC0Ofwma0qmCfCe=1%l+2Hegn*e|l+0xoP0QfZ1@a7pGl.0Do|1-l@4Uf+cl1$1'1)0b1/1^271_2za#0PkTeR8kk!cc14l~kecrm-hAdVmg0QnQbEpH8p0Rm)e p%0/fIfBmudXf*5wf,p)f/g1f=p.f^p;gEf|6Rf qnk$g54sg7nX7vkw0cgej;bdqEj@lsqHgjkF6OqIasc4k0ki4Pgyn!cYlW1ll9gHbQ8Fl0krkfknh;itklp`k'ljqCi-qEkyhbqO7Nj!4;q?j%53iOq}lyitoffLj302irq+8J6|0NiGkuj,k+q=hijWqLheqKaqqEcHqN5SrokHi!kJqTh'o!kW3%l2kPlDq%k8k(bhrhlnk/rrhQj^q_luj'r0hMaZk}i!kdkop=aHhwh+rXiprCl4gIh@b#p~cuhGq:c{j.hdifiNqL9qrNrLiblvrnr?lyi rYj17Zh_k*3.9Kp}lba,ec0I2v0fq!p`c:oXk8izr,c8ryk80Eoqres6gWqEa0qGr~iQrmcFsvq~69sBiXrTh!i!i$rFr/h5jTgcqEi/jgrRi?sAglsQsDgpsFi}8)iihps2nLs5q(2rs8q#14scsesgsmr)soq.c^lFstqDjmr@r~jjsVq_jnr}sFjq3Gk)lkrhjFsSqLa{r`q|jMrqthjFjri!jtdfr(g|02h07=7:h1gHs-sh14q0k$rac%s.s39Gs*k%s`ss2(dm1P6jdA6t7tounulM1g1ioHlPnV2@0J1 oAm1f#a(9#mLej0}mIaIm40qmHpXpm1Am6l'eg9#0JnCmJ0=0RnIqg1Rqi4}qkf.p+o?p-26qqs+2D2uqu02o=g26 qy3a7udmr:9;9j0,qFtdaquuqJi8jhuysYjO5SuCbtj bwr(6,6.qWn$gCrfc$k9s?q$cPs?gLrwh?m'uWgSsMj-usgcuuq@k?8Tq`tg3Zu*uDuB7Nr2j0s)r6r8l1tDiyrd4rjSr;uuk.q^uFhiq{u:v8tjva8cs$s'gE8hrvr$kjh(aIj9hycerDuVsa9cu%rgsOu-rJv64;uulruAiOvCu=vFrSi~d9vlnLtxp|tFs:0Psfs_uSvtbZq-u#iytFs^vZv0r9a#8hrWv(gEaxv$vks7r'uYiksjr(a50@rzlzs@h)mrvZsrv1jCvxuui2lou?r_t2v7r|rQbdw6rtv)lBtpv?2rtrttttvO02s9uQh'tBs=vWc8u`vUw2jblGtNqytQ0pfT0m1mpinIejf0m.ohl.fp1woJ201.e5mOvSt+m6p32hl@e#tZ2Tt#1Ce#t p3mb1;fWu4f)2|u7p(u9f:g2ucf@28qr9Uqtf~ujqwum6juo3auqsNr;0*uvw8iOxeuzjKxhqMt5glxiqQuIq'v}uLcWuNk6wwwtlcrEvUq*u}s(v^w1rGv2u(ifu@sxcFxekBvEbdxPvHxSxMtmwi9CdekQ8fwntvtu7@twp`tyuTtA0Bq1xzkf0Glax;jyxGwxgFslx{v.v r#x^r-02v'xEvh8/htv/v,cRv=v:h'u!ye4}v`a7y9y0v|kIc6uKrZiDr(h.x:y6vllEw1wBhIuowEtPlLnti+fQ7tyF0/0;0?0R02.