python-checkio/ElectronicStation/multicolored-lamp.py

44 lines
1.0 KiB
Python
Raw Normal View History

2020-01-02 17:30:27 +01:00
import abc
class State(object, metaclass=abc.ABCMeta):
def __init__(self):
self.color_index = 0
@abc.abstractmethod
def light(self):
COLORS = ["Green", "Red", "Blue", "Yellow"]
state_color = COLORS[self.color_index]
self.color_index += 1
if self.color_index == len(COLORS):
self.color_index = 0
return state_color
class Lamp(State):
def __init__(self):
super().__init__()
self.color = None
def light(self):
self.color = super().light()
return self.color
if __name__ == '__main__':
# These "asserts" using only for self-checking and not necessary for auto-testing
lamp_1 = Lamp()
lamp_2 = Lamp()
lamp_1.light() # Green
lamp_1.light() # Red
lamp_2.light() # Green
assert lamp_1.light() == "Blue"
assert lamp_1.light() == "Yellow"
assert lamp_1.light() == "Green"
assert lamp_2.light() == "Red"
assert lamp_2.light() == "Blue"
print("Coding complete? Let's try tests!")