Les durées en POO (1)

On s'intéresse dans cet exercice à une classe Duree permettant de manipuler une durée exprimée en heures, minutes et secondes.

Un objet de type Duree est instancié en indiquant les heures, les minutes et les secondes nécessaires

🐍 Console Python
>>> duree_1 = Duree(2, 45, 52)
>>> duree_1.heures
2
>>> duree_1.minutes
45
>>> duree_1.secondes
52

Les secondes et les minutes d'une durée doivent être strictement inférieures à 60. Lors de l'instanciation les valeurs passées en paramètres doivent respecter cette règle.

La méthode en_secondes() renvoie la durée correspondante exprimée en secondes. Cette méthode calcule et renvoie la durée exprimée en secondes mais ne modifie pas les valeurs des attributs heures, minutes et secondes.

Les méthodes ajoute_minutes et ajoute_secondes permettent d'ajouter respectivement un nombre de minutes ou de secondes positif ou nul passé en paramètre. Si, après l'addition, les minutes (ou les secondes) de l'objet dépassent 59, on doit les convertir en heures (ou en minutes).

Exemples
>>> duree_0 = Duree(0, 0, 0)
>>> duree_0.en_secondes()
0
>>> duree_0.ajoute_minutes(12)
>>> duree_0.en_secondes()
720
>>> duree_0.ajoute_secondes(3600)
>>> duree_0.en_secondes()
4320
>>> duree_1 = Duree(2, 45, 52)
>>> duree_1.en_secondes()
9952
>>> duree_1.ajoute_secondes(20)
>>> duree_1.en_secondes()
9972
>>> duree_1.ajoute_minutes(30)
>>> duree_1.en_secondes()
11772
Astuce

La méthode ajoute_secondes pourra utiliser la méthode ajoute_minutes

__repr__ ?

La méthode __repr__() est une méthode native qui est appelée lorsque l'on souhaite afficher une représentation de l'objet (dans la console le plus souvent). Dans le cas présent, cette méthode est aussi appelée lorsque l'on souhaite convertir un objet de ype Duree en une chaine de caractères (par exemple, lors de l'appel de la fonction print). Cette méthode renvoie une chaine de caractères sous la forme "hh:mm:ss". Par exemple, pour un objet initialisé avec les valeurs 3 h, 20 min et 2 s, la méthode renvoie '3:20:2'

Compléter le code ci-dessous.

class Duree:
def __init__(self, h, m, s):
assert 0 <= m < 60 and 0 <= s < 60
self.heures = h
self.minutes = m
self.secondes = s
def en_secondes(self):
return ...
def ajoute_minutes(self, mins):
...
def ajoute_secondes(self, secs):
...
def __repr__(self):
return f"{self.heures}:{self.minutes}:{self.secondes}"
# Tests
duree_0 = Duree(0, 0, 0)
assert duree_0.en_secondes() == 0
duree_0.ajoute_minutes(12)
assert duree_0.en_secondes() == 720
duree_0.ajoute_secondes(3600)
assert duree_0.en_secondes() == 4320
duree_1 = Duree(2, 45, 52)
assert duree_1.en_secondes() == 9952
duree_1.ajoute_secondes(20)
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
###(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)
rounded
>>> 
 
x
x
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_m1eC0kfp;/8rbéoRw=+ vhd9t{3nèc.%s7ja}PSgA5(Ou)l*x4q,D26y:i050y0e0A0L0+0W0I0v0F0W0L0I0I0t010A0+0j010406050I0U0c0c0L0n0)040O0q0W0U0 0q0D0v020L0c0j0k0v0r0e190n0!0U0e0I050l16181a1c140j04051H1A1K0l1H140y0+0w0@0_0{0}0x0+0P0x0W1Y0x0A12050/0o0W0e1T0`0|011X1Z1#1Z0A1+1-1)0A0n1I0A0x0@1f0I0j0L0D0}0%011/1V010i0;0e0D1n0e1)25272c1;2f1-2i0c2k040a0v0N0n0q0j0q0I0+1i1k0-230n0n0e0F2F1A2m0D1I0l212R1~201 1*0y2o0}1#0D2h2C1)1Q1S0^1:2#0+2%0D0q2+1)0j2K1I2P2R2|15261k2-2d2=0n190W120v0d2O30132 2n321;3436380%3b273d2P2!013i0L37040v0C3m2Q143p3g0}3s3u0v0Z3y3o303q3E380R3I3A3K3C3r0q353t380(3P3e311U3h3U3j3v0J3Z3B3$3D3(3W3v0m3,3R3.3T3V3F0z3@3f3_3M040d0g3~3#2.3`3)0d3a1B3c3Q3 47410d3l4c3n4e46333:3u0d3x4k3z3!3L4p120d3H4t3J4f4o3{4y3O4B4m4w4F423Y4I4v3S4h3+4O3-4g4x423?4T3^4V4L0d3}4Z4D3%4L0%444B1L2`1A2+2U0y202Z3S0F2?2u0,1R1I2_0e2{3c3I054|0-544*0}0h123g564U2d0s385g4!330F120$0U2K0e5l5b0111040*3P0v5B0v4P3_5d040-0i5u4n1;5j3v5K3q0i0c120b0b2:2E5U5P3S5x0S5Z3_0o5x0I0e0W5J4/5h1;5x0#3I5D5:3D120x5%475=5@5E4g120c5}2d5 4B5^5m3h121z5/6a0}5x0V5z4I5C6l695v5G1:0e0n0A605_010c0+124.2|6n5L0}0q12020W0A0k0t6u6f3r636M5v6F046H6J6Q6D6w6y040(6A3c6C3q0q5N270y6W3q6x6z6.3S6S6U6K6=406c6`476@6I0k6}2d6:6!6$4l6m5C612d5)6c5,5.2~6v6S0G656b040x0e5r1y721;6S6L687a7l5|6k786(3S7c045+5-7k6E127j6e5v0D632:1h7q7v7h127u6B7w5`04647z787X017D7F7f557T047K7g6N7N7E2L1j0-6d7W7-7V6%7%7=7`4d066l7%5G5I7H015N5D7L6X0D0i122h0b5+4|0D7_885#887)7e8n126i5A7A85122K0A5r0D7r0}8q7G8c6)7J887=7n7p813n7B3_6S0X8D6Y120C6#762Q8Q6~120u8U8F7+3n7%7i8K7O0D7Q8O8!8-128T7S6N746#8U6S8(8{5v8*888.8H4Q7d8k8m4I83796v860e8+2Q7%8a8K8f040L0K0q7Q0b6x8;0A7R7:5v8o975(5*8r9B5~125?928d8:8?5a6X6h6j2|9d7$6v949F2d969y9K7m7o2K9M8#9X8%7}8P7%9A9Z3q9V9:6?8J9W7l9u8=8 8%8U7=9u9M9.8t9}040l0l8U8}8Z137A9)1;9=7,6N9Yah7M8:9|9J8I049,8@6v9/ak6Xag8,7-7/av3Lam9w9(8^04917{7;9L8s040Va50Ha96Z8~9c849f12879_0}9laZ3r9n9p9r9w8i7@8l9xaB5!125$a$ax9jat9H9 99a2a`aN9Q4dad7%a^9NapaAayaK9o9q9s9{aEaM0Sa?9?9C7d8Gbj8$7.8/7?9aa/9-7-aI7~6v802La~6N6ha5a7aR12aTbn66a47#6mb49Dbma:8R9^bJ7l8j7^btasai7U8Uaub993bP9ib69@bpa$bzbsaFbva|brbB9zbLaJ6R12aQao3Saa3P9Sae5caX9h88a#bU0}5R5T0b2K2_5Ya$b%a_6Nb5a3b08v9T6N5G8z8B8U0I0L12b+7%0I2a6T1w0q6Va$2D120B8pb*95bTbR629#8N88cJ040McUcDb1b(6XcVcLa@cNa$ajc#aC7Z7PbfcI6ZcXcIcZcU6Zc(cb7(c*c}c,clalbrbXb_c$c?cY6GcFcH9R1A58534:dg0l4?1A0A4^dl2X2S0L1,di4?1Gb,3_2K0c0b0i0L0h0e0b0x0C121s1u1w1y0vc!9j1N3d1H0T1k1y0A0v0+0F0+0v0q1,1Y0p0v2H2K0D5+1Y2%0n0v0I0)0I0A0p190 dL2t0DdW1-0?1~0q0+0?260n1n0E1~dM0W3U0?2H0W002:d^27dZ0L2Fd*1.0_2o0e7K1O1J1dd!1j0v0w7odW0F0n0p6r0v0U2%d*5reGeI0D0+d}2hdW2h0vbe1y1Ba-7_d#0U0veU8M2K0#dX0W0vdB1h0v0L0we4d;eJ0v2=0c0o2Kep0ve7e9eb0?0w1a0+dr1-0G0vdTf0eC0v1-e.0:e~eU1h0;e527dW0Cf01af29%e%eT1k2f0YfoeO1.15e30D0P04f51-5rfrd;0y0pe/6t1BfEfGeu3d2+3q1?1!1$1(dw472q2h2j122w0OeE10dW0N0)211j56529N2}55dff$2d5G5fa$cacQ5n5p7p5tcj12dOac9ecsc7cA6vg3c-3Scd045U5W0Acic}ckf~afc g45;a{b/5{a5ar5O6v74abco9Ib|9!7!gJapgCc58V04gGa gIbxbab=b!aqbGgRaM8ubMaVcmgvgjbSb.c}8L9$bYgDgYgO7 gAg(gdb)blgggYb8d2gKc:g=gP7tb@gLb28w9Ug+h2b7bqbWa.gXb}gZc06{7E3Z0lf}dh2Rduew0Qej0+e+ez0jfe2h162E1.eEeGe^eKej0/0D0F1.e=2L0ve3e5e;0n0P17eS0?6jevfW3SfY1^1%2l6Nf(2s2u2w0f1j0I1f1.f;f?8C4/f_3!f{8,hr6v0P5x020P6Ji6i8i71qbq6-hmbog^byg65sbg88744bgrgygMc16Z0%4Hip04gUbu8|6Z0RgSbCb{4d7%i46Gibi90kiL8bg/aX453q0P6S0d220*0viu0cdN0viC9M14hq4}2Rh~dj50dv9re;eB0Fd=7o1-d~dW0-0U0YhVhXi{h!1LfV1RfX1$h*f#7%h.f*2v0vh=d-h^2xf=0xf@h}4;2~4/i26NiI6TiKjv6JiOgw7Yieirg-ihba5qikg904bijzgQ4jiwiybZ5v744-g$iR3SjtiLjYibjyg,cRjBiGi36@030C0z0k0%iWiY0gj;0g0I02j,j.hphr1N4;i.0wdR040$270?hO0@0`e+fgf10ceae~57i+6df}f0d,2ZerfI9$fLd*fO0Le:kh2Hh(j8f!h,jR6ZgGi*59fUdvfchBe:2h2f1k2_0pdZ5+d;e1fLftdMdLff00ezd,d.0PeKh#j52,3_h)kAgtcc2gh/f+jfh?jih`jlh|2~h~jp2~jr5vjXjwiMj!idgBb@jG0eg8iwjKj$336Pif9*hljC47740ZiDb`aNjV3_l4ialwicgz5Hlt47iT6Gj{0k0g0v0xiXlpi!iXj^j`j-714OkFdii-hu1Hk5d-0@1.0-0nePeH0FkaffdMkdkfdMkw537ykk0.5Df}kji+kl2h2;e00LeA3tkqe7ksfPl_4}j71@k/7%gF56lTb.evdj0.0:0=04.
Partie 2

Pour la manipulation avancée des durées, on peut faire cet exercice.