From 43b02a553737a6800fe0be599fa4c739da660c53 Mon Sep 17 00:00:00 2001 From: Geoffrey Frogeye Date: Fri, 7 Nov 2014 01:30:48 +0100 Subject: [PATCH] =?UTF-8?q?Ajout=20TP5=20&=20TP6=20&=20M=C3=A0J=20=C3=89ch?= =?UTF-8?q?ecs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +- S1/Echecs/sprites/Martin_p.gif | Bin 0 -> 13910 bytes S1/Echecs/sprites/TourB.gif | Bin 0 -> 3083 bytes S1/Echecs/sprites/TourN.gif | Bin 0 -> 2336 bytes S1/Echecs/sprites/cavB.gif | Bin 0 -> 4370 bytes S1/Echecs/sprites/cavN.gif | Bin 0 -> 3292 bytes S1/Echecs/sprites/flamand-rose-67ef4.gif | Bin 0 -> 9271 bytes S1/Echecs/sprites/fouB.gif | Bin 0 -> 3529 bytes S1/Echecs/sprites/fouN.gif | Bin 0 -> 2495 bytes S1/Echecs/sprites/pionB.gif | Bin 0 -> 3108 bytes S1/Echecs/sprites/pionN.gif | Bin 0 -> 1926 bytes S1/Echecs/sprites/reineB.gif | Bin 0 -> 7098 bytes S1/Echecs/sprites/reineN.gif | Bin 0 -> 4954 bytes S1/Echecs/sprites/roiB.gif | Bin 0 -> 4178 bytes S1/Echecs/sprites/roiN.gif | Bin 0 -> 4698 bytes S1/Echecs/sprites/tstimg.py | 19 ++ S1/Echecs/tests.py | 222 +++++++++++++++++++++++ S1/Echecs/testsQt.py | 222 +++++++++++++++++++++++ S1/TP 3/date Camille demo.py | 136 -------------- S1/TP 4/plusOuMoinsYOLO.py | 2 +- S1/TP 5/billard.py | 79 ++++++++ S1/TP 5/brownien.py | 68 +++++++ S1/TP 5/carres.py | 120 ++++++++++++ S1/TP 5/module.py | 64 +++++++ S1/TP 5/polygones.py | 129 +++++++++++++ S1/TP 6/suites.py | 212 ++++++++++++++++++++++ 26 files changed, 1138 insertions(+), 138 deletions(-) create mode 100644 S1/Echecs/sprites/Martin_p.gif create mode 100644 S1/Echecs/sprites/TourB.gif create mode 100644 S1/Echecs/sprites/TourN.gif create mode 100644 S1/Echecs/sprites/cavB.gif create mode 100644 S1/Echecs/sprites/cavN.gif create mode 100644 S1/Echecs/sprites/flamand-rose-67ef4.gif create mode 100644 S1/Echecs/sprites/fouB.gif create mode 100644 S1/Echecs/sprites/fouN.gif create mode 100644 S1/Echecs/sprites/pionB.gif create mode 100644 S1/Echecs/sprites/pionN.gif create mode 100644 S1/Echecs/sprites/reineB.gif create mode 100644 S1/Echecs/sprites/reineN.gif create mode 100644 S1/Echecs/sprites/roiB.gif create mode 100644 S1/Echecs/sprites/roiN.gif create mode 100644 S1/Echecs/sprites/tstimg.py create mode 100644 S1/Echecs/tests.py create mode 100644 S1/Echecs/testsQt.py delete mode 100644 S1/TP 3/date Camille demo.py create mode 100644 S1/TP 5/billard.py create mode 100644 S1/TP 5/brownien.py create mode 100644 S1/TP 5/carres.py create mode 100644 S1/TP 5/module.py create mode 100644 S1/TP 5/polygones.py create mode 100644 S1/TP 6/suites.py diff --git a/.gitignore b/.gitignore index 425f315..c03b345 100644 --- a/.gitignore +++ b/.gitignore @@ -54,5 +54,6 @@ docs/_build/ target/ # Custom -*/sujet/* +*/*/sujet +*/*/aide *.zip diff --git a/S1/Echecs/sprites/Martin_p.gif b/S1/Echecs/sprites/Martin_p.gif new file mode 100644 index 0000000000000000000000000000000000000000..85d788406c71f7994d72a5fbeb7821f2e17a3af1 GIT binary patch literal 13910 zcmZv@c~}$I8$UWr_KhS22oN+Zfv_k+wt$FXl}#KF5D|4)R0Px@h|y}llLbT;8xau& zbx^^es6i3Ystt&UTMa4{6)lPj+S&%SEw#4Xcz@5m&;8?`=glYY%=x@$nKLsd=RI#0 z#70X4v+99*;4k3+PCNkMiN6BREMlJ6d}Kz17b50`AYuS8=b4YiV!-?nixF`MAPy0W z%~>G|F@lH@g*ewNcnAQ5@XTV)1it2n03jh}M7|OcGb%!Ik&s+7;vot}hyq7=fVp(U zTw(}-gqRUQ5a4ThUy}mK6(hL_l519QM4>>;{A#ldAoxJ87|0cib3=gK5OFR7F2-@>Yi(cC0N#n< zoeI1Y$2-ls2_G21%_W$oJ9EXI3bP=c)#A=-Gb%c9q!TxznLE(giF9@>s&VjE@ zHk%HZ6;tP^X+VJtREr0y&8Qf_kpbL{W&>oPQ!((>a$sNp85mG}t>H7^WoHvNQ9L=CE?M4VS`Ba*EKvV%Me$Er6-%pu9<(bnLo{>&q3OA9DKuJ{6i8 z;kHIs*)mD^#Scz#O*7~!!I(a00Yr=9t~1{Oz$VXWv>Su+|=1dhXA4qtcb*clP@V=zA{~ zm)}qxX;w@I%`WKHyQg41Hr_MSdbq1+W7^cK`JpZ`K0w0oe2c5m7eBrmJn308Bc;;% z{V(<6P2XRhzyPbz3kc`Mp7I*oth%)Q-=wV@4JzpP@!&TCPvf7(O&ZyB=<%4{e-`^! zr0gGWxeY)3q1xT9JU0!GKPOdgl|^oEUORrLmLhQ7e+-GFIEdMZhgGL#Z1%!q50e<@ z%O5D|>@r>=spz}`^3e5G1r8SGBzhGh&J53SUU4EhjX2e6Tg=#SZ+*?a#RAUo02zol7M7#+Nyel{=TKiJt*vhiw(TwzuVPp#mr-I#x7VQ)@vTLK5g+^H~DX`jPAXp1z z7}L2z8^w(kPpX4bN(Wu+BmBmQEFTPsVmKJs5sb8l(}pN(3;n0Z5o`Z_Ik;fXmAA=> zJsp0Qjc|~`0F!T>Z%!#niaD+(gaF}mCQpwA1m;eLIhTv?55NHeAq-eP^Z_9n#)$)1 zJWK^y@=P+W6Nad5grgENH>&VMKN-866=ju{4lWQj=zC+MPfyZD<(D20JI0lC+&r1S zz{+16aqrJQyJg1LuL}?Aiw23TO=5_|7yl}W<~Y>}!2`q);Sp33fYOwnZ`| zLZys;EcQ)bvBxKLk^S+tJjBhXH<}UEhh4Y90$)_{_ibJQ5g`GvfmuGj&3v^Hq=#Tr zjf69Uaio+=5f@?phqsx+CN1O!c&mx9Ya!EZ?%SB9nZAwf?V3P(Y+8}_1;BLa0|h8R z7W-Ym$w)R>EDd&9_;J1bUD@fjbh}WuvMt6Yg4RqmVIbbeSf8^SPV=9x&2y_hHzxUuaO^t&To>?+TFAm9K zUu52j`c&dc@mRE8em`}&N6GOErc$ZH+PrW-_LKI+d+D>r4AHF0hb@q@}`@G`G`fPW(OrZM9e=%Gfi=L9p|y6p0YC#*EWLWMI{ za6a}z2fqTgE)>RDcRB`~-d(fa#j;>DB|2n3@8nDW$%SdE{tu;jUTkGYa$2UT_gf zg^UY0qsGFmf^l-jORvgR?Tc<*KJZ<|tLd!E&6CLM+=pLkFZhSfqb^PytlEJ0OWvTI z`g=ar8$zOePAcH~`GZh___d%k7ZzF*E3FcawsuSr#gza(;Bt@6u+U)N#T$GQ{`=kg z1?(F2b;*9og&U$j?y3{x?x=T_Q6v=aLf-~x4bUsN)bPQ(^ivJ#vXcIS-!GLWRr}{1 zx6znLivHbI#dSDb2*CEiGHMzlhhK>kVYGvqZd6$^1|ZICB{i7uOxoE^*vDSXumiAb z-@F^C@ce|5Pc&Q)PHOxgF=WO2eE%bWTt@4%q->aSVmD4L5NgR(pFNaRcK1s$#kMYI!J*Cd zLtcMgkzd-mA@+Xl4&vgmRb9+Jsg%dM(@a@viXy*c>p!rCB(WSLjx14;2 z&^|#(AZnFFzahwz@S?>H2!rSRcbp}cy@6MmAUb0}Ue;dGw{*m>(9k&A(3e+(Y~T<*?EKp|=j#CI`agzAIaEyOaB zn@mZqP%@kNWUr}IN;(QzHi;v>xB8G@9SFD?p~Pb{?zCTgTB`ifKY0D!s(R-$eO(=Y z4^1!f>fFO0?b)&Hq|zx*c8*?wCOZjx2ncZ34#go6y0o>hwUnyGNKqJpEd-oUu+^DF zp#;|Kwu|>ca-d#IYNjn zFQo#|uMt3yFL3@^=#v!SiW;B*DoX(BUJP67Ed{Ta#acT$Ukm%;en^4Hv4v#6vDI3f zRlF1+`&PgU(V)#n!dxw2C5J@_^s$c6oC~_)fCz;|2uPa-yyHx<0m#NwoZ`UV@J0yh z0s5*`qC!jFg0OBNbd8?(PpXg#Zifef>%MbRdw|hb(d6Fcww)o#lf=y?pb~-I;zB$yI|aX1c* z6-yx0fHfe5W*L3uw2YVpkZUBYeE_8sWo&c$c77_a)GCMZGSd?LHWlPzdzZT@As-2~ z00GaXvF&g&!KXS7-7AmGcHXUszOLA?8jQjTr6@VpK$zvn=)fuE0C_1Y=|Gv!Q0GgZ z?6!2Jrkv-1EzGOKh+?~7#=pRB@^5X-gk_DLZxqJXPtnVkXHW@Manwb9oHZhYXW z2NxLT*f=?Y88{_VNGJx#*HC6ZK$*8>{Z7=G?I)wOgzH>vD;wC&4= ztNRz$hi7gxGG{h}EXi(+8}|ObElZ0sjNn!Gglm@HIz1>k_oom;0XYmxyr5wb@W+s^OexAxsI|b!M-01AKUz*BzZTv(QXdNroVRRK29qP`$luNlquv)XwY!h# z5LVSBeyg5288wv6;XJW}-Fa`Oc`<66P5sv&x6{b1SXa#4M$*hLQkLFwj^^8W*nAjhwJlEB@S+ z?(SpHyOa_P^1j>GzHsNsVH<$^gnrLR$58443FGB!`We(==X4S4=w#k&31hqV)OSVH z<7`{$Z6a+C@qvL_Vgjxis8>z&YeL3sjHW}GoTW>>>QC;xb-Z)<^jiOt;`)}G!EJ-E z+D;D@-dZsWfM>`6I|KRk81ugT+&-bhlPp&I7=1?otKG=_u84J54nOf>RiZ%p5=tRX z3^OtGhDEx!z*T^9WRl*Az^Ph_ax8`U;WTkS`~1j;18r7zq-Nst)!DZ84=fXSwLAh2 zJ;uooJ7{$##;}1Jg+%omfEppO5O)~X(^_zcew2}lJCsQ1ZBcY4N<6xh5QQ?sg^c*Q zjF~w7V+?&cK%a%j6(E$)js(4dc71yD(dgqPp4Kb>rJOB2SF$7ZXv(W)M%$W&SLqj>}GU=$#Ym2}39~ey+nCl=>Q{zSdG+v#D={Kq>;q8K@F~@<7h& zKp75W^nF6c^`F2<1F2U=E*CPQFlq*}{`oMmK~6o45OO@(mbKP=%N>kJRl+v(v1Af|ele^L*DPL5OZL_tlr$Z(^z%BfEmG`Qy zq!$R2v%-Z;uW2puP`@bEKwA_}nJ=dkfW^T_0SAO21t3RB!0a)ocZ_&^a#5h3G)qP~ z9!d5$Pzy|q*#Oxe4Jg5hg<9fvgc!-*UQ)X{#=V|y&CTT`CE59G(6z5DsJh&kd8-(W`T%9t)QLaYHJY^K1S+PZ`Dcyu)lcwH$~oGcNR( zg9IViein)}xjCaSQ3iAW-s+6Noo<9=cC8aa$j*Ud0UAIg%T1(!1u$p2UYG>tuzM^^ z!@StNob~;d^I965x>m;?NF{Hy>@|@vBl%D?rB}!R{vho$LY@eDlb+HkgqNC#B8>Ql zA4n5IwI4u{(3@iL6AHc2<&d?O5QEchnMg4JIm1Y7Qo$?Ov^P^!OwRI3Kl!HZ1Wm*C zU44ueZOlJnEyzFOT*Z+)a~;qwFBuSRBvvD2&j-YKoZv4}&()i!E?=Rv=4wuvls)`C z8Fa>o{xWh2La9V3as=A$OMYC&wm>e;@U0j-9yqp{_BkvMdi+nB>d_oUC-tePS z-|)?Q%n!6{?9tF;aIJHYi=j#hL(;`?;Plv5C$>9H0_{l|&VE|)dnP2;Qk;!Msu0R? z0;DMUpc*@*#`Zs?EYuSkECZxS02u{cWgrjnt;?2DP~Q!tzJFh55t15**CZ88c#+V$ zCkp^4Bc&84cqc$H!q_>^kk4B1%x0+&g+g_N{mD=uyL>kv{^0iFSx(R{6Ls$c%3Nc_ z(Q~kGpZ^nSK+9rCih;R{W37O4G6q-+=eu0p5NsE=GuAa?uYFkS;khjxhK=!VN#vDU z*jYxNDU5rz-Ir@nhaD?*k%0@1l%Mm)o6(>+oDd|5&6)~bWfLiqLoJJy6n$viuDR#W zg?8@oWdq(qwzOVuE}F$9c9)kKlZaDl-?M~#{^28|0hDo z^$#Ml<)F2(A~XUPV&VQW$Voz`Nba-IP--Yx>;u$U?FP}g=7oCaW}sJP)$-?|!?yO- zZ7014MthV#t6pCWnn%WD1Q(PN2as%J^o(M1kmTi`4-%z%LYAqPj3P57vCi_x)+p?X zLLUPmB0%N>Ytsy*VhO8X0_38kMJOprXt`&n*U(Q79Mun=|8yeWYW3zzt?J-cul-9p zn**-&0Ysem1Im;GG?9UjZKUMj1hwznM-J<&^n^_qY$?1)l!9*i3Bf4&{VB@kX?(W* zDN4T(JZYjneolX*r`nm|%ulebk$KAit8e9hlfTrt$jAOZ_vS9k>sf$hsg0h0kaLy0 zR10_F1ZyF%837Ye;P)eJOCtbj0e=L#xDW`F0G5V#VS9W@Lh!H_W^MshIZ&wuX~9Fv zCV-Y>3N2qjX-1jLP2i8#>qC2~Jq3AaInUOVmK54S`LKfh>PFR&<*Y0(ChFA^mD)(# z;)+lv8D%0lnT-I}0OWG$v%i+GRPXSL&3YkZ4U7>8Y)Ze3UWt(7(&3pHLAZgOy*MBX zgR@N3I5}C0Q&ts|`6&4P2C~0|(XZ|A*AkbVrG!qm(H|g`7oCnb-~K&6Oilu|Z~g`( zZ0Na_&dpI9aiv{kJ>EPTovmdKT03~EfcufU~ ztZT(RNk@7$)BuAQ=jh8EOF=??onHPtoGK};RvsaSS2#s?YQAVyYn%KwyrD>dV9bD! z2-XY-k4|xNbIg7&f6VBpY)h=Nb}-gqAStthcK2PK3=6KTdnrc9L`$CpxggyGJWcZ5 zeakU3Y78^-7JaKjb{{#tXVsohXq&H6$>qjwte%2M)yrH(gHVR^hQ}rD4_lVZ)UUXk@$2*mkkagWWtR0X?~cZ%7DPSP^$~8n&F0DNgi#hV+>_;e zNm$>$$LO^qf1XMeWBLd;Ou;@;RTG7F%I`C7HA&K%M(=Hbb@3c>^?g*+loKCUQQ^S(F3qi+}(jcfm`C1^o*5<`f!cmLxa zIh1_)R500Bc0@_DqsVx<0k)DJ_mfbO?(w#3cOBi2Ce*lpedBB6^Uzfd#osm)o3oDX zjuxa>=6ZBJnZ8pJ_x(TGW0i64uW~s6ULQ$2dDuGrek^V@gsVXQ#Ok`3lHxgc7tuev z&maBI@|JAz`C=`=pPx0hSGL-=pI>}u@?*_!X({YL_7ZyO-6LPF-AZy_nn3g4L82Ix zEYkx_$@Ck;Goq=cRZ1{!xAR_4mszQv@%An!;3NDg42}p(_}J#ZnEnzj2&Lxo6QQM9 zWq}vs{S5vQ)u}!IgjaJPW3bDJEcaA4t=)c(;^;nW9sk8c*E1(-brH<+g(G@HEmzvX zn}L^ElO&{ikJGWc=B97>rv8NE{OX~b3yz08>?5?Cy}0mSemeT3S={!TQM}&q1>87E zkDF+nzP$azgJI~;{gKx3(Y_-y(~LP*#V&a5>vnd^xkm(Y!2Z>Z`}RKS5_epiEjzBe z^ZWeb&ilfNwxR-K=CORwCx+VnTkF<8!A}KYGZVJ7)~z@p{j$(wah1pL9^(4*Lmj7& zZhWc3Ttg|;gyT%B1-QDav-fkNS|K-fSCCGK3zPv$vCN?!p+J&ziY~9=mW~K!rhkt#!KI>eM z@V6P##_4l!H_Tu2p!UwY`X44mBC+Z7Nb~(Q*kYoWhwrl8i;tBVj-{;9WPur*_gz)w^Jl-1ytETFLo?d2xmDW2zsIhtt2^1v)fXfBWnwm5>m&>bG~; zt>7`G)wYgJr~X;gHfKN>7}nx(l6!b4Z-MaG)Q*Kyi&OvllymTN!)?$)fwi2j3pGS_ zXlMKJNI!3iF)nYb;T&B^wcOrS`t;vr8i+P$MeJ{YrLM1&zGVcZJ(L z{CECP`fT#3mEgs{Gj9I)L|B#H@V(1NT}&VNaEELVDVJvE@A6^;R>Sz)z&kyaD~t~X zeyfPCw|r{WR$sH%vv0%Et7`&tn}L&qxy+}f2hG02g^Mp{-n^6R<$17Lmp?k*R*}cc z$q2WYKG8t3)}F=uydvy=X8#g&%VYS|M#yUQzx_dsNp+FDv~YQ9q_FIMSzriib#1EG z!~R&ymyVrn*xpy}_aPG7g~q-1+# z;*rhE(!NbiX>zXgrS zsfoN^VumD=eIKBwCFJnS+0k~iBuaWUtOU!B(-u3Qb6j#bwhtxJ zF+HiexalXFexfaS{&9yHKmXO_T();X*%Z&RXvfa-)K}{&&jKl5Fmkds+(ykV^F8*Q zStq&SOWC?BD^s!LH9uOY*vpOroW5@wgBtGn?663G&MX#(b25x`(!cbw`zgJy0X>zA z)67F5B-Tb1nvA*KcogvYEF=OhQOVcDRKK+OV#=lX1 z#gVzM3#Yv>=zUgnoGdoGPw&eroI(bdv(p{vCB|@TWH)hTpOf_u+H17w*&VbrvC5LE z3%ANZD1R~36!}=6y=(04(RtqS>p!*nUElHZr#AvuCgV$2FiB1pZ2q^5>)pYq8{k2-!=?}WkL?C4E2 zW^tVKi>*jE~cHy_o;5OZN}e+7CjU+BO`UBV_~r8n2i3d@UNMsFuT`iM9`s0 zMnOV^1?q~~ybEL%P@Fkb&Ux>CPE}FU3xSh7%(@e(umE~(hH;|!tdJ0%nawYpinJOr zl!qI8*p*t9(=)Rl?$bQF13Mb{aL#qf75Tp8y?gpoBd7oQb~v>7&ObGqG-m;3=NR>W z=|sGwqjG)qQJcc_@BFuARp%Q(-YiPL1bxnQ+IEe9H?K#Um$mB$7^5#w|LoDK)Gp;g zmRp<%UKuFSDf0z=Q;d1@%O@xCVHSU;sZ2VqDT={J6c-njh_JTx($e;};A3f@TP&1r zc^40M4boztV~Zu^B7pb0u{^#ZsCWYM><&qnkoWyE|F3r>U+In|Y{(vm$tbZn{TyGR z{$8z~g{u8WG(iJ_)QR)lqj0(c3m;HYxFVe1cB;_fKM>MKRkk3~6HNeFYDkp%zuYlGlFfXl=FUB}AXPv|#Td$mL zRE3*}=>sYcJs}+^bIOYjmxV`7KvGl_E>s1k&x>gXZBcb7F0`CH*^%xrZ%?B)ffWdf zdY^ai%yDVU`2G*u%J1J1i^m`feVEe#6aWyU70Ph){g7u~pF*~P5}W|&-5{h_QY9D} zP;z3RY1zp9*=$vjLA6q6_74-hjAazIlJ5>mQMIiC_R^_F!ki9wv^xHBoLslBd+nZ> zo1)YV2S1;KXCiF$KqX12v9AEVZm9x|1REg~piuMKN+-4wPB;6&)#PrBD#R=#AZH5T z#Hgr7s5k}=#?-Pra6=3{Ya)&_hWSrm=AS`!F_66;5Xhi!{W^KE{M-|*ql)?&;kMfQ z2Nq@v&P9k~f^FAAp+Rc_QUmNYaLr->;w#_?9muKxB`Dw^#-JF0-2m85V2~c8$^lzG z7;*<%i@_X(;n=O>8&&pvB_9RYawQ8nD>(r<>7`E!tfrS;Y8;K}O8jJ7UKIOYQP;=_ z8ollMow9PhP!oy6E4xEvV}y(f&=ycTXfZ&C!BR|8i}A4v4qHjqD(xDu$vV(Q2C;$f zrj$yHJO|1YAkcx{Mkp$skSN`;=B>}0ha$(`4!53`v=_TVm)W=kiMFYn|47od$SGtT zDp_0>|57u10`eAv0wHFHRawXYPM(r5fe8R5)UAYc<_+GvGyt??L)E!(utCWYUW&qr zSo=vYu_jOtxirvv83Nxd!RQvzvwsAql6E`0SBiPx3vS!Sf3Ay{l?72WfktAnfwbK* z(rGNj8;3D_w|fkSh8z4WT|lh7;- z7JVV6nP_DHJKD!H&`ZY&HMTQv*No^7mT^M&_PRVqf#Qbp-e0<|%q7}tL3e4HYyygs zK?MYuqf;_xLEbWer^7@BkS@i@d@xvtaZFm46kwx6b`5v=-O6xjYA`}Tx^2||XyV0$ zZpr?D12YDn_vTn0*;PrayI=P@Wu|3@p!AkQd%CoMPf8FU^%BPyDPWNi@&;g$Om(^m z5Kv%>&O9&xTMrOo09kDeMUN52DpuAgsp(2D1N8B;#y3ZrF-2V6e&rvJ#OYTzX$Pqo zH64-w%4Qk%lVrDt--12aM|-mm$Ax=kIa)`J3;Ep_5J2to-soabEu+@^u*YUkoe(O>R7K|z7RU(*h56&FQHK$wr5+Rvr2FJiB@!ha z2Y6E%JUu{Bh!oW0SkR3z-szMq1bBCITDS4h%{+pu4xB4g+6h6^WhD*0#gD-bI)F6| zlotqg=oHp30y%h0B3o$=9Fk;Fy9^-101AxCyQ@?V10${@po0YDNtAra-(x(|USq=t()(r?GAWaMsabOoEnD3oS{WTLRstyDVk1VuU z)6lY%8Ok%~&BLn{NXn(FtLzc;9i-&yDyT*!YdPd8!Z{S^c0X#;eQqqY!@LI|^9EW#)GIq3M$Q|hBACP2=tnEq2g{-ZgU7e6 zL8G8Eg38w1q=5Iq|8XlxF%!$IM(;9mhKujCnf*@A#nJ# z(^D9;g0KpUJ=%J-Q<<{%eQVs>neRF6j3WGx!QC8eQOcVS1DhNpfaHx=I-L0|yEKCaF{SYaC*7DoU$^)01 zAHtjLMJ?g}9+h5VC^4O2zZ_b?R!4WM=d#s;ks*5>DAKFDLLWbH8MoIB+35jZIy8D! zO+_@(d0?8DP|OBbb`uV~AgnaNR?>3k1yIi^m2d((f6Y7ct%KOBa^^VxkFZjf0kB2@ z7OE^NZ26B#_ngvn74}b)apL!Fs&l2D;T2$Ty2^pA?zpa`YX@K%gdhY-41`D~J6=5( zP37FwgAr_a-}UlHHWVP;L107aQu5nI{UQbAD=iPH&^XU8pMkUv^mosA;yR}7IvK+z z%j(JLO4&w$8S@7-UHI7fI+ab5nB7Q3j4K97TEK^bt+c|p{HoK=7{o7^0C3&NPd{k^ zfpC{y-tU#epz8qW(5TUGM0{AnFOR8K7RyvDv8MFN*@b%2ie_cAwA{^z@eJzx zj=~7{#=%EdV&CmLlGT0^1#%w&bF%>}BUaGS)r=9@I(5)?Od!PsBb$ig2butIn%%wP zHj$7#2C^_E=NW|xxVTK2BN?A?yMak7cy69%-zrTsrA#8lI5h;Y$xWbxu3Mkwo7Y+^WZY}Hgy#^wiIrF6}~&<-9hVR<>>DKaYALUS5J##AnsU&J)quy3bY?!h`QCH z0i{T$v_t>~1-1lWgues9%UmjmIaW`d|<8K$zA==zAei&G0V;@&2 z>ox(AT>FFu41)VvyMlw_#`H!Lq>CDtGJio^5OEfEzx{dcZvv1E^TjV?Q4l1-6h^AF zQ`d_}gFFX=p8?aweiJG;$aI5ku}9;Gvbu>Ki!8MXK-Rk6gIv@#Mrtx(AVi#jd*rRZ zt8Vl6NHF+>DG3~Bk7+Sya5J@mlU+YyaExZ~T`kQ^wdZBSZit1{Ke~ zR6Kle-ue7lmke%$%^(yaGV$IHojg-a-h}QA10W=4jRV?J#h_ZqF{2W?p(JrB7zG*2 z|1O4j?=FYa7`DT0QA#H}Ip(3=529zh{XjEm4=1M=Pw#c1mQ!sE#^=X$yW`R+AlZ35 z#FFAVPS~7MzyS90HY{!?H7!a40bpGRlL#z|abK0PLvIx*lSdK(6?gki_CHQL*Y@^dT0y98bu{u>!>A#g#$h=CQ7(Iqwz zeJCj=D(d7Cp+M5(h6-0NU_|mbRc)2x-dM*pq4Jg=Io;~l{PU;ZjzMSqB~~ygvn5r2 zwN~1+Bze<>qo#kO)kDgx+&wiUD^giGdA&#&p6T*!!7_c%mQ8Iv&JSz_)7+RkWP#Wp z3%}7;ZJa~4$pE0+(!uuow}V#9lQtRVTKP)`)8-9esljib99Z(0w#KV*XK3c}AR+;Y zpG7BVA=@rf7Em5I;+}PZ_#hSoJG1f|3!S;Z4d(1T4qc3oHkVnQX*x#}ZfAdpw!=cy zdoCzml)DYKGr#PuuwD`TVae|JKZaiRg#Wk0^=E-&4`3&Brl~V$O_da6h_<;cvHpB1 zg}I54eI0g?@2;?tqjM6xIud-V{jUqdE|u?j5;xk|<#h1(@nRZzsElEb*Fto@UX38! za1FDMm{-dbIWJoDw>&xZnU#J+bZDxajP+1GBhlwoLHi8Q?P-ro6Zfn9W)i$JUpa1Q zsDnduLxSebDtVlou95GxZ#QXRfdmk+x`3jQ?5sEAdky?aeQ;zU;(AP5kGBqPMyr|*}xI__F3pRFjfUola!q#KW!4A1qne`P)8 zZE?LVxqnOx-x_3iDei5Hu*Z0*N9)LpByDutvx5nBb>YAfP9v)EUfn~L>Q!`_?ZG6k zKlGF9%Chv&Zx-UxEB+)@X(31H!A5{AAM+4QQ^MKDvKm)3j9V;`j*}b-GptH5El@n% z(sj1$V-XQZ6#`z;ENWKuxFAX#nR)hAS5T2>`uMr*!r3qPK9cTAn<;Sp^pbD~lpE~a z73JP9wbhQ7TVZ-i+BAd&#i*XcMmm{@mSk2n806PeRWcY zzR*kQwONvRlxq*#X74%IvF9%_?ebxlRba$hjCQAkTGVh&Fl%TPdGh)xjq=wB@~M0a zf2-8*{uL6Fk_euMN&}8>Z$W2vwobcF?!9^AV#kjCnadVO2HXLL2e-V|_6PkZ*U)M{ ziaTpFNDKd(-zML)BXqg$$d3~0N`*5i+;+9k$qd1sgQ?s43hm3kjcZz0o_sj!;@bnQ z+2zFq7&sHVe94bCR~$dPE7splk@Red?V5#gpGkK3lLnRL8TlpTkH0pCtiF^VeL4|q zaSA{F&gxmNgz`$JM#}jyw!@OZ7w6ETsMlV**VZ;V;Juc0lMGq4^XWv6?ZVhJr*o{- zcHuAe72!c?T>rcJ_x>(Pp^uannJq;9=sG8dho|_p4-Z7y?oXnI%pn(!kyCNa>|;t2 ztJ?XvUG3^*MMLn-(|b!^9L=9DpZ=h7OG<~9~uSqDyM8^|TK(jnUQeXetg z!oLw+{K#q{&YJ@5Tsh1&rmQui*~s=-zrjb`HJf&;v)!tqMhj%P}52}U*L*;STK?mH;aOC^`>EGG@KN0HN7Y$ck<1KlxGk@sU3xhXuze_Eue8gI} z=bNdwdp6ZJ&CFAtathWju#r9m{z0BMdHD~^J)47GzFxD)X5HRHr^Bl0Ny~rV|Eg=% zH-{@09-CrqMv6T}yT=ME*`i;T{qUO>^fdS<24=nqnD^uap^tW^{+AnQ&=}mX9{h2s zUiEJ&2JhPVkS5>tdp+D`z_x38t%HG|9QGl3SzEV+&Av8X kD*4rV*VCvX96p!)d3<@-w#EI@#I@4Rtf_tw1cAB#7k`VwlK=n! literal 0 HcmV?d00001 diff --git a/S1/Echecs/sprites/TourB.gif b/S1/Echecs/sprites/TourB.gif new file mode 100644 index 0000000000000000000000000000000000000000..9176842ac5eeb44ec0180951cdd2f9869abc8e32 GIT binary patch literal 3083 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 G0029DNxhu_ literal 0 HcmV?d00001 diff --git a/S1/Echecs/sprites/cavB.gif b/S1/Echecs/sprites/cavB.gif new file mode 100644 index 0000000000000000000000000000000000000000..8ec875fdf01a25c29799ff6a95e36543d2439752 GIT binary patch literal 4370 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 avq_t^X`8o+o4Ki*yUClq>6?d80029g+I
    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 literal 0 HcmV?d00001 diff --git a/S1/Echecs/sprites/fouB.gif b/S1/Echecs/sprites/fouB.gif new file mode 100644 index 0000000000000000000000000000000000000000..22eb5d9f40934dd0e2b37118715dd26f27f5d628 GIT binary patch literal 3529 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 Dh==qN literal 0 HcmV?d00001 diff --git a/S1/Echecs/sprites/fouN.gif b/S1/Echecs/sprites/fouN.gif new file mode 100644 index 0000000000000000000000000000000000000000..e1670a94c133d032abad9236a0f30996a1877d36 GIT binary patch literal 2495 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 literal 0 HcmV?d00001 diff --git a/S1/Echecs/sprites/pionN.gif b/S1/Echecs/sprites/pionN.gif new file mode 100644 index 0000000000000000000000000000000000000000..bf4ce01488d31715a82f1722c867315334ee2234 GIT binary patch literal 1926 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 literal 0 HcmV?d00001 diff --git a/S1/Echecs/sprites/reineN.gif b/S1/Echecs/sprites/reineN.gif new file mode 100644 index 0000000000000000000000000000000000000000..3d89f2036ec4b1acda4ffac86cce712b5ce1731c GIT binary patch literal 4954 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 literal 0 HcmV?d00001 diff --git a/S1/Echecs/sprites/roiN.gif b/S1/Echecs/sprites/roiN.gif new file mode 100644 index 0000000000000000000000000000000000000000..7a99acd9c3332db2360a7e8446136bcd2d5f914c GIT binary patch literal 4698 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 literal 0 HcmV?d00001 diff --git a/S1/Echecs/sprites/tstimg.py b/S1/Echecs/sprites/tstimg.py new file mode 100644 index 0000000..1298297 --- /dev/null +++ b/S1/Echecs/sprites/tstimg.py @@ -0,0 +1,19 @@ +from tkinter import * + + + + +##### Programme principal : ############ +taille=600 +fen = Tk() +can = Canvas(fen, width =taille, height =taille, bg ='ivory') +img = PhotoImage(file ='./../sprites/reineN.gif') +can.pack(side =TOP, padx =5, pady =5) +i = img.subsample(2,2) +can.create_image(150 ,150, image =i) +j = img.subsample(4,4) +can.create_image(300 ,300, image =j) +k = img.subsample(8,8) +can.create_image(400 ,400, image =k) + +fen.mainloop() diff --git a/S1/Echecs/tests.py b/S1/Echecs/tests.py new file mode 100644 index 0000000..249a223 --- /dev/null +++ b/S1/Echecs/tests.py @@ -0,0 +1,222 @@ +# INFOS + +# Pièces : + +# [1-6] : Blancs +# [11-6] : Noirs + +# X1 : Pion +# X2 : Tour +# X3 : Cavalier +# x4 : Fou +# X5 : Dame +# X6 : Roi + + +# j_ jeu : le logique du jeu lui même +# g_ GUI : l'interface graphique +# f_ Frontend : ce qui associe les deux +# _e : est +# _c : crée +# _d : déplace + + +# IMPORTS +from tkinter import * +from random import randint + +# FONCTIONS + + +# Jeu +CASES_COTE = 8 + +j_grille = None +auxBlancs = None + +def j_eNoir(xD, yD): # TODO Peut être considérablement amélioré + i = 1 + for x in range(0, CASES_COTE): + i += 1 + for y in range(0, CASES_COTE): + i += 1 + if x == xD and y == yD: + return i%2 +def j_cGrille(): + global j_grille + j_grille = [] + for x in range(CASES_COTE): + colonne = [] + for y in range(CASES_COTE): + if j_eNoir(x, y): + colonne.append(0) + else: + colonne.append(-1) + j_grille.append(colonne) + +def j_remplirGrille(): + global j_grille + j_grille[2][2] = 5 + +def j_nvPartie(): + j_cGrille() + j_remplirGrille() + global auxBlancs + auxBlancs = True + +def j_cPion(x, y, piece): + """ + """ + j_grille[x][y] = piece + return True + +def j_dPion(x1, y1, x2, y2): + # TODO Vérification du mouvement possible + assert(j_grille[x1][y1] > 0), "ERR1" + assert(j_grille[x2][y2] != 0), "ERR2" + j_grille[x2][y2] = j_grille[x1][y1] + return True + +# def poserPion(x, y): +# global auxBlancs +# if j_grille[x][y] == 0: +# j_grille[x][y] = 1 +# pion(x, y, auxBlancs) +# auxBlancs = not auxBlancs +# elif j_grille[x][y] == -1: +# statut('On joue sur les cases noires !') +# else: +# statut('Il y a déjà quelque chose ici.') + + +# GUI +DECX = 0 +DECY = 0 +COTE_CASE = 50 +MARGE_PIONS = 5 + +g_grilleDamier = None +g_grillePions = None +g_photos = [] +fen = None +can = None +chaine = None + +def g_fen(): + global fen, can, chaine + fen = Tk() + fen.title("Jeu d'Échecs") + can = Canvas(fen, width=COTE_CASE*CASES_COTE, height=COTE_CASE*CASES_COTE, \ + bg="ivory") + can.grid(row=0, column=1, columnspan=3) + can.bind('', f_clic) + chaine = Label(fen, text="Aux blancs") + chaine.grid(row=2, column=2, padx=3, pady=3) + Button(fen, text="Nv. Partie", command=f_nvPartie).grid(row=2, column=1, \ + padx=3, pady=3) + Button(fen, text="Quitter", command=fen.destroy).grid(row=2, column=3, \ + padx=3, pady=3) + +def g_statut(texte, delai=0): + chaine.config(text=texte) + print(texte) + # TODO Timeout effacer si parametre + +def g_cCase(x, y): + if j_eNoir(x, y): + couleur = 'black' + else: + couleur = 'white' + return can.create_rectangle(x*COTE_CASE, y*COTE_CASE, \ + (x+1)*COTE_CASE, (y+1)*COTE_CASE, fill=couleur) + +def g_cDamier(): + global g_grilleDamier + g_grilleDamier = [] + for x in range(0, CASES_COTE): + colonne = [] + for y in range(0, CASES_COTE): + colonne.append(g_cCase(x + DECX, y + DECY)) + g_grilleDamier.append(colonne) + +def g_cPion(x, y, piece): + global g_grillePions + global g_photos + if piece > 0: + nom = 'sprites/' + if piece%10 == 5: + nom += 'reine' + else: + nom += 'pion' + if piece < 10: + nom += 'B' + else: + nom += 'N' + nom += '.gif' + g_photos.append(PhotoImage(file=nom)) + sample = int(504/(COTE_CASE-MARGE_PIONS)) + g_photos[-1] = g_photos[-1].subsample(sample) + g_grillePions[x][y] = can.create_image((x+.5)*COTE_CASE, (y+.5)*COTE_CASE, image=g_photos[-1]) + # g_grillePions[x][y] = can.create_oval(x*COTE_CASE+MARGE_PIONS, y*COTE_CASE+MARGE_PIONS, \ + # (x+1)*COTE_CASE-MARGE_PIONS, (y+1)*COTE_CASE-MARGE_PIONS, \ + # outline='gray', width=2, fill='white' if piece < 10 else 'black') + else: + g_grillePions[x][y] = False + +def g_dPion(x1, y1, x2, y2): + global g_grillePions + pion = g_grillePions[x1][y1] + can.coords(pion, x2*COTE_CASE+MARGE_PIONS, y2*COTE_CASE+MARGE_PIONS, (x2+1)*COTE_CASE-MARGE_PIONS, (y2+1)*COTE_CASE-MARGE_PIONS) + g_grillePions[x1][y1] = False + g_grillePions[x2][y2] = pion + +def g_cGrille(): + global g_grillePions + g_grillePions = [] + for x in range(0, CASES_COTE): # Crée g_grillePions + colonne = [] + for y in range(0, CASES_COTE): + colonne.append(False) + g_grillePions.append(colonne) + +def g_remplirGrille(j_grilleF): + global g_grillePions + for x in range(0, CASES_COTE): # Remplis g_grillePions + for y in range(0, CASES_COTE): + g_cPion(x, y, j_grilleF[x][y]) + + +# Frontend +def f_cPion(x, y, piece): + if j_cPion(x, y, piece): + g_cPion(x, y, piece) + return True + else: + return False + +def f_cPionAlea(): + g_cPion(randint(1, CASES_COTE), randint(1, CASES_COTE), 1) + +def f_dPion(x1, y1, x2, y2): + if j_dPion(x1, y1, x2, y2): + g_dPion(x1, y1, x2, y2) + return True + else: + return False + +def f_nvPartie(): + j_nvPartie() + g_cDamier() + g_cGrille() + g_remplirGrille(j_grille) + +def f_clic(event): + x = event.x//COTE_CASE + y = event.y//COTE_CASE + f_cPion(x, y, 1) + + +# MAIN + +g_fen() +f_nvPartie() diff --git a/S1/Echecs/testsQt.py b/S1/Echecs/testsQt.py new file mode 100644 index 0000000..249a223 --- /dev/null +++ b/S1/Echecs/testsQt.py @@ -0,0 +1,222 @@ +# INFOS + +# Pièces : + +# [1-6] : Blancs +# [11-6] : Noirs + +# X1 : Pion +# X2 : Tour +# X3 : Cavalier +# x4 : Fou +# X5 : Dame +# X6 : Roi + + +# j_ jeu : le logique du jeu lui même +# g_ GUI : l'interface graphique +# f_ Frontend : ce qui associe les deux +# _e : est +# _c : crée +# _d : déplace + + +# IMPORTS +from tkinter import * +from random import randint + +# FONCTIONS + + +# Jeu +CASES_COTE = 8 + +j_grille = None +auxBlancs = None + +def j_eNoir(xD, yD): # TODO Peut être considérablement amélioré + i = 1 + for x in range(0, CASES_COTE): + i += 1 + for y in range(0, CASES_COTE): + i += 1 + if x == xD and y == yD: + return i%2 +def j_cGrille(): + global j_grille + j_grille = [] + for x in range(CASES_COTE): + colonne = [] + for y in range(CASES_COTE): + if j_eNoir(x, y): + colonne.append(0) + else: + colonne.append(-1) + j_grille.append(colonne) + +def j_remplirGrille(): + global j_grille + j_grille[2][2] = 5 + +def j_nvPartie(): + j_cGrille() + j_remplirGrille() + global auxBlancs + auxBlancs = True + +def j_cPion(x, y, piece): + """ + """ + j_grille[x][y] = piece + return True + +def j_dPion(x1, y1, x2, y2): + # TODO Vérification du mouvement possible + assert(j_grille[x1][y1] > 0), "ERR1" + assert(j_grille[x2][y2] != 0), "ERR2" + j_grille[x2][y2] = j_grille[x1][y1] + return True + +# def poserPion(x, y): +# global auxBlancs +# if j_grille[x][y] == 0: +# j_grille[x][y] = 1 +# pion(x, y, auxBlancs) +# auxBlancs = not auxBlancs +# elif j_grille[x][y] == -1: +# statut('On joue sur les cases noires !') +# else: +# statut('Il y a déjà quelque chose ici.') + + +# GUI +DECX = 0 +DECY = 0 +COTE_CASE = 50 +MARGE_PIONS = 5 + +g_grilleDamier = None +g_grillePions = None +g_photos = [] +fen = None +can = None +chaine = None + +def g_fen(): + global fen, can, chaine + fen = Tk() + fen.title("Jeu d'Échecs") + can = Canvas(fen, width=COTE_CASE*CASES_COTE, height=COTE_CASE*CASES_COTE, \ + bg="ivory") + can.grid(row=0, column=1, columnspan=3) + can.bind('', f_clic) + chaine = Label(fen, text="Aux blancs") + chaine.grid(row=2, column=2, padx=3, pady=3) + Button(fen, text="Nv. Partie", command=f_nvPartie).grid(row=2, column=1, \ + padx=3, pady=3) + Button(fen, text="Quitter", command=fen.destroy).grid(row=2, column=3, \ + padx=3, pady=3) + +def g_statut(texte, delai=0): + chaine.config(text=texte) + print(texte) + # TODO Timeout effacer si parametre + +def g_cCase(x, y): + if j_eNoir(x, y): + couleur = 'black' + else: + couleur = 'white' + return can.create_rectangle(x*COTE_CASE, y*COTE_CASE, \ + (x+1)*COTE_CASE, (y+1)*COTE_CASE, fill=couleur) + +def g_cDamier(): + global g_grilleDamier + g_grilleDamier = [] + for x in range(0, CASES_COTE): + colonne = [] + for y in range(0, CASES_COTE): + colonne.append(g_cCase(x + DECX, y + DECY)) + g_grilleDamier.append(colonne) + +def g_cPion(x, y, piece): + global g_grillePions + global g_photos + if piece > 0: + nom = 'sprites/' + if piece%10 == 5: + nom += 'reine' + else: + nom += 'pion' + if piece < 10: + nom += 'B' + else: + nom += 'N' + nom += '.gif' + g_photos.append(PhotoImage(file=nom)) + sample = int(504/(COTE_CASE-MARGE_PIONS)) + g_photos[-1] = g_photos[-1].subsample(sample) + g_grillePions[x][y] = can.create_image((x+.5)*COTE_CASE, (y+.5)*COTE_CASE, image=g_photos[-1]) + # g_grillePions[x][y] = can.create_oval(x*COTE_CASE+MARGE_PIONS, y*COTE_CASE+MARGE_PIONS, \ + # (x+1)*COTE_CASE-MARGE_PIONS, (y+1)*COTE_CASE-MARGE_PIONS, \ + # outline='gray', width=2, fill='white' if piece < 10 else 'black') + else: + g_grillePions[x][y] = False + +def g_dPion(x1, y1, x2, y2): + global g_grillePions + pion = g_grillePions[x1][y1] + can.coords(pion, x2*COTE_CASE+MARGE_PIONS, y2*COTE_CASE+MARGE_PIONS, (x2+1)*COTE_CASE-MARGE_PIONS, (y2+1)*COTE_CASE-MARGE_PIONS) + g_grillePions[x1][y1] = False + g_grillePions[x2][y2] = pion + +def g_cGrille(): + global g_grillePions + g_grillePions = [] + for x in range(0, CASES_COTE): # Crée g_grillePions + colonne = [] + for y in range(0, CASES_COTE): + colonne.append(False) + g_grillePions.append(colonne) + +def g_remplirGrille(j_grilleF): + global g_grillePions + for x in range(0, CASES_COTE): # Remplis g_grillePions + for y in range(0, CASES_COTE): + g_cPion(x, y, j_grilleF[x][y]) + + +# Frontend +def f_cPion(x, y, piece): + if j_cPion(x, y, piece): + g_cPion(x, y, piece) + return True + else: + return False + +def f_cPionAlea(): + g_cPion(randint(1, CASES_COTE), randint(1, CASES_COTE), 1) + +def f_dPion(x1, y1, x2, y2): + if j_dPion(x1, y1, x2, y2): + g_dPion(x1, y1, x2, y2) + return True + else: + return False + +def f_nvPartie(): + j_nvPartie() + g_cDamier() + g_cGrille() + g_remplirGrille(j_grille) + +def f_clic(event): + x = event.x//COTE_CASE + y = event.y//COTE_CASE + f_cPion(x, y, 1) + + +# MAIN + +g_fen() +f_nvPartie() diff --git a/S1/TP 3/date Camille demo.py b/S1/TP 3/date Camille demo.py deleted file mode 100644 index 4297dac..0000000 --- a/S1/TP 3/date Camille demo.py +++ /dev/null @@ -1,136 +0,0 @@ -# Fonctions nécessaires au fonctionnement de afficher_calendrier() - -def est_divisible_par(a, b): - return a % b == 0 - -def est_bissextile(annee): - return est_divisible_par(annee, 4) and \ - (not est_divisible_par(annee, 100) or est_divisible_par(annee, 400)) - -def nbre_jours(m, a): - assert(type(m) is int and m in range(1, 13)), \ - "Le mois doit être un entier compris entre 1 et 12 inclus." - assert(type(a) is int and a > 1582), \ - "L'année doit être un entier supérieur à 1582." - - if m in [4, 6, 9, 11]: - return 30 - elif m == 2: - if est_bissextile(a): - return 29 - else: - return 28 - else: - return 31 - -def est_date_valide(j, m, a): - return type(j) is int and type(m) is int and type(a) is int and a > 1582 \ - and m in range(1, 13) and j in range(1, nbre_jours(m, a)+1) - -def corrige_mois(m, a): - assert(type(a) is int and a > 1582), \ - "L'année doit être un entier supérieur à 1582" - assert(type(m) is int and m in range(1, 13)), \ - "Le mois doit être un entier compris entre 1 et 12 inclus" - - liste_corrections_mois = [4, 0, 0, 3, 5, 1, 3, 6, 2, 4, 0, 2] - - if est_bissextile(a): - liste_corrections_mois[0] = 3 - liste_corrections_mois[1] = 6 - - return liste_corrections_mois[m-1] - -def num_jour(j, m, a): - assert(est_date_valide(j, m, a)), "La date n'est pas valide" - - ab = a//100 - cd = a%100 - return (cd//4 + ab//4 + cd + corrige_mois(m, a) + j + 2 + 5 * ab) % 7 - - -# REGARDER À PARTIR D'ICI - -# Voici une fonction qui affiche un calendier approximatif, -# sois sûre de la comprendre avant de t'attaquer au complet -def imprimer_mois_simple(m, a): - - # Première ligne - print("Mois", m, " Année", a) - - # Deuxième ligne - print("di lu ma me je ve sa") - - # Nombres - jour = 1 - nbre_jours_mois = nbre_jours(m, a) - while jour <= nbre_jours_mois: # On parcourt les lignes - ligne = ["", "", "", "", "", "", ""] # On remet à zéro la liste des nombres sur la ligne - for jour_semaine in range(7): # On parcours les colonnes de la ligne - ligne[jour_semaine] = jour # On met le jour - jour += 1 # On augumente jour pour le prochain - print(ligne[0], ligne[1], ligne[2], ligne[3], ligne[4], ligne[5], \ - ligne[6]) # On affiche la ligne - -# Démonstration -print("Calendrier simple (et faux)") -imprimer_mois_simple(9, 2014) - - -# Voici la fonction complète, qui affichera un calendrier complet, -# et possède tous les attributs d'une fonction -def imprimer_mois(m, a): - """ - Imprime le calendrier du mois de l'année donné. - - CU : m entier, a entier, 1 ≤ m ≤ 12, a > 1582 - - Exemple : - >>> imprimer_mois(9, 2014) - Septembre 2014 - di lu ma me je ve sa - 1 2 3 4 5 6 - 7 8 9 10 11 12 13 - 14 15 16 17 18 19 20 - 21 22 23 24 25 26 27 - 28 29 30 - """ - assert(type(a) is int and a > 1582), \ - "L'année doit être un entier supérieur à 1582" - assert(type(m) is int and m in range(1, 13)), \ - "Le mois doit être un entier compris entre 1 et 12 inclus" - - # On stocke les mois dans un tableau pour pouvoir y accéder facilement - liste_mois = ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", \ - "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"] - - # Première ligne - print(liste_mois[m-1], a) - - # Deuxième ligne - print("di lu ma me je ve sa") - - # Nombres - jour = 1 - jour_semaine_1er = num_jour(jour, m, a) - nbre_jours_mois = nbre_jours(m, a) - while jour <= nbre_jours_mois: # On parcourt les lignes - ligne = ["", "", "", "", "", "", ""] # On remet à zéro la liste des nombres sur la ligne - for jour_semaine in range(7): # On parcours les colonnes de la ligne - if jour == 1 and jour_semaine < jour_semaine_1er: # Si on est avant - # le premier jour du mois - ligne[jour_semaine] = " " # On met un espace - elif jour <= nbre_jours_mois: # Si on est avant la fin du mois - ligne[jour_semaine] = jour # On met le jour - jour += 1 # On augumente jour pour le prochain - print(ligne[0], ligne[1], ligne[2], ligne[3], ligne[4], ligne[5], \ - ligne[6]) # On affiche la ligne - -# Test -print("") -print("Calendrier complet") -imprimer_mois(9, 2014) - -# Comme tu as pu le remarquer, les nombres <10 font un décalage -# J'ai pas trouvé comment résoudre ça sans utiliser des trucs qu'on -# a pas vu en cours. \ No newline at end of file diff --git a/S1/TP 4/plusOuMoinsYOLO.py b/S1/TP 4/plusOuMoinsYOLO.py index 4a0caaf..ded7112 100644 --- a/S1/TP 4/plusOuMoinsYOLO.py +++ b/S1/TP 4/plusOuMoinsYOLO.py @@ -25,7 +25,7 @@ def jeu(): essais = 0 mystere = randint(minimum, maximum) dire() - if random() < 1: + if random() < 0.2: dire(["Donc je prend un nombre, tu vois, genre "+str(mystere)+", et tu dois le trouver, OK ?", str(mystere-2)+" ? "+str(mystere-1)+" ? "+str(mystere)+", c'est bien ça, "+str(mystere)+"...", str(mystere)+". EUH ! C'est pas "+str(mystere)+", pas du tout !"]) else: dire(["Ayé, trouvé !", "Attends je cherche un nombre sympa...\nC'est bon !", "...\nAh oui ! Un nombre.\n...\nVoilà !","Je viens de penser à un nombre, tu vas devoir le trouver."]) diff --git a/S1/TP 5/billard.py b/S1/TP 5/billard.py new file mode 100644 index 0000000..45a6f9c --- /dev/null +++ b/S1/TP 5/billard.py @@ -0,0 +1,79 @@ +# PREUD'HOMME BONTOUX Geoffrey - PeiP 12 - 2014/2015 +# TP n°5 donné le 10/10/2014 - Billard +# http://www.fil.univ-lille1.fr/~wegrzyno/portail/Info/Doc/HTML/tp_itcond_tortue.html + +from turtle import * + +def dessiner_billard(dx, dy): + """ + Dessine un billard centré en l'origine de coté 'dx' × 'dy'. + + CU : dx et dy entiers strictement positifs + + Exemple : + >>> dessiner_billard(400, 300) + """ + assert(type(dx) is int and dx > 0), "dx doit être un entier strictement \ +positif" + assert(type(dy) is int and dy > 0), "dy doit être un entier strictement \ +positif" + penup() + pencolor("red") + goto(-dx//2, -dy//2) + pendown() + begin_fill() + for i in range(0, 4): + if i%2: + forward(dy) + else: + forward(dx) + left(90) + color("green") + end_fill() + +PAS = 1 + +def billard(dx, dy, x, y, angle, bandes): + """ + Dessine un billard centré en l'origine de coté 'dx' × 'dy' et la + trajectoire de la bille de position initiale ('x', 'y') et d'angle initial + 'angle' jusqu'à 'bandes' bandes. + + CU : dx, dy et bandes entiers strictement positifs, x, y et angle entiers + + Exemple : + >>> billard(400, 300, 50, -25, 80, 5) + """ + assert(type(dx) is int and dx > 0), "dx doit être un entier strictement \ +positif" + assert(type(dy) is int and dy > 0), "dy doit être un entier strictement \ +positif" + assert(type(angle) is int and angle > 0), "angle doit être un entier \ +strictement positif" + assert(type(x) is int), "x doit être un entier" + assert(type(y) is int), "y doit être un entier" + assert(type(bandes) is int), "bandes doit être un entier" + + dessiner_billard(dx, dy) + penup() + pencolor("black") + goto(x, y) + pendown() + left(angle) + while bandes >= 1: + forward(PAS) + if xcor() >= dx//2: + left(180-2*heading()) + bandes += -1 + if xcor() <= -dx//2: + left(180-2*heading()) + bandes += -1 + if ycor() >= dy//2: + left(-2*heading()) + bandes += -1 + if ycor() <= -dy//2: + left(-2*heading()) + bandes += -1 + +# Exemple de test : +# diff --git a/S1/TP 5/brownien.py b/S1/TP 5/brownien.py new file mode 100644 index 0000000..43227da --- /dev/null +++ b/S1/TP 5/brownien.py @@ -0,0 +1,68 @@ +# PREUD'HOMME BONTOUX Geoffrey - PeiP 12 - 2014/2015 +# TP n°5 donné le 10/10/2014 - Mouvement brownien +# http://www.fil.univ-lille1.fr/~wegrzyno/portail/Info/Doc/HTML/tp_itcond_tortue.html + +from turtle import * +from random import randint + +# Constantes +COTE = 400 + +# Fonctions +def tortue_sortie(cote): + """ + Indique si la tortue est en dehors du carré de coté 'cote' centré en + l'origine. + + CU : cote entier strictement positif + + Exemple : + >>> tortue_sortie(400) + """ + assert(type(cote) is int and cote > 0), "cote doit être un entier \ +strictement positif" + + return not (xcor() >= -cote/2 and xcor() <= cote/2 and \ + ycor() >= -cote/2 and ycor() <= cote/2) + +def carre(cote): + """ + Dessine un carré bleu de coté 'cote' centré en l'origine. + + CU : cote entier strictement positif + + Exemple : + >>> carre(50) + """ + assert(type(cote) is int and cote > 0), "cote doit être un entier \ +strictement positif" + + pencolor("blue") + penup() + goto(-cote/2, -cote/2) + pendown() + for i in range(0, 4): + forward(cote) + left(90) + +def mouvement_brownien(): + """ + Applique à la tortue une étape du mouvement brownien. + + Exemple : + >>> mouvement_brownien() + """ + left(randint(0, 359)) + forward(randint(10, 30)) + + +# Mise en place +carre(COTE) +penup() +pencolor("green") +goto(0, 0) +pendown() + +# Mouvement +while not tortue_sortie(COTE): + mouvement_brownien() diff --git a/S1/TP 5/carres.py b/S1/TP 5/carres.py new file mode 100644 index 0000000..724e561 --- /dev/null +++ b/S1/TP 5/carres.py @@ -0,0 +1,120 @@ +# PREUD'HOMME BONTOUX Geoffrey - PeiP 12 - 2014/2015 +# TP n°5 donné le 10/10/2014 - Dessiner avec des carrés +# http://www.fil.univ-lille1.fr/~wegrzyno/portail/Info/Doc/HTML/tp_itcond_tortue.html + +from turtle import * + +# Instructions pour simplifier le code +def suivant(): + """ + Suspend l'éxecution du script, attend la pression de l'utilisateur sur la + touche puis efface l'écran de turtle. + """ + input("Appuyez sur pour continuer") + clearscreen() + + +# [Question 1] Réalisez une procédure nommée carre + +def carre(c): + """ + Dessine un carré de coté 'c' depuis l'état courant de la tortue. + + CU : c entier strictement positif + """ + assert(type(c) is int and c > 0), "c doit être un entier strictement positif" + + pendown() + for i in range(0, 4): + forward(c) + left(90) + +print("Test de carre()") +carre(50) + +# La tortue est revenue à son point de départ + +suivant() + + +# [Question 2] Dix carrés alignés + +ESPACEMENT = 5 +COTE = 50 +NOMBRE = 10 + +origine = -(ESPACEMENT + COTE)*NOMBRE//2 + +print("Dix carrés alignés") + +penup() +goto(origine, 0) +for i in range(0, NOMBRE): + carre(COTE) + penup() + forward(COTE + ESPACEMENT) + # goto(xcor() + COTE + ESPACEMENT, ycor()) # Alternative + +suivant() + + +# [Question 3] Un carré de cent carrés + +print("Un carré de cent carrés") + +penup() +goto(origine, origine) +for y in range(0, NOMBRE): + for x in range(0, NOMBRE): + carre(COTE) + penup() + forward(COTE + ESPACEMENT) + # goto(xcor() + COTE + ESPACEMENT, ycor()) # Alternative + goto(origine, origine + (COTE + ESPACEMENT) * (y + 1)) + # Alternative + # forward(-(COTE + ESPACEMENT)*NOMBRE) # Retour à gauche + # left(90) + # forward(COTE + ESPACEMENT) # Montée + # right(90) + +suivant() + + +# [Question 4] Cinquante carrés emboîtés + +print("Cinquante carrés emboîtés") + +NOMBRE_4 = 50 +INTERVALLE = 10 + +origine_4 = -(NOMBRE_4*INTERVALLE)//2 + +penup() +goto(origine_4, origine_4) + +for j in range(0, NOMBRE_4): + carre( (j + 1) * INTERVALLE) + +suivant() + + +# [Question 5] Réalisez une procédure carre_tournant + +def carre_tournant(n): + """ + Dessine 'n' carrés de coté 100 pivotant autour de la position courante de + la tortue. + + CU : n entier strictement positif + """ + assert(type(n) is int and n > 0), "n doit être un entier strictement positif" + + + for i in range(0, n): + carre(100) + left(360/n) + +print("Sept carrés pivotant") + +goto(0, 0) +carre_tournant(7) diff --git a/S1/TP 5/module.py b/S1/TP 5/module.py new file mode 100644 index 0000000..5f682ce --- /dev/null +++ b/S1/TP 5/module.py @@ -0,0 +1,64 @@ +# PREUD'HOMME BONTOUX Geoffrey - PeiP 12 - 2014/2015 +# TP n°5 donné le 10/10/2014 - Le module turtle +# http://www.fil.univ-lille1.fr/~wegrzyno/portail/Info/Doc/HTML/tp_itcond_tortue.html + +from turtle import * + + +# [Question 2] + +# Elle fait avancer la tortue dans la direction qui lui a été donné par les +# fonctions left() et right(). + + +# [Question 3] + +# Elle dessine un trait uniquement si la fonction pendown() a été appelée plus +# récemnent que la fonction penup(). + + +# [Question 4] + +# Elle recule, c'est à dire qu'elle va dans le sens inverse de celui où elle +# irait si on avait donné un argument positif. + + +# [Question 5] + +# Il doit s'exprimer en degrés. On peut le vérifier en testant quelques valeurs +# connues : 360 (tour complet), 180 (demi-tour), 90 (quart de tour)... + + +# [Question 6] + +# Elle déplace la tortue aux points de coordonnées (-200, 90), soit en haut +# à gauche. Elle dessine un trait pour les mêmes conditions que la fonction +# forward, c'est à dire si la fonction pendown() a été appelée plus +# récemnent que la fonction penup(). + + +# [Question 7] + +# Définition de constantes pour rendre le code plus compréhensible +TRAIT1X = -200 +TRAIT1Y = 170 +TRAIT2X = -100 +TRAIT2Y = 90 +LONGUEUR = 150 +ANGLE = 30 + +# Trait 1 +penup() +goto(TRAIT1X, TRAIT1Y) +left(ANGLE) +pencolor('red') +pendown() +forward(LONGUEUR) + +# Trait 2 +penup() +goto(TRAIT2X, TRAIT2Y) +# On ne change pas l'angle, c'est le même que pour le trait 1 +pencolor('green') +pendown() +forward(LONGUEUR) \ No newline at end of file diff --git a/S1/TP 5/polygones.py b/S1/TP 5/polygones.py new file mode 100644 index 0000000..757529d --- /dev/null +++ b/S1/TP 5/polygones.py @@ -0,0 +1,129 @@ +# PREUD'HOMME BONTOUX Geoffrey - PeiP 12 - 2014/2015 +# TP n°5 donné le 10/10/2014 - Dessiner des polygones réguliers +# http://www.fil.univ-lille1.fr/~wegrzyno/portail/Info/Doc/HTML/tp_itcond_tortue.html + +from turtle import * + +# Instructions pour simplifier le code +def suivant(): + """ + Suspend l'éxecution du script, attend la pression de l'utilisateur sur la + touche puis efface l'écran de turtle. + """ + input("Appuyez sur pour continuer") + clearscreen() + +DECALAGEX = 0 +DECALAGEY = -50 +ECART = 150 +COTE = 75 +def deplacer(x, y): + """ + Déplace la tortue sans tracer de trait à une position ('x', 'y') sur + un tableau virtuel. + + CU : x et y entiers + + Exemple : + >>> deplacer(-1, 1) + """ + assert(type(x) is int), "x doit être un entier" + assert(type(y) is int), "y doit être un entier" + + penup() + goto(x*ECART + DECALAGEX, y*ECART + DECALAGEY) + + +# Cas des polygones convexes + +# Q1 + +# Cet angle est de 360°/n +# En effet au total la tortue aura effecuté un tour complet (360°), mais en +# n fois. Il faut donc diviser les 360° par n. + + +# Q2 Réalisez une procédure nommée polygone_reg_convexe + +def polygone_reg_convexe(n, l): + """ + Dessine un polygone régulier convexe à 'n' côtés de longueur 'l' depuis + l'état scourant de la tortue + + CU : n et l entiers strictement positifs + + Exemple : + >>> polygone_reg_convexe(5, 100) + """ + assert(type(n) is int and n > 0), "n doit être un entier strictement \ +positif" + assert(type(l) is int and l > 0), "l doit être un entier strictement \ +positif" + + pendown() + for i in range(0, n): + left(360/n) + forward(l) + + +# Q3 Réalisez la figure Quatre polygones convexes. + +print("Quatre polygones convexes") +deplacer(-1, 1) +polygone_reg_convexe(4, COTE) +deplacer(1, 1) +polygone_reg_convexe(5, COTE) +deplacer(-1, -1) +polygone_reg_convexe(6, COTE) +deplacer(1, -1) +polygone_reg_convexe(7, COTE) + + +suivant() + + +# Cas des polygones étoilés + + +# Q1 Réalisez une procédure nommée polygone_etoile + +def polygone_etoile(n, l, k): + """ + Dessine un polygone régulier étoilé à 'n' côtés de longueur 'l' avec 'k' + étant l'ordre de parcours des sommets depuis l'état courant de la tortue. + + CU : n, l et k entiers strictement positifs + + Exemple : + >>> polygone_etoile(7, 100, 3) + """ + assert(type(n) is int and n > 0), "n doit être un entier strictement \ +positif" + assert(type(l) is int and l > 0), "l doit être un entier strictement \ +positif" + assert(type(k) is int and k > 0), "k doit être un entier strictement \ +positif" + + pendown() + for i in range(0, n): + left(k*360/n) + forward(l) + + +# Q2 Réalisez la figure Quatre polygones étoilés. + +print("Quatre polygones étoilés") +deplacer(-1, 1) +polygone_etoile(5, COTE, 2) +deplacer(1, 1) +polygone_etoile(7, COTE, 3) +deplacer(-1, -1) +polygone_etoile(8, COTE, 3) +deplacer(1, -1) +polygone_etoile(9, COTE, 5) + + +# Q3 Peut-on dessiner un hexagone étoilé ? + +# L'hexagone en bas à gauche de la figure Quatre polygones étoilés est un +# hexagone étoilé, donc oui. diff --git a/S1/TP 6/suites.py b/S1/TP 6/suites.py new file mode 100644 index 0000000..074537a --- /dev/null +++ b/S1/TP 6/suites.py @@ -0,0 +1,212 @@ +# PREUD'HOMME BONTOUX Geoffrey - PeiP 12 - 2014/2015 +# TP n°6 donné le 17/10/2014 - Calculs de suites +# http://www2.lifl.fr/~mailliet/Initprog/TP6.pdf + +import doctest + +# Racine carrée + +def rac_car1(A, p): + """ + Retourne une approximation de √A (flottant) en calculant le terme de rang p + de la suite de Héron. + + CU : A numérique ≥ 0, p entier ≥ 0 + + >>> rac_car1(0, 10) + 0 + >>> rac_car1(5, 1) + 2.25 + >>> rac_car1(5, 10) + 2.23606797749979 + """ + assert(type(A) is int or type(A) is float), "A doit être un numérique" + assert(type(p) is int and p >= 0), "p doit être un entier ≥ 0" + + if A == 0: # Cas à différencier pour éviter une division par 0 + return 0 + else: + x = A/2 # Définition de x_0 + for i in range(1, p+1): # Pour chaque terme de 1 à p (on a déjà x_0) + x = (x+A/x)/2 # On calcule le terme suivant + return x # Retour de la valeur + +def rac_car2(A): + """ + Retourne une approximation de √A (flottant) en utilisant la suite de + Héron. + + CU : A numérique ≥ 0 + + >>> rac_car2(0) + 0 + >>> rac_car2(5) + 2.23606797749979 + """ + assert(type(A) is int or type(A) is float), "A doit être un numérique" + + if A == 0: # Cas à différencier pour éviter une division par 0 + return 0 + else: + x = A/2 # Définition de x_0 + xP = x + 1 # Initialisation par une valeur autre que x pour démarrer + # la boucle + while x != xP: # Tant que Python peut calculer les décimales + xP = x # La valeur actuelle devient précédente + x = (x+A/x)/2 # On calcule le terme suivant + return x # Retour de la valeur + + +# Somme et produit + +def factorielle(k): + """ + Retourne k! (entier) + + CU : k entier ≥ 0 + + >>> factorielle(0) + 1 + >>> factorielle(5) + 120 + """ + assert(type(k) is int and k >= 0), "k doit être un entier ≥ 0" + + f=1 # Initialisation du produit + for i in range(1, k+1): # De 1 à k + f = f * i # On ajoute un élément du produit + return f # Retour de la valeur + +def somme(n): + """ + Retourne la somme des entiers de 1 à n (entier) + + CU : n entier ≥ 0 + + >>> somme(0) + 0 + >>> somme(1) + 1 + >>> somme(3) + 6 + """ + assert(type(n) is int and n >= 0), "n doit être un entier ≥ 0" + + s = 0 # Initialisation de la somme + for i in range(1, n+1): # De 1 à n + s += i # On ajoute un élement de la somme + return s # Retour de la valeur + +def sommeA(n): # Alternative plus rapide à calculer + """ + Retourne la somme des entiers de 1 à n (entier) + + CU : n entier ≥ 0 + + >>> sommeA(0) + 0 + >>> sommeA(1) + 1 + >>> sommeA(3) + 6 + """ + assert(type(n) is int and n >= 0), "n doit être un entier ≥ 0" + + return n*(n+1)//2 + + +# Exponentielle + +def exponentielle(x): + """ + Retourne une approximation de exp(x) (flottant) + + CU : x numérique + + >>> exponentielle(-5) + 0.006737946999086907 + >>> exponentielle(0) + 1.0 + >>> exponentielle(1) + 2.7182818284590455 + >>> exponentielle(5) + 148.41315910257657 + """ + assert(type(x) is int or type(x) is float), "x doit être un numérique" + + e = 0 # Initialisation de la somme + eP = 1 # Initialisation par une valeur autre que s pour démarrer la boucle + i = 0 # Initialisation de l'incrémenteur + while e != eP: # Tant que Python peut calculer les décimales + eP = e # La valeur actuelle devient précédente + e = e + (x ** i) / (factorielle(i)) # On ajoute un élement de la somme + i += 1 # On incrémente i + return e # Retour de la valeur + + +# Sinus + +def sinus(X): + """ + Retourne une approximation de sin(x) (flottant) + + CU : X numérique + + >>> sinus(-5) + 0.9589242746631357 + >>> sinus(0) + 0.0 + >>> sinus(5) + -0.9589242746631357 + """ + assert(type(X) is int or type(X) is float), "X doit être un numérique" + + s = 0 # Initialisation de la somme + sP = 1 # Initialisation par une valeur autre que s pour démarrer la boucle + i = 0 # Initialisation de l'incrémenteur + while s != sP: # Tant que Python peut calculer les décimales + sP = s # La valeur actuelle devient précédente + if i % 2: # Si i est impair alors (-1)^i=-1, si pair =1 + p = -1 + else: + p = 1 + s += p * (X ** (2 * i + 1)) / factorielle(2 * i + 1) # On ajoute une + # partie de la + # somme + i += 1 # On incrémente i + return s # Retour de la valeur + + +# Logarithme + +def ln(X): + """ + Retourne une approximation de Ln(1+X) (flottant) + + CU : X numérique ∈ [0,1] + + >>> ln(0) + 0.0 + >>> ln(0.5) + 0.4054651081081643 + """ + assert((type(X) is int or type(X) is float) and X >= 0 and X <= 1), \ + "X doit être un numérique ∈ [0,1]" + + l = 0 # Initialisation de la somme + lP = 1 # Initialisation par une valeur autre que l pour démarrer la boucle + i = 1 # Initialisation de l'incrémenteur + while l != lP : # Tant que Python peut calculer les décimales + lP = l # La valeur actuelle devient précédente + if i % 2: # Vérifier si i-1 est pair revient à vérifier si i est impair + # cela revient à inverser les actions + p = 1 + else: + p = -1 + l += p * X**i / i # On ajoute un élement de la somme + i += 1 # On incrémente i + return l # Retour de la valeur + + +def tester(): + doctest.testmod(verbose=True)