La domotique (II)

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

Cet exercice utilise la classe Lampe permettant de contrôler une lampe.

Chaque lampe est désignée par un nom (chaîne de caractères), mais aussi par une adresse, composée d'un numéro de zone (entier compris entre 0 et 20) et un numéro de point lumineux (entier compris entre 0 et 20).

La variable booléenne etat_allume permet de faire basculer la lampe d'un état éteint (valeur False) à un éteint allumé (valeur True), et inversement. Par défaut, la lampe est éteinte.

La classes Lampe

La classe Lampe est définie ainsi :

classDiagram
class Lampe {
    str nom
    int zone
    int point_lumineux
    bool etat_allume
    adresse()
    allume()
    eteint()
    allume_si_zone()
    actionne_telerupteur()
}

La classe dispose notamment des méthodes :

  • adresse qui renvoie un couple d'entiers, composé du numéro de zone et du numéro de point lumineux,
  • allume qui allume la lampe,
  • eteint qui éteint une lampe,
  • allume_si_zone qui prend en paramètre un entier correspondant à la zone souhaitée et allume la lampe si elle fait partie de la zone.

La liste eclairages contient les différents éclairages de la maison sous forme d'instances de la classe Lampe.

Les caractéristiques de ces éclairages sont les suivantes :

Nom Zone Point lumineux
Salon1 \(0\) \(0\)
Salon2 \(0\) \(1\)
Cuisine1 \(1\) \(0\)
Cuisine2 \(1\) \(1\)
Couloir \(2\) \(0\)
SdB \(3\) \(0\)
Chambre \(4\) \(0\)
Définition de la liste

La liste eclairages est définie ainsi :

eclairages = [Lampe("Salon1", 0, 0),
        Lampe("Salon2", 0, 1),
        Lampe("Cuisine1", 1, 0),
        Lampe("Cuisine2", 1, 1),
        Lampe("Couloir", 2, 0),
        Lampe("SdB", 3, 0),
        Lampe("Chambre", 4, 0)]

Fonction affiche

Dans les questions suivantes, la fonction affiche, présente dans les tests, permet de visualiser l'état des lampes dans la fenêtre située sous la console.

Question 1

Écrire la procédure extinction_generale qui prend une liste d'instances de la classe Lampe et qui éteint toutes les lampes.

>>> eclairages[4].allume()
>>> eclairages[6].allume()
>>> extinction_generale(eclairages)
>>> eclairages[4].etat_allume
False
>>> eclairages[6].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

.128013s3o_bcdufvg/ly napS.r1me(P2=:twkihx)050h0y0E0r0H0n0b0p0g0n0r0b0b0C010E0H0s010406050b0i0x0x0r0v0o040t0d0n0i0#0d0q050m0,0.0:0=0*0s040~1505180m181a150*0h0H0k0T0V0X0Z0I0H0l0I0n1o0I0E0(050O0f0n0y1j0W0Y011n1p1r1p0E1x1z1v0E0f0d0h0=1w0v160E0I0T0^0b0s0r0q0Z0B011B1l010j0Q0y0q0r0x0y1v1Z1#1*1D1-1z1:1=0(0a0p0A0v0d0s0d0b0H0{0q0p0M1X0v0v0y0g2a0~1^0q160m1V2n0E1T1S1U0h1`0Z1r0q1/271v1g1i0U1C2x0H2z0q1P1h1v0s2g162l2n2R0+1!2b2F1+2K0v0/0n0(0w2k2V0)2U1_2X1D2Z2#0(0B2)1#2+2l2w012:0r2$040c2@2m172P0~2D2q0h2u2{0g1P1?163719352T0 2*053c0M2Q2V2{0G0(0M0j323p2-1k1D0F0(0p3w2,2W3z0Z0q0j0(0y0J0#0q2i0H0|0e0l1/0y0v2~0y3E2`2.0Z0%040z3!3q3$2|0(0V0x0s0y0b3+3y2G013(0K0D3w060p413D3#3H013s040j0d0v3w433,450q3/1;3=4c3F2{0d3B042I4k443`4g043:3=3@3k2^4l3-3(3~4z2m40424I4B4f4h3;3Z4F3x3G3`0d0(0u3^4R2Y3L0E0y2I0E4W2{3(0z0K3 0~3n0y2n2O4:361h382q2s2o1O1Q2q0r1y4?0m370*530N0P0R04.

Votre figure

Votre tracé sera ici

Question 2

Écrire la procédure allumage_zone qui prend une liste d'instances de la classe Lampe et une zone de type entier et qui allume toutes les lampes situées dans la zone.

>>> allumage_zone(eclairages, 0)
>>> eclairages[0].etat_allume
True
>>> eclairages[1].etat_allume
True

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

.128013s3o_;bcdufvg/lyq napS.r1Lmeh,(P2=:twzkiR)é050i0B0J0t0N0o0b0r0h0o0t0b0b0H010J0N0u010406050b0j0A0A0t0x0p040v0d0o0j0+0d0s0r020t0A0u0f0r0O0B0^0x0q0j0B0b050n0=0@0_0{0:0u041j1q051t0n1t1v1q0:0i0N0l0Z0#0%0)0C0N0m0C0o1J0C0J0.050U0g0o0B1E0$0(011I1K1M1K0J1S1U1Q0J0g0d0i0{1R0x1r0J0C0Z0~0b0u0t0s0)0G011W1G010k0W0B0s160B1Q1{1}221Y251U280A2a040a0r0F0x0d0u0d0b0N11130S1_0x0x0B0h2v1j2c0s1r0n1@2H0J1=1;1?0i2e0)1M0s272s1Q1B1D0!1X2R0N2T0s1.1C1Q0u2A1r2F2H2/0;1|132Z232(0x0^0o0.0y2E2?0/2=2d2^1Y2`2|0.0G301}322F2Q01370t2}040c3b2G1s2-1j2X2K0i2O3f0h1.2k0R1C1r2,0B2.313m1r3w0S3E341F1Y0M0.0S0k3G332@3M0)0K0.0r3S3e350)0s0k0.3i0 0^0m0B0e0L120B3!2?3f0-040E3@3L2!3g0.0#171h3}3U3 3`0D3G3Z3#3V40043;2T453_0.0P0I3G060r4p4b3^3$013O040k0d0x4a3T3f0s41160u3?1k314r3~230d3X042$4A4c3 4D04424G1i4I3c4B4t3`4m4Z2G4o4q4,4#4d4U4W4H2;4S4M0.0w4i4t4U3+0?3/2t3:3=4{4d3`3|4)3K462_0.4g4=3F4@1Y3`0P4n1j3I3D3o5n0n3r1j0J3t5s2M2I1-1/2K0t1T5p3r1p593f2A0A0e0k0t0M3/0C0c0.1b1d1f1h0r4(2;1w321q0z0t0r0b0~100N125(0j1C1}0J1V0Q0U2u0r0t0j0%0N0r270l0N0b0t3.5B1U5W1s322X3f1!1L1N1P3B3p5Y2;5m5G4t4v3Q543 4O3Z584.4T3)044~3-3/5d6q23566D364E434Y4?4s550.49584K5a6H4f536u5g0)5i5X314+4p6v234v4x4z6Q6(6T4;4R6M3 4N0.4Q6-6X4e4;6K5f6=6E0.6!3c6$4,6R3f4v0N3R6`706/4F5e4!6{0d4_6G3%5c6V2/774t7j040H0H6;4L6T6C6W7d6Y724n767F7q4/6I4G7l017s4`7A7x7m6y0o3,7g3n6{565j580:0n6l5o2H5E3q0T0V0X04.

Votre figure

Votre tracé sera ici

Question 3

Il est possible de définir des groupes, qui regroupent des lampes qui peuvent être situées dans des zones différentes.

Un groupe est défini par une liste d'adresses, couples d'entiers composés du numéro de zone et du numéro du point lumineux.

Écrire la procédure allumage_groupe qui prend une liste d'instances de la classe Lampe et une liste d'adresses et qui allume toutes les lampes du groupe.

>>> groupe1 = [(2, 0), (3, 0)]
>>> allumage_groupe(eclairages, groupe1)
>>> eclairage[4].etat_allume
True
>>> eclairage[5].etat_allume
True

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

.128013s3o_bcdufvg/ly napS.r1me,(P2=4:twkih)050h0y0G0r0J0n0b0p0g0n0r0b0b0D010G0J0s010406050b0i0x0x0r0v0o040t0d0n0i0$0d0q050m0-0/0;0?0+0s040 1605190m191b160+0h0J0k0U0W0Y0!0K0J0l0K0n1p0K0G0)050P0f0n0y1k0X0Z011o1q1s1q0G1y1A1w0G0f0d0h0?1x0v170G0K0U0_0b0s0r0q0!0C011C1m010j0R0y0q0r0x0y1w1!1$1+1E1.1A1;1?0)0a0p0B0v0d0s0d0b0J0|0q0p0N1Y0v0v0y0g2b0 1_0q170m1W2o0G1U1T1V0h1{0!1s0q1:281w1h1j0V1D2y0J2A0q1Q1i1w0s2h172m2o2S0,1#2c2G1,2L0v0:0n0)0w2l2W0*2V1`2Y1E2!2$0)0C2*1$2,2m2x012;0r2%040c2^2n0+2{2/0!2~300E332o2P0y2o2E2r0h2v2|0g1Q1@173h1a2Q2-2n3c053m0N2R2W2|0I0)0N0j3v361l1E0H0)0p3G3A372}0j0)2 0`0:0l0y0e0l250i0s0y3N2.3I0!0(040A3(2X3*2}0)0W0x3$0b3/2|3,0z3c3M3H2H3=043Z0d3#3%102+3t3|0)0L0F3c060p4i403O3;3C040j0d0v3 4b3P0q3?1=3$4s411,0d3K042J4z4l424v043@3_3{3P3,4f492_4h4j4U4t4m0)0J3F4R2n4k3)4I4w3^482U4A1E0d0)0u4N3;4J0r0h2h0Y4,4a4.3+0)0A0L4G4(4B4D4F4#044%3:4)443!4y594W424P4g4U5m4j5i2Z4*5g4-4H4B4;4?5d3T0.4}2_5p1E3,524g0 3x3f183s0m3q2p3j0 2s2r1P1R2r0r1z5K5N1i2,5N0O0Q0S04.

Votre figure

Votre tracé sera ici