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

.128013So4l7s_60:w+pPnA[1cji)-e3,(v];uyqTRN./hgk2C*=Ftfra98d é!m5b050#0y0V0Y0v0e0g0$0t0e0Y0g0g0T010V0v0n010406050g0F0)0)0Y0X0G040b0c0e0F0 0c0p0$020Y0)0n0E0$0J0y190X0H0F0y0g050M16181a1c140n04051H1A1K0M1H140#0v0C0@0_0{0}0_0p0O0F0Y0O0y0x0n0G0V0N1j0$0N0v0O0N0e1:0N0V12050/0+0e0y1T0`0|011/1;1?1;0V1|1~1`0V0X1I1+0@1f0g0n0Y0p0}0Q01201V010W0;0y0p1n0y1`2i2k2p222s1~2v0)2x040a0$0o0X0c0n0c0g0v1i1k0-2g0X0X0y0t2S1A2z0p1I0M1+2(2c2e2d1{0#2B1W0v0p2u2P1`1Q1S0^212=2@0p0c2{1`0n2X1I2$2(38152j1k2}2q310X190e1`0Y1.2X0W0}030h0h0t320y1?300c0x0d0x0s120$0s1A0Y393c133b2A3e223g3i3k3m0y3o013q3s3u3w2^3z0x2n040$0Q3G3I2k3K2$2;013P0Y3j1I3l0N3n3p3r3t0-3Z313#0z3D0z3+2#3J143/3N0}3=3@053_3{3V3}3Y2?3!3A0d3D0d461B483L3d1U3O0c3h3?3R3`3T3|3X3 4l413A0*3D0*4r38493c3:4d4B4h3W3~3v4H3y3A0i3D0i4N4t4a4w4c4y3Q3^3S3U4V4k3x3#0f3D0f4(3-4P3M4+3;4-4A4/4C4;4j4G4@3A0!3D0!4|2%4~4v2~514z4e4g4D4i4F4X590x0Z3D0Z5e3.4Q4b5j4.4f4:4E4W404Z3B0j120s0j5w5g4R525l5D5o5F4Y3#0s3C045X5N4u5P5k4T5n4=584m3B3%0s3*0M3H474}5$5z4S544U575q5-0s435Z455=3,5f5_505{5C555E4?604o5Z4q655@674*5i6a5m565p5G5W4K5Z4M6j4s5^6m3f5Q5)6q5U5r0s4#5Z4%6x4O686n6C5|5*5~6s3A0s4_5Z4{6L4)5y696P6b5}6r5V6U5b5Z5d6Z6z6#6O5(6Q6E6e4I3B5t5Z5v6:6l6=6B6@6(6R6*5r0Q5J04795#6A4x746p6d5,6{0Q5Y7l7d727f5B7h5T6`5H0Q3%7w7o4 6?7r5S5+5 7k620Q645?6y717A737C6c7t7j7v6g0Q6i7K6M7e4,7g7D6S6+3$6u0Q6w7X6!7N7q53756_7S3#0Q6I7_7z5h7O7;7s7E6T3$6W0Q6Y7-6;7/7!7P6)6F5-0Q6-8f7|5%8b768d7k6}0Q6 877M7}7:5R7Q817(0z7a8z8i5`6%807%5r0z5Y8I8C6$7#8w8G5-0z3%8R8L7B7 7$778Q620z7J665x895A8W8O8Y6{0z6g8/8U7~8v8c7u426u0z7,8%1L361A2{2+0#2e2:5z4W2`1R1I350y373J6k1I4W9e2A0v0#0}3r2$5W3R9l9n8-5H3C0$2F0y9t8m9v1`6j7Z010P0p120W2M0)9g6N2q0l3D9N9F0p9I04191+9S7p0}9Q3(9Z8)9H120v1o4y0V9g0$9O3O120g0H0X9/7L3K9|5$9s019o3c7^9r9ma19ua49x2w9A8_3A3%3+149~3/a0a22k42a5ac7@3A43aa2Gap7F5H62469F0P123N9(8t9#9Rai9!3;0t120R1a2XaE3:11040k9gah3aaja6al0p3#6g5Caka84n2o9yav82a%650$a=9;aA120-0WaQ5z9$9;aI8)0W0)123r2?2R3ra|50aS0Bb95i0+aS0g3va{b0aF01aS0A9:9=4c12310)0+2X1zbkaR120waU9|aW9faY9t9p4Jaoa79B3#4Kat9zbLad0x6u3+a?bWa@aJbf9@bibd2q0c120Lb%9?044y0#aP9|bY8)b)040Tbp9T0+9+0p9{aXaJbbb,br049^9`c4bm12bcby5`b}042Ec9c3cd69bs0cbubwcibA0w0waVaQa)bI0x6Ia(aZa*cya,abbRaqcD2(3HbXa?bq01b!c6b$ck5ib^b+cS3f12290y0Y0Fb{aJb^b`b=cNaS0r0rc99Vbtbv1ycq04c/cWb-0uc%b@120mc~bl9V0vc9b^0Sc9cPbh0ebjc1c 04cVded312b/b;dibz040Dd23:aB040W4ydr5`12c}c+9F0c9$2?dx69cf0X2k1$c^ccdn5zdacRdO50cUc:dk0Xb:0yc^0wdqdBaJdtdv0XdG6n9+d,b(dE0pd/3OdIdKdZc{0}cjdSbebgdRbFc(b*dVb.dXdme28)aSd#cubycwa33A6WcAa.7(4_bPek5rei65bE3-9 cBcx6-ejcGaw3#5benez82exa;cMa^04a`c9a~c:0W120Y0W2s0t0Nd`d~2qd}e9bldQdcd!bC6Meeeveg5sbK8P6{5teDe:5H6}azaJa~cLa eX220g0#1202030z0Z0Ef4f6f8f5f70qeS0veU1 0F3daO0%f9f7fnfbfaeddnefam6U7aeye@5W5Je?cC5L9DcKe}cNd)dwd%8)9V262@d?0}dDb~fQcOe0e%d{01dUfY9VcZc#c^e)4te+bHe-5Xe/fD9wa-eE7(f/cJ3(e}bWcN0pcf352?c0e!dodNg4dycg1:fPfYebfsg4fua#6Uaf3la)bMgicEauf@6Gafercve,fv3BaygkcBgmgxgobQfz6UayeHa=fIa_3TeMaHe 4cePc6cn2G0hfOeWg7bacbd9fWddgY5ibnfUd4e(geetbGa7cx0sa%gzeo6fgDg_6{g?fF9jble|cLc9f1f3fcfqfoh7aN0e0t0F1~0$0_0$0ggT1 0-0?0C3?0y0F0X0?2UhhgW0$0vfphzh7g.2%euf-gw0sbUg^gq60bOf?gF3BbUgIbXf~9@hkfUc)fU0)0v125MbDguhFgh3BczhJhO6Hg{hKg}czhRf}eJd*g+dzhWd;g+d^1YgXg/c2g!fYe$g%i3dfdhg(cXe6dYg-h%f,g;f.eih-fDemhNing f|h^aJ9Vhj18i22%b?blhXfLdjgSixhWd0fUi7d6e4f#cY0Y1}c!c$gc12c`gP3;d.iTdpiVicc|c^d$e*ftgvh*0seximgBi.h:h.eGfGh3eJ2X0Vhrd=iD4RhUiGihi+h)5We_i:bS0se=ipi;e_gtiia!7^fxj9cH79i?cCjnf`it9)gLi8hD9FeNf#gRiwgU3t0e1jgbiWeZi9e#g$c^boj0g8dAjHbAf*5^jh0hcx7lf:gBjYfCj!5Ye`8)h2hSfYh504hAfafphbhdhfhhjBhl1y0$ho1~hrht1 hhjDjF1 0uj:h9frj4gfi,7^gjhxgAbS7wjoj!gsi_hS9Tj22GiHb_hYh!04h$i*kcj6aegykgg|7vasjdkigHknjsblfJd+jOcl04d5kPcTh~kT3fi0dLiZg6jJ3:iKfYf!iW9Vdliyh0dobBhCk/gg7^g@kDh;7Tkkkia:kKfHkpiFkrkW22iC38iAj1l3k.l95zb^d1l50}k(iWk*i$c5f%iSjRc_e5kSlq0Di#k$jPi(k=hEijgw7+jZkihMcFhOlEjrl1d(12i|i~h{lblAg:jiaeh,k`lJ4#j$kih?3Hesjw4Qk@aeillYjpiolIl:ireIlNeKgMfYjyk+gR1y0VjW1t0v0h190O0v1wk.c,i5iWljlmca04k;kbk$l,3$i/l/j!eCkHjmi^f{i`iukq0y3X18fjlccNl73Jld50melxdTiMk+mxgVgama9FjIl*8)hZh#d!lTl+kdaej8mokijcl=j!jfl0gJh_fKl8hTkRh}fTlh3;kYmQi404k#mTjKb#fXlkmLmfk,e7m|eajSmY9km!0x8zlFcHngl#nifxh@lMjtkRjv9%9FmIn03:llmJd-lbmO0OjGmfmSk/g8ltnEbAks0(c*m;l2j`mz0)mBf)nc1kml8InheAarf=m*bSnYlLiskol_lP0Xi nOd(aL040U3?bhnVl/cx8RnZ82n~nkn!nfkmmun,nph`m_9VjQmFmDkVn;fMm{dMg#n2nrmDn5nyidk-igkymkne8#n 8ykGn%nikJo6f|gKnqiJjLk)oonvg8nQk49Un9blnFm=ocop22gdm_b^nMlRoNgTnTiZjT67jVn}k_gln(4oo2o0k oDn+mG5idtn.n:odaAn?n^0=lco_a=l)k?ovhIm%nilHgphO8|l@mvnpo}fU0Pn?0I0X1xlA0M9i8 9d919a1A0V94py2.2)iP1~2(921GnG502X0)0h0W0Y0Pmy0N621s1um90?o*2(1O0,1R3:0Y0#0)1j2R0v1-2?dv121Gp%p)p+2S0x0 0V2an@1j2Zp-1k059i1C1Apt1N3K1H0K0c0F0?c#0Xq10?0n0F0$1h0;0vbh0Xhg3ldv0pq01-cO0F0;0V0x2?2oq33uc617q6qF0$2U0o1*1,i p!1K7s1^0V0n0g0k0M0M0#0c0t0g0L1)1+1j0L4y0O0M9K0M0z0M1?bv1Eq/fjqv0pq%1^0)0e031C9@qH6xp!qZ9a1P0.0:0=0$2N2ufR0n2up;15171u1c0J0%2Oq}j|3?0V0yn/0Y0 0Cc@1Brm1Eq9040q1h2X0$2O0{0v0+qn0V0%qK1 0Xrq1jbhbxp!2{3:1X1Z1#1%q)qO1.1@261^2yaJ2D2u2w12qMq*o~et9ch08~ptlUjWa30*3Box4@s4n$pea8s82o8,bMscf`oFeLl|gOn6jAhknBnDoVd|mcmfnupJg)12jNogiEnIsrmgmiotnvk@s4kfo/7@sJk}sM3$sd8^sPo5cNj+h4f2j/h7k80Ej?hek23lj`rShnhpk0rSqrhgmPhxs#fpn{sInfs63!s4ozsasfs|8Xt2oCkLlaj`ksnNo iucfq5k!okcQn3mfnxoLkQloc^lwtmnzsCtreY120DctmjsHkds4o.khsPo;mreAtCsR8l8_tJn*o`2qo|0.lQoamxs`tBbTs}41s4pdgEsbtYt4tMtYf`p7lBjis4lXsLtIcDo=5Vt;tK7?t@l%swtQjugN9%jzmNoOsqtuoWstsDsvmb04sztcfMh|iZsFf+j5lCa#s4l.t?6suqsOt@emset+eq5?jx3DcMj-sYs^ha3?j@s)hihks,j}s.hss:k31fk50$k7s!uYkasGp8j6s4mnust`0xmqoAt@eCuysPmtt7oMhVoY12tb3-tPd@r49Mk!tqu022uddCoKv4lnpEiRtplsi(v3oTlzm_kNlRttnsc(ofuhd3oitgi6oIn4dge5oruktxtWu%e.4/u*s7e.t_vHe=u;t@m,o6oFpktUlStz2(q7r}pw0C9}0-0/0;0gv!rbv%04.