Carrés semi-magiques

Nous travaillons dans cet exercice sur des tableaux carrés d'entiers positifs.

Nous appelons un carré d'ordre \(n\) un tableau de \(n\) lignes et \(n\) colonnes dont chaque case contient un entier positif.

Carré semi-magique

Un carré est dit semi-magique lorsque les sommes des éléments situés sur chaque ligne, chaque colonne sont égales.

Exemples avec trois carrés

1 7
7 1

carre_2 est semi-magique car la somme de chaque ligne et de chaque colonne est égale à 8.

3 4 5
4 4 4
5 4 3

carre_3 est semi-magique car la somme de chaque ligne et de chaque colonne est égale à 12.

2 9 4
7 0 3
6 1 8

carre_3_bis n'est pas semi-magique car la somme de la première ligne est égale à 15 alors que celle de la deuxième ligne est égale à 10.

La classe Carre ci-après contient des méthodes qui permettent de manipuler des carrés.

  • La mĂ©thode __init__ permet de crĂ©er un carrĂ© sous forme d'un tableau Ă  deux dimensions Ă  partir d'un p-uplet d'entiers nombres. Nous remarquons que l'ordre du carrĂ© créé est la racine carrĂ© de la longueur du p-uplet passĂ© en paramètre. Par exemple avec un p-uplet de taille 4, on crĂ©e un carrĂ© d'ordre 2, avec un de taille 9, un carrĂ© d'ordre 3.

  • La mĂ©thode affiche permet d'afficher le carrĂ© créé.

Exemples

Python Console Session
>>> nombres_3 = (3, 4, 5, 4, 4, 4, 5, 4, 3)
>>> carre_3 = Carre(nombres_3)
>>> carre_3.affiche()
[3, 4, 5]
[4, 4, 4]
[5, 4, 3]
  • La mĂ©thode somme_ligne prend en paramètre un entier i et renvoie la somme des Ă©lĂ©ments de la ligne i du carrĂ©.

Exemple

Python Console Session
>>> carre_3.somme_ligne(0)
12
  • La mĂ©thode somme_colonne prend en paramètre un entier j et renvoie la somme des Ă©lĂ©ments de la colonne j du carrĂ©.

Exemple

Python Console Session
>>> carre_3_bis.somme_colonne(1)
10
  • La mĂ©thode est_semi_magique renvoie True si le carrĂ© est semi magique, False sinon.

Exemples

Python Console Session
>>> carre_2.est_semi_magique()
True
>>> carre_3.est_semi_magique()
True
>>> carre_3_bis.est_semi_magique()
False
Question

Compléter le code ci-dessous, puis le tester sur les carrés carre_2, carre_3 et carre_3_bis.

###(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

.1280137*h15-js3:/SC nA!é0e.]RT2;cfaow4)(+,_u[qb=v8imFtPN69pdrgylk050$0u0W0D0T0*0i0o0B0*0D0i0i0Q010W0T0#010406050i0M0U0U0D0%0)040m0E0*0M0 0E0p0o020D0U0#0A0o0x0u190%0O0M0u0i050l16181a1c140#04051H1A1K0l1H140$0T0R0@0_0{0}0_0p0(0M0D0(0u0g0#0)0W0d1j0o0d0T0(0d0*1:0d0W12050/0P0*0u1T0`0|011/1;1?1;0W1|1~1`0W0%1I1+0@1f0i0#0D0p0}0z01201V010C0;0u0p1n0u1`2i2k2p222s1~2v0U2x040a0o0X0%0E0#0E0i0T1i1k0-2g0%0%0u0B2S1A2z0p1I0l1+2(2c2e2d1{0$2B1W0T0p2u2P1`1Q1S0^212=2@0p0E2{1`0#2X1I2$2(38152j1k2}2q310%190*1`0D1.2X0C0}030L0L0B320u1?300E0g0G0g0e120o0e1A0D393c133b2A3e223g3i3k3m0u3o013q3s3u3w2^3z0g2n040o0z3G3I2k3K2$2;013P0D3j1I3l0d3n3p3r3t0-3Z313#0j3D0j3+2#3J143/3N0}3=3@053_3{3V3}3Y2?3!3A0G3D0G461B483L3d1U3O0E3h3?3R3`3T3|3X3 4l413A0f3D0f4r38493c3:4d4B4h3W3~3v4H3y3A0Z3D0Z4N4t4a4w4c4y3Q3^3S3U4V4k3x3#0b3D0b4(3-4P3M4+3;4-4A4/4C4;4j4G4@3A0S3D0S4|2%4~4v2~514z4e4g4D4i4F4X590g0!3D0!5e3.4Q4b5j4.4f4:4E4W404Z3B0t120e0t5w5g4R525l5D5o5F4Y3#0e3C045X5N4u5P5k4T5n4=584m3B3%0e3*0l3H474}5$5z4S544U575q5-0e435Z455=3,5f5_505{5C555E4?604o5Z4q655@674*5i6a5m565p5G5W4K5Z4M6j4s5^6m3f5Q5)6q5U5r0e4#5Z4%6x4O686n6C5|5*5~6s3A0e4_5Z4{6L4)5y696P6b5}6r5V6U5b5Z5d6Z6z6#6O5(6Q6E6e4I3B5t5Z5v6:6l6=6B6@6(6R6*5r0z5J04795#6A4x746p6d5,6{0z5Y7l7d727f5B7h5T6`5H0z3%7w7o4 6?7r5S5+5 7k620z645?6y717A737C6c7t7j7v6g0z6i7K6M7e4,7g7D6S6+3$6u0z6w7X6!7N7q53756_7S3#0z6I7_7z5h7O7;7s7E6T3$6W0z6Y7-6;7/7!7P6)6F5-0z6-8f7|5%8b768d7k6}0z6 877M7}7:5R7Q817(0j7a8z8i5`6%807%5r0j5Y8I8C6$7#8w8G5-0j3%8R8L7B7 7$778Q620j7J665x895A8W8O8Y6{0j6g8/8U7~8v8c7u426u0j7,8%1L361A2{2+0$2e2:5z4W2`1R1I350u373J6k1I4W9e2A0T0$0}3r2$5W3R9l9n8-5H3C0o2F0u9t8m9v1`6j7Z010+0p120C2M0U9g6N2q0F3D9N9F0p9I04191+9S7p0}9Q3(9Z8)9H120T1o4y0W9g0o9O3O120i0O0%9/7L3K9|5$9s019o3c7^9r9ma19ua49x2w9A8_3A3%3+149~3/a0a22k42a5ac7@3A43aa2Gap7F5H62469F0+123N9(8t9#9Rai9!3;0B120n1a2XaE3:11040k9gah3aaja6al0p3#6g5Caka84n2o9yav82a%650oa=9;aA120-0CaQ5z9$9;aI8)0C0U123r2?2R3ra|50aS0Ib95i0PaS0i3va{b0aF01aS0K9:9=4c12310U0P2X1zbkaR120HaU9|aW9faY9t9p4Jaoa79B3#4Kat9zbLad0g6u3+a?bWa@aJbf9@bibd2q0E120vb%9?044y0$aP9|bY8)b)040Qbp9T0P9+0p9{aXaJbbb,br049^9`c4bm12bcby5`b}042Ec9c3cd69bs0EbubwcibA0H0HaVaQa)bI0g6Ia(aZa*cya,abbRaqcD2(3HbXa?bq01b!c6b$ck5ib^b+cS3f12290u0D0Mb{aJb^b`b=cNaS0N0Nc99Vbtbv1ycq04c/cWb-0hc%b@120Jc~bl9V0Tc9b^0cc9cPbh0*bjc1c 04cVded312b/b;dibz040wd23:aB040C4ydr5`12c}c+9F0E9$2?dx69cf0%2k1$c^ccdn5zdacRdO50cUc:dk0%b:0uc^0HdqdBaJdtdv0%dG6n9+d,b(dE0pd/3OdIdKdZc{0}cjdSbebgdRbFc(b*dVb.dXdme28)aSd#cubycwa33A6WcAa.7(4_bPek5rei65bE3-9 cBcx6-ejcGaw3#5benez82exa;cMa^04a`c9a~c:0C120D0C2s0B0dd`d~2qd}e9bldQdcd!bC6Meeeveg5sbK8P6{5teDe:5H6}azaJa~cLa eX220i0$1200f40qeS0TeU1 0M3daO0sf400eddnefam6U7aeye@5W5Je?cC5L9DcKe}cNd)dwd%8)9V262@d?0}dDb~fFcOe0e%d{01dUfN9VcZc#c^e)4te+bHe-5Xe/fs9wa-eE7(f!cJ3(e}bWcN0pcf352?c0e!dodNf_dycg1:fEfNebfhf_fja#6Uaf3la)bMg7cEauf)6Gafercve,fk3Bayg9cBgbgmgdbQfo6UayeHa=fxa_3TeMaHe 4cePc6cn2G0LfDeWf|bacbd9fLddgN5ibnfJd4e(g3etbGa7cx0ea%goeo6fgsg+6{g(fu9jble|cLc9f1f3f4aN0*0B0M1~0o0_0o0igI1 0-0?0R3?0u0M0%0?2Uh3gL0o0TffgZ2%eufYgl0ebUg*gf60bOf(gu3BbUgxbXf:9@h6fJc)fJ0U0T125MbDgjhpg63Bczhthy6Hg-hug/czhBf/eJd*gWdzhGd;gWd^1YgMg!c2gPfNe$gSh:dfdhgTcXe6dYgYhNfXg$fZeihTfsemhxi7g;f.h#aJ9Vh518h/2%b?blhHfAdjgHihhGd0fJh@d6e4fQcY0D1}c!c$g112c`gE3;d.iDdpiFh|c|c^d$e*figkhQ0eexi6gqiUhWhUeGfvg^eJ2X0Whdd=in4RhEiqi1iRhP5We_iWbS0ee=i9iXe_gii2a!7^fmi_cH79iZcCj7f,id9)gAh^hn9FeNfQgGiggJ3t0*1jg0iGeZh_e#gRc^boi-f}dAjrbAfV5^j10Lcx7lf#gqjIfrjK5Ye`8)g@hCfNg`04ffg}g h1h3jlh71y0oha1~hdhf1 h3jnjp1 0hhli;g4iS7^g8hjgpbS7wj8jKghi$hC9Ti/2Girb_hIhK04hMiQj^i?aegnj|g.7vasi}j~gwk3jcblfyd+jycl04d5kvcTh+kz3fh-dLiJf{jt3:iufNfPiG9Vdliig=dobBhmkRg57^g)kjhX7Tk0j~a:kqfwk5ipk7kC22im38iki.k,kQk=5zb^d1k.0}kKiGkMiMc5fSiCjBc_e5kyl60wiLkIjziOkUhoi3gl7+jJj~hwcFhylkjbk*d(12i)i+h(k@lgg#j2aehSkZlp4#jMj~hZ3Hesjg4QkWaei5lEj9i8lolSibeIlteKgBfNjikNgG1y0WjG1t0T0L190(0T1wkQc,h=iGk l2ca04kTj@kIlO3$iVlRjKeCknj6i#f-i%iek60u3X18fbk^cNk:3Jk_50l`lddTiwkNmdgKf l?9FjslM8)hJhLd!lzlNj_aei^m4j~i|lUjKi k)gyh$fzk;hDkxh*fIk}3;kEmwh;04kHmzjub#fMl0mrl{kOe7m#eajCmE9kmG0g8zllcHm|lHm~fmh!lsjdkxjf9%9Fmom)3:l1mpd-k@mu0(jql{mykRf}l9nkbAk80rc*mTk+j#mf0UmhfUm^1km18Im}eAarf%mMbSnElrick4lYlv0%i,nud(aL040V3?bhnBlRcx8RnF82n%n0nGm{k2manOn5h%mY9VjAmlmjkBnTfBm!dMgQm+n7mjm.neh}kPi0kem0m`8#n(8ykmnJm~kpn/f.gzn6itjvkLo4nbf}nwj/9Um=blnlmUn^o522g2mYb^nslxotgInziJjD67jFn$kYganK4on+n)k(ojnNmm5idtnQnSn_aAnVnX0=k^oYa=lLkVobhsmJm~lngehy8|lWmbn5o$fJ0+nV0y0%1xlg0l9i8 9d919a1A0W94pe2.2)iz1~2(921Gnm502X0U0L0C0D0+me0d621s1ul=0?oM2(1O0,1R3:0D0$0U1j2R0T1-2?dv121GpJpLpN2S0g0 0W2anW1j2ZpP1k059i1C1Ap91N3K1H0Y0E0M0?c#0%p*0?0#0M0o1h0;0Tbh0%h23ldv0pp)1-cO0M0;0W0g2?2op,3uc617p/ql0o2U0X1*1,i,pG1K7s1^0W0#0i0k0l0l0$0E0B0i0v1)1+1j0v4y0(0l9K0l0j0l1?bv1EqRfbqb0pqJ1^0U0*031C9@qn6xpGqF9a1P0.0:0=0o2N2ufG0#2upT15171u1c0x0s2Oq$j%3?0W0unR0D0 0Rc@1Br21Ep=040q1h2X0o2O0{0T0Pq30W0sqq1 0%r61jbhbxpG2{3:1X1Z1#1%qLqu1.1@261^2yaJ2D2u2w12qsqMo%et9cg=8~p9lAjGa30f3Bod4@r-nIo`a8r;2o8,bMr^f,oleLl#gDm/jkh6nhnjoBd|l^l{nappgU12jxn|ionos7l|l~o9nbkWr-j{oR7@spk$ss3$r_8^svn.cNjRg_f2jVg|3?jYj-3lj#ryh9hbj+ryq7h2mvhjj?smo;i?r-kisreAsZsus$m{sx8l8_s%nMoZh}j#k8nto(iecfp.kGo0cQm,l{ndorkwl4c^lct2nfsit7eY120wctl snj_r-oQj}svoTm7s)oTr`s-3zo}s:22o#0.lwn?mdn!sobTr/3!r-o_gtr@tD8Xr{tDf,o:lhj2r-lDs#6stSs(tVcDtLtrlJsc2qdtr iGl$s2mtous6taoCs9sjsbl@04sfs^fBh)iJslfWi=lia#r-lQtU5Vu5tXu80gemtqsveq5?jh3DcMjTsEjWsHh0sJh4h6sMj(sOhesQj.1fj:0oj=f4tBth0gm3u7r:uGuauJeCues)m9krk?s=oE12s@3-tu4cs`q.l60It6t%22t^dCoqu)l3pkiBt5l8iOu(ozlfmYktlxt9n8c(n{t|d3n~s|h?oom-dge5o7t tduEsYe.4/uItFe.oUube=uOtYmOn/olp0tzlytf2(p:r$pc0R9}0-0/0;0ivCq@vF04.