-
Notifications
You must be signed in to change notification settings - Fork 68
/
coffee_machine.py
108 lines (82 loc) · 2.66 KB
/
coffee_machine.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
class CoffeeMachine:
def __init__(self):
self.started = False
# Yes it's a magic machine :)
self.descale()
self.fill_tank()
self.fill_beans()
self.empty_grounds()
self._last_coffee_success = False
self._display_settings = False
self._water_hardness = 2
self._grinder = 'medium'
def start(self, lang = 'en'):
self.started = True
self.lang = lang
def stop(self):
self.started = False
@property
def messages(self):
i18n = {
'en': {
'tank': 'Fill tank',
'beans': 'Fill beans',
'grounds': 'Empty grounds',
'ready': 'Ready',
'settings': 'Settings:\n - 1: water hardness\n - 2: grinder'
},
'fr': {
'tank': 'Remplir reservoir',
'beans': 'Ajouter grains',
'grounds': 'Vider marc',
'ready': 'Pret',
'settings': 'Configurer:\n - 1: durete de l eau\n - 2: mouture'
}
}
return i18n[self.lang]
@property
def message(self):
if not self.started:
return ""
if self._display_settings:
return self.messages['settings']
if self.tank_content <= 10:
return self.messages['tank']
if self.beans_content < 3:
return self.messages['beans']
if self.grounds_content >= 30:
return self.messages['grounds']
if self.is_descaling_needed():
return self.messages['descale']
return self.messages['ready']
@property
def coffee_served(self):
return self._last_coffee_success
def take_coffee(self):
if (self.tank_content == 0 or self.beans_content == 0):
self._last_coffee_success = False
else:
self._last_coffee_success = True
self.tank_content -= 1
self.beans_content -= 1
self.grounds_content += 1
self.countdown_to_descale -= 1
def fill_tank(self):
self.tank_content = 60
def fill_beans(self):
self.beans_content = 40
def empty_grounds(self):
self.grounds_content = 0
def show_settings(self):
self._display_settings = True
def hide_settings(self):
self._display_settings = False
def get_settings(self):
return {
'water hardness': self._water_hardness,
'grinder': self._grinder
}
def descale(self):
self.countdown_to_descale = 500
def is_descaling_needed(self):
return self.countdown_to_descale <= 0