La domotique (I)

Série d'exercices

Cet exercice fait partie d'une série :

On souhaite créer une application domotique afin de pouvoir contrôler l'éclairage dans les différentes pièces d'une maison.

Cet exercice se concentre sur la création d'une classe permettant de contrôler une lampe.

Chaque lampe est caractérisée par un nom (une chaîne de caractères) et une adresse. Celle-ci est composée de deux nombres entiers : un numéro de zone et un numéro de point lumineux. Ces deux nombres sont compris entre 0 et 20.

La variable booléenne etat_allume indique si la lampe est allumée (etat_allume= True) ou éteinte (etat_allume= False). Par défaut, la lampe est éteinte.

La classe Lampe

La classe Lampe est définie ainsi :

classDiagram
class Lampe
    Lampe : nom [str]
    Lampe : zone [int]
    Lampe : point_lumineux [int]
    Lampe : etat_allume [bool]
    Lampe : __init__(self, nom, zone, pl)
    Lampe : adresse(self)
    Lampe : allume(self)
    Lampe : eteint(self)
    Lampe : allume_si_zone(self, zone_souhaitee)
    Lampe : actionne_telerupteur(self)
Définition des méthodes

Pour pouvoir fragmenter l'activité en plusieurs exercices, vous serez amenés à redéfinir une méthode en dehors de la définition de sa classe. Un mécanisme du site permet cette manipulation.

En dehors de cette activité, les méthodes doivent être définies en même temps que le reste de la classe.

1. Créer une Lampe

Compléter le constructeur de la classe Lampe.

>>> L1 = Lampe("L1", 0, 0)
>>> L2 = Lampe("L2", 0, 1)
>>> L3 = Lampe("L3", 1, 0)
>>> L1.nom
'L1'
>>> L2.nom
'L2'
>>> L3.zone
1
>>> L3.etat_allume
False
###(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 : 10/10

.128013reu_1(hPzx,./Fp52c4kldaSowvstfn 36ib)ygL:m=050w0c0D0x0J0v0C0G0s0v0x0C0C0R010D0J0p010406050C0d0Q0Q0x0b0M040y0z0v0d0,0z0F050n0?0^0`0|0;0p04151c051f0n1f1h1c0;0w0J0B0!0$0(0*0h0J0N0h0v1v0h0D0/050V0K0v0c1q0%0)011u1w1y1w0D1E1G1C0D0K0z0w0|1D0b1d0D0h0!0 0C0p0x0F0*0r011I1s010E0X0c0F0x0Q0c1C1*1,1;1K1@1G1`1|0/0a0G0i0b0z0p0z0C0J120F0G0T1(0b0b0c0s2h151 0F1d0n1$2u0D1!1Z1#0w210*1y0F1_2e1C1n1p0#1J2E0J2G0F1W1o1C0p2n1d2s2u2Y0=1+2i2M1=2R0b0_0v0/0f2r2$0:2#202(1K2*2,0/0r2:1,2=2s2D012`0x2-040H2~2t0;312^0*34360t39302$323f0/0q3i3b3k3d330z2+350/0I3i1e2W152K2x0w2B320s1W1}1d3D1g3B2!162;053I0T2X3r1r1K0u0/2^3z3c3X0*0A0/0G3$3W2N330s0/0O1{0p0c3-2@3(010.040P3p0G423,3%3/3Z040T0E3`2%3|3*043,3Q2 2?4c3/0E0Q0/0e0e2P2g4p4b323~0g4u3s0K3~0C0c0v4a4h2t4j4v0/0l3i443.2)0/2R0Q4y3|3~4L4G4f4I3s0F0/0j133_4X4Z4U4K4M4+3/4#040p0v4T3/3~0L404X06434 4N3{3/4A0/4C4E4^1=0z0/0m582_4Q0z4S4X514k590/0R4.454P044R4150424/1=5404564F2!5p1K5a045c4*5D3e4$4(5o4O5E5m5N525q4%2G5t5u5w1K5y5A5d0*5F5H5C5O5K4=0z2P0D0e100Q2P0c0d0k5R5k5P045n5i5Y5,4?5W5061015!4D5B3R5J015(5$330/0U0x5:355=4)2Y5j325F5 6o660u3;040o354C3p153T0c2u2V6E3C1o3E2x2z2v1V1X2x0x1F6H0n3D0;6U6i0X0C04.
2. Récupérer l'adresse d'une Lampe

Compléter la méthode adresse de la classe Lampe qui renvoie l'adresse de la lampe sous la forme d'un couple d'entiers : le numéro de zone suivi du numéro de point lumineux.

>>> L2 = Lampe("L2", 0, 1)
>>> L2.adresse()
(0, 1)
###(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 : 10/10

.128013re_u1(hPzx,/p2ckldaSowvstf=n ib)yg:m.050s0c0z0t0E0r0y0D0p0r0t0y0y0B010z0E0n010406050y0e0K0K0t0b0H040u0v0r0e0$0v0C050m0-0/0;0?0+0n040 1605190m191b160+0s0E0x0U0W0Y0!0h0E0I0h0r1p0h0z0)050P0F0r0c1k0X0Z011o1q1s1q0z1y1A1w0z0F0v0s0?1x0b170z0h0U0_0y0n0t0C0!0o011C1m010A0R0c0C0t0K0c1w1!1$1+1E1.1A1;1?0)0a0D0i0b0v0n0v0y0E0|0C0D0N1Y0b0b0c0p2b0 1_0C170m1W2o0z1U1T1V0s1{0!1s0C1:281w1h1j0V1D2y0E2A0C1Q1i1w0n2h172m2o2S0,1#2c2G1,2L0b0:0r0)0f2l2W0*2V1`2Y1E2!2$0)0o2*1$2o2P0c2o2E2r0s2v2x010p1Q1@172~1a2Q2-2n2^3c340N2R2W320q0)0N0A3d3h2.1l1E0w0)0D3o3b320C0A0)0t0s2h0Y0c3w2m320(040g3H3i2/0!0F3K0y0c0r3n102+3x3P013K0G0J3o060D3+3v3I3!3k042h0z0e0b0~3X2_3-3O3r0!3K3M3`3c3.3~013R0)3T3V3N3q2H010v0)0L4b2X450C0)0j0}3G423p4j4d3K0l3o3|4c1,4704493W2U444d4f044h4q3Z4k0)272J0z0d0`0K2J0c0e0k4i3J0)0G3)0 3f2|183a0m382p300 2s2r1P1R2r0t1z4)4,1i2,4,0O0Q0S04.
3. Allumer et éteindre une Lampe

Compléter les méthodes allume et eteint qui permettent d'allumer et d'éteindre la lampe.

>>> L1.allume()
>>> L1.etat_allume
True
>>> L1.eteint()
>>> L1.etat_allume
False
###(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 : 10/10

.128013reu_1(hP.F/Tp52c4kldaSowvstfn 3ib)yg:m=050u0c0B0v0G0t0A0E0q0t0v0A0A0N010B0G0n010406050A0d0M0M0v0b0J040w0x0t0d0(0x0D050l0/0;0?0^0-0n041118051b0l1b1d180-0u0G0z0W0Y0!0$0h0G0K0h0t1r0h0B0+050R0H0t0c1m0Z0#011q1s1u1s0B1A1C1y0B0H0x0u0^1z0b190B0h0W0{0A0n0v0D0$0p011E1o010C0T0c0D0v0M0c1y1$1(1-1G1:1C1?1^0+0a0E0i0b0x0n0x0A0G0~0D0E0P1!0b0b0c0q2d111{0D190l1Y2q0B1W1V1X0u1}0$1u0D1=2a1y1j1l0X1F2A0G2C0D1S1k1y0n2j192o2q2U0.1%2e2I1.2N0b0=0t0+0f2n2Y0,2X1|2!1G2$2(0+0p2,1(2.2o2z012?0v2)040F2`2p0-2}2;0$30320r352|2Y2~3b0+0o3e1a2S112G2t0u2x2~0q1S1_193p1c3n2W122-053u0P2T3g39010s0+0P0C3l381n1G0y0+0E3P3I3R3a0C0+310|1^3W2:3Y010*040g3)2Z3+0H3-0A0c0t3O3C2{2/3;2J3,0+0I0L3e060E473V3Q403?0+3^3`3:2~0x0+0j4g3J0D0+0Q0v0B0e3$0:0c3e493X404i040N4w3~2~0s0q0+0m0b0d4v3|36374y1.3L043N4l3+3T043V4N3H3*400D3!040Q0c2L0B4V403-3/4!4E3J4c044e3{2W4a1.3-4345484x4$1.4_4{4/1.4A4k4?4~2=4o0R4r4t3(4!543 5a0+4C5l4@3+4G0+0k313^45113F0c2q2R5C3o1k3q2t2v2r1R1T2t0v1B5F0l3p0-5S4p0T0A04.

Votre figure

Votre tracé sera ici

4. Allumer les lampes d'une zone

On souhaite pouvoir allumer toutes les lampes situées dans une même zone.

Compléter la méthode allume_si_zone qui permet d'allumer une lampe si elle appartient à la zone dont le numéro est passé en paramètre de la méthode.

>>> L1 = Lampe("L1", 0, 0)
>>> L3 = Lampe("L3", 1, 0)
>>> L1.allume_si_zone(0)
>>> L1.etat_allume
True
>>> L3.allume_si_zone(0)
>>> L3.etat_allume
False
###(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 : 10/10

.128013re_u1(hPz,/Tp2ckldaSowvstf=n 3ib)yg:m.050s0c0z0t0F0r0y0D0p0r0t0y0y0B010z0F0n010406050y0e0L0L0t0b0I040u0v0r0e0%0v0C050l0.0:0=0@0,0n041017051a0l1a1c170,0s0F0x0V0X0Z0#0h0F0J0h0r1q0h0z0*050Q0G0r0c1l0Y0!011p1r1t1r0z1z1B1x0z0G0v0s0@1y0b180z0h0V0`0y0n0t0C0#0o011D1n010A0S0c0C0t0L0c1x1#1%1,1F1/1B1=1@0*0a0D0i0b0v0n0v0y0F0}0C0D0O1Z0b0b0c0p2c101`0C180l1X2p0z1V1U1W0s1|0#1t0C1;291x1i1k0W1E2z0F2B0C1R1j1x0n2i182n2p2T0-1$2d2H1-2M0b0;0r0*0f2m2X0+2W1{2Z1F2#2%0*0o2+1%2-2n2y012=0t2(040E2_2o192R102F2s0s2w2}0p1R1^18391b372V112,053e0O2S2X2}0q0*0O0A343r2/1m1F0w0*0D3y2.2Y3B0#0C0A0*300{1@0d2a0d0j0~0c3G2|2:0#0)040g3X3s3Z010G3#0y0c0r3x3m2`3H2}3#0k3y3F3Y3J2~0*3U2B3R0v0e0h0R0z0c3W3=353}2I013#0H0K3y060D4l3|3)3~3u040F3;2T4n3A4e0C403V434547493{3@3*0v0*0B0B4F4d1-3,0*3.3:3(4w1-4I040M4T3I4x4z2B4Z3^0*4i4b0+4m4.4v4!4O3-3/4t3n4N1F4W4Y4,4G3~4y040P0t0z0d3O0/4a4u4 4e4W4L4,4:3t0p0*0m0b0e592,0,0l3p0c2p2Q5s381j3a2s2u2q1Q1S2s0t1A5v0l395p0O0Q0S0y04.

Votre figure

Votre tracé sera ici

5. Utiliser un télérupteur

Le mode télérupteur donne la possibilité avec un même interrupteur bouton de pouvoir allumer et éteindre une lampe.

Compléter la méthode actionne_telerupteur qui permet de faire basculer l'état de la lampe, de allumée à éteinte ou d'éteinte à allumée.

>>> L1 = Lampe("L1", 0, 0)
>>> L1.actionne_telerupteur()
>>> L1.etat_allume
True
>>> L1.actionne_telerupteur()
>>> L1.etat_allume
False
###(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 : 10/10

.128013re_u1(hP/p2ckldaSowvstf=n ib)yg:m.050p0c0w0q0B0o0v0A0m0o0q0v0v0y010w0B0k010406050v0e0H0H0q0b0E040r0s0o0e0Z0s0z050j0*0,0.0:0(0k040|1305160j1618130(0p0B0u0R0T0V0X0h0B0F0h0o1m0h0w0$050M0C0o0c1h0U0W011l1n1p1n0w1v1x1t0w0C0s0p0:1u0b140w0h0R0?0v0k0q0z0X0l011z1j010x0O0c0z0q0H0c1t1X1Z1(1B1+1x1.1:0$0a0A0i0b0s0k0s0v0B0_0z0A0K1V0b0b0c0m280|1?0z140j1T2l0w1R1Q1S0p1^0X1p0z1-251t1e1g0S1A2v0B2x0z1N1f1t0k2e142j2l2P0)1Y292D1)2I0b0-0o0$0f2i2T0%2S1@2V1B2X2Z0$0l2%1Z2l2M0c2l2B2o0p2s2u010m1N1;142{172N2*2k2=39310K2O2T2 0n0$0K0x3a3e2+1i1B0t0$0A3l382 0z0x0$0q2g0B0`2x0d0w0c1x0b0e0k3F0e0b3t2j2 0#040g3O3f2,0X0C3R0v3G3k0}2(3u3W013R0D0G3l060A3;3s3P3*3Y0$3!0o3$2R3@3o0X0s0$0I3U3n2E010z0$0L0q0w0d0q0o0@1:3l3?3V400142040y4j3)4m0s3q042I0w4r3 473_043{3}3(4A1)4o443%2?4s4749044b4d4f4h0c3/0|3c2_15370j352m2}0|2p2o1M1O2o0q1w4Z4$1f2)4$4b0O0v04.

Votre figure

Votre tracé sera ici