Skip to content

Commit 2a78513

Browse files
committed
update
1 parent 9f65493 commit 2a78513

27 files changed

+534
-2
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
**/__pycache__

command/party/CeilingFan.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
from typing import Final
2+
3+
4+
class CeilingFan:
5+
HIGH: Final[int] = 3
6+
MEDIUM: Final[int] = 2
7+
LOW: Final[int] = 1
8+
OFF: Final[int] = 0
9+
location: str = ""
10+
speed: int = 0
11+
12+
def __init__(self, location: str):
13+
self.location = location
14+
15+
def high(self) -> None:
16+
# turns the ceiling fan on to high
17+
self.speed = self.HIGH
18+
print(f'{self.location} ceiling fan is on high')
19+
20+
def medium(self) -> None:
21+
# turns the ceiling fan on to medium
22+
self.speed = self.MEDIUM
23+
print(f'{self.location} ceiling fan is on medium')
24+
25+
def low(self) -> None:
26+
# turns the ceiling fan on to low
27+
self.speed = self.LOW
28+
print(f'{self.location} ceiling fan is on low')
29+
30+
def off(self) -> None:
31+
# turns the ceiling fan off
32+
self.speed = self.Off
33+
print(f'{self.location} ceiling fan is off')
34+
35+
def getSpeed(self) -> int:
36+
return self.speed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import re
2+
import sys
3+
4+
from CeilingFan import CeilingFan
5+
from Command import Command
6+
7+
8+
class CeilingFanHighCommand(Command):
9+
ceilingFan: CeilingFan
10+
prevSpeed: int = 0
11+
12+
def __init__(self, ceilingFan: CeilingFan):
13+
self.ceilingFan = ceilingFan
14+
15+
def execute(self) -> None:
16+
self.prevSpeed = self.ceilingFan.getSpeed()
17+
self.ceilingFan.high()
18+
19+
def undo(self) -> None:
20+
if re.match(r'3\.[1-9][0-9]\.', sys.version[:5]):
21+
# Only for python 3.10 and later
22+
match self.prevSpeed:
23+
case CeilingFan.HIGH: self.ceilingFan.high()
24+
case CeilingFan.MEDIUM: self.ceilingFan.medium()
25+
case CeilingFan.LOW: self.ceilingFan.low()
26+
case _: self.ceilingFan.off()
27+
else:
28+
if self.prevSpeed == CeilingFan.HIGH: self.ceilingFan.high()
29+
elif self.prevSpeed == CeilingFan.MEDIUM: self.ceilingFan.medium()
30+
elif self.prevSpeed == CeilingFan.LOW: self.ceilingFan.low()
31+
else: self.ceilingFan.off()
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import re
2+
import sys
3+
4+
from CeilingFan import CeilingFan
5+
from Command import Command
6+
7+
8+
class CeilingFanMediumCommand(Command):
9+
ceilingFan: CeilingFan
10+
prevSpeed: int = 0
11+
12+
def __init__(self, ceilingFan: CeilingFan):
13+
self.ceilingFan = ceilingFan
14+
15+
def execute(self) -> None:
16+
self.prevSpeed = ceilingFan.getSpeed()
17+
self.ceilingFan.medium()
18+
19+
def undo(self) -> None:
20+
if re.match(r'3\.[1-9][0-9]\.', sys.version[:5]):
21+
# Only for python 3.10 and later
22+
match self.prevSpeed:
23+
case CeilingFan.HIGH: self.ceilingFan.high()
24+
case CeilingFan.MEDIUM: self.ceilingFan.medium()
25+
case CeilingFan.LOW: self.ceilingFan.low()
26+
case _: self.ceilingFan.off()
27+
else:
28+
if self.prevSpeed == CeilingFan.HIGH: self.ceilingFan.high()
29+
elif self.prevSpeed == CeilingFan.MEDIUM: self.ceilingFan.medium()
30+
elif self.prevSpeed == CeilingFan.LOW: self.ceilingFan.low()
31+
else: self.ceilingFan.off()
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import re
2+
import sys
3+
4+
from CeilingFan import CeilingFan
5+
from Command import Command
6+
7+
8+
class CeilingFanOffCommand(Command):
9+
ceilingFan: CeilingFan
10+
prevSpeed: int = 0
11+
12+
def __init__(self, ceilingFan: CeilingFan):
13+
self.ceilingFan = ceilingFan
14+
15+
def execute(self) -> None:
16+
self.prevSpeed = ceilingFan.getSpeed()
17+
self.ceilingFan.off()
18+
19+
def undo(self) -> None:
20+
if re.match(r'3\.[1-9][0-9]\.', sys.version[:5]):
21+
# Only for python 3.10 and later
22+
match self.prevSpeed:
23+
case CeilingFan.HIGH: self.ceilingFan.high()
24+
case CeilingFan.MEDIUM: self.ceilingFan.medium()
25+
case CeilingFan.LOW: self.ceilingFan.low()
26+
case _: self.ceilingFan.off()
27+
else:
28+
if self.prevSpeed == CeilingFan.HIGH: self.ceilingFan.high()
29+
elif self.prevSpeed == CeilingFan.MEDIUM: self.ceilingFan.medium()
30+
elif self.prevSpeed == CeilingFan.LOW: self.ceilingFan.low()
31+
else: self.ceilingFan.off()

command/party/Command.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class Command:
2+
def execute(self) -> None:
3+
pass
4+
def undo(self) -> None:
5+
pass

command/party/Hottub.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
class Hottub:
2+
on_: bool
3+
temperature: int = 0
4+
5+
def __init__(self):
6+
pass
7+
8+
def on(self) -> None:
9+
self.on_ = True
10+
11+
def off(self) -> None:
12+
self.on_ = False
13+
14+
def circulate(self) -> None:
15+
if self.on_:
16+
print("Hottub is bubbling!")
17+
18+
def jetsOn(self) -> None:
19+
if self.on_:
20+
print("Hottub jets are on")
21+
22+
def jetsOff(self) -> None:
23+
# if self.on_:
24+
if not self.on_:
25+
print("Hottub jets are off")
26+
27+
def setTemperature(self, temperature: int) -> None:
28+
if temperature > self.temperature:
29+
print(f"Hottub is heating to a steaming {temperature} degrees")
30+
else:
31+
print(f"Hottub is cooling to {temperature} degrees")
32+
self.temperature = temperature

command/party/HottubOffCommand.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from Command import Command
2+
from Hottub import Hottub
3+
4+
5+
class HottubOffCommand(Command):
6+
hottub: Hottub
7+
8+
def __init__(self, hottub: Hottub):
9+
self.hottub = hottub
10+
11+
def execute(self) -> None:
12+
self.hottub.setTemperature(98)
13+
self.hottub.off()
14+
15+
def undo(self) -> None:
16+
self.hottub.on()

command/party/HottubOnCommand.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from Command import Command
2+
from Hottub import Hottub
3+
4+
5+
class HottubOnCommand(Command):
6+
hottub: Hottub
7+
8+
def __init__(self, hottub: Hottub):
9+
self.hottub = hottub
10+
11+
def execute(self) -> None:
12+
self.hottub.on()
13+
self.hottub.setTemperature(104)
14+
self.hottub.circulate()
15+
16+
def undo(self) -> None:
17+
self.hottub.off()

command/party/Light.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
class Light:
2+
location: str = ""
3+
level: int = 0
4+
5+
def __init__(self, location: str):
6+
self.location = location
7+
8+
def on(self) -> None:
9+
self.level = 100
10+
print(f'{self.location} light is on')
11+
12+
def off(self) -> None:
13+
self.level = 0
14+
print(f'{self.location} light is off')
15+
16+
def dim(self, level: int) -> None:
17+
self.level = level
18+
if level == 0:
19+
self.off()
20+
else:
21+
print(f"Light is dimmed to {level}%")
22+
23+
def getLevel(self) -> int:
24+
return self.level

0 commit comments

Comments
 (0)