1def get_molecule_mass(effect_name):
2 molecule_mass = 0
3 for letter in effect_name:
4 print(letter)
5 molecule_mass += ord(letter)
6
7 return molecule_mass
8
9class Effect:
10
11 def __init__(self, name, effect):
12 self.name = name
13 self.effect = effect
14 self.part_of_something_bigger = False
15 self.called = False
16 self.intensity = 1
17
18 def increment_intensity(self):
19 self.intensity += 1
20
21 def __call__(self, target):
22 if self.called:
23 raise TypeError('Effect is depleted.')
24
25 if self.part_of_something_bigger:
26 raise TypeError('Potion is now part of something bigger than itself.')
27
28 for _ in range (self.intensity):
29 self.effect(target)
30 self.called = True
31
32
33class Potion:
34
35 def __init__(self, effects, duration):
36 self.effect = {}
37 self.object_effects = {}
38 self.duration = duration
39 self.called = False
40 self.part_of_something_bigger = False
41 for effect_name in effects.keys():
42 if effect_name in self.effect.keys():
43 self.object_effects[effect_name].increment_intensity()
44 else:
45 current_effect = Effect(effect_name, effects[effect_name])
46 self.effect[effect_name] = effects[effect_name]
47 self.object_effects[effect_name] = current_effect
48 setattr(self, effect_name, current_effect)
49
50 def __add__(self, other):
51 if self.called is True or other.called is True:
52 raise TypeError('Potion is depleted.')
53 if self.part_of_something_bigger is True or other.part_of_something_bigger is True:
54 raise TypeError('Potion is now part of something bigger than itself.')
55 self.part_of_something_bigger = True
56 other.part_of_something_bigger = True
57 new_potion_effects = self.effect | other.effect
58 new_potion_duration = max(self.duration, other.duration)
59 new_potion = Potion(new_potion_effects, new_potion_duration)
60
61 for effect_name in new_potion.object_effects:
62 new_potion.object_effects[effect_name].intensity = 0
63 if effect_name in self.object_effects and not self.object_effects[effect_name].called:
64 new_potion.object_effects[effect_name].intensity += self.object_effects[effect_name].intensity
65 self.object_effects[effect_name].part_of_something_bigger = True
66 if effect_name in other.object_effects and not other.object_effects[effect_name].called:
67 new_potion.object_effects[effect_name].intensity += other.object_effects[effect_name].intensity
68 other.object_effects[effect_name].part_of_something_bigger = True
69
70 for effect_name in self.object_effects:
71 if (effect_name in other.object_effects and
72 self.object_effects[effect_name].called and
73 other.object_effects[effect_name].called):
74 new_potion.object_effects.pop(effect_name)
75 new_potion.effect.pop(effect_name)
76 delattr(new_potion, effect_name)
77
78 return new_potion
79
80 def __mul__(self, other):
81 if self.called:
82 raise TypeError('Potion is depleted.')
83 if self.part_of_something_bigger:
84 raise TypeError('Potion is now part of something bigger than itself.')
85 self.part_of_something_bigger = True
86 new_potion = Potion(self.effect, self.duration)
87
88 for effect_name in self.object_effects:
89 if self.object_effects[effect_name].called:
90 new_potion.object_effects.pop(effect_name)
91 new_potion.effect.pop(effect_name)
92 delattr(new_potion, effect_name)
93 continue
94 new_potion.object_effects[effect_name].intensity = self.object_effects[effect_name].intensity
95 self.object_effects[effect_name].part_of_something_bigger = True
96 for effect_name in new_potion.object_effects:
97 new_potion.object_effects[effect_name].intensity = int(round(new_potion.object_effects[effect_name].intensity * other, 0))
98 return new_potion
99
100 def __sub__(self, other):
101 if self.called is True or other.called is True:
102 raise TypeError('Potion is depleted.')
103 if self.part_of_something_bigger is True or other.part_of_something_bigger is True:
104 raise TypeError('Potion is now part of something bigger than itself.')
105 self.part_of_something_bigger = True
106 other.part_of_something_bigger = True
107 new_potion = Potion(self.effect, self.duration)
108
109 for effect_name in self.object_effects:
110 new_potion.object_effects[effect_name].intensity = self.object_effects[effect_name].intensity
111 self.object_effects[effect_name].part_of_something_bigger = True
112 if effect_name in other.object_effects:
113 other.object_effects[effect_name].part_of_something_bigger = True
114
115 for effect_name in other.object_effects:
116 if effect_name not in new_potion.object_effects.keys():
117 raise TypeError('cannot remove non-existent effects')
118 if other.object_effects[effect_name].called:
119 continue
120 if new_potion.object_effects[effect_name].intensity > other.object_effects[effect_name].intensity:
121 new_potion.object_effects[effect_name].intensity -= other.object_effects[effect_name].intensity
122 else:
123 new_potion.object_effects.pop(effect_name)
124 new_potion.effect.pop(effect_name)
125 delattr(new_potion, effect_name)
126
127 for effect_name in self.object_effects:
128 if self.object_effects[effect_name].called:
129 new_potion.object_effects.pop(effect_name)
130 new_potion.effect.pop(effect_name)
131 delattr(new_potion, effect_name)
132 return new_potion
133
134 def __truediv__(self, other):
135 potions = []
136 for _ in range(other):
137 potions.append(self * (1 / other))
138 self.part_of_something_bigger = False
139 for effect_name in self.object_effects:
140 self.object_effects[effect_name].part_of_something_bigger = False
141
142 self.part_of_something_bigger = True
143 for effect_name in self.object_effects:
144 self.object_effects[effect_name].part_of_something_bigger = True
145 return potions
146
147 def __eq__(self, other):
148 if self.called is True or other.called is True:
149 raise TypeError('Potion is depleted.')
150 if self.effect != other.effect:
151 return False
152 for effect_name in self.object_effects:
153 if (effect_name not in other.object_effects or
154 other.object_effects[effect_name].intensity != self.object_effects[effect_name].intensity):
155 return False
156
157 return True
158
159 def __lt__(self, other):
160 if self.called is True or other.called is True:
161 raise TypeError('Potion is depleted.')
162 self_intensity = 0
163 for effect in self.object_effects.values():
164 self_intensity += effect.intensity
165 other_intensity = 0
166 for effect in other.object_effects.values():
167 other_intensity += effect.intensity
168
169 return self_intensity < other_intensity
170
171 def __gt__(self, other):
172 return other < self
173
174
175class ГоспожатаПоХимия:
176
177 def apply(self, target, potion):
178 if potion.called is True:
179 raise TypeError('Potion is depleted.')
180
181 sorted_effects = list(sorted(potion.object_effects, key=lambda item: get_molecule_mass(item), reverse=True))
182 for effect in sorted_effects:
183 if potion.object_effects[effect].called is not True:
184 potion.object_effects[effect](target)
185 potion.called = True
186
187 def tick(self):
188 pass
189
........F..F....F
Stdout:
i
n
t
_
a
t
t
r
_
f
u
n
F
Stdout:
i
n
t
_
a
t
t
r
_
f
u
n
i
n
t
_
a
t
t
r
_
f
u
n
F
Stdout:
i
n
t
_
a
t
t
r
_
f
u
n
i
n
t
_
a
t
t
r
_
f
u
n
F
Stdout:
i
n
t
_
a
t
t
r
_
f
u
n
f
l
o
a
t
_
a
t
t
r
_
f
u
n
l
i
s
t
_
a
t
t
r
_
f
u
n
d
i
c
t
_
a
t
t
r
_
f
u
n
======================================================================
FAIL: test_dilution (test.TestPotionOperations)
Test dilution of a potion.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 155, in test_dilution
self.assertEqual(self._target.int_attr, 50)
AssertionError: 500 != 50
======================================================================
FAIL: test_separation (test.TestPotionOperations)
Test separation of a potion.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 245, in test_separation
self.assertEqual(self._target.int_attr, 50)
AssertionError: 500 != 50
======================================================================
FAIL: test_ticking_immutable (test.TestГоспожатаПоХимия)
Test ticking after applying a potion with immutable attributes.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 429, in test_ticking_immutable
self.assertEqual(self._target.int_attr, 5)
AssertionError: 500 != 5
Stdout:
i
n
t
_
a
t
t
r
_
f
u
n
======================================================================
FAIL: test_ticking_multiple_potions (test.TestГоспожатаПоХимия)
Test ticking after applying multiple potions which affect the same attribute.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 458, in test_ticking_multiple_potions
self.assertEqual(self._target.int_attr, 50)
AssertionError: 500 != 50
Stdout:
i
n
t
_
a
t
t
r
_
f
u
n
i
n
t
_
a
t
t
r
_
f
u
n
======================================================================
FAIL: test_ticking_multiple_targets (test.TestГоспожатаПоХимия)
Test ticking after applying a potion with mutable attributes.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 490, in test_ticking_multiple_targets
self.assertEqual(target1.int_attr, 5)
AssertionError: 500 != 5
Stdout:
i
n
t
_
a
t
t
r
_
f
u
n
i
n
t
_
a
t
t
r
_
f
u
n
======================================================================
FAIL: test_ticking_mutable (test.TestГоспожатаПоХимия)
Test ticking after applying a potion with mutable attributes.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 444, in test_ticking_mutable
self.assertEqual(self._target.int_attr, 5)
AssertionError: 50 != 5
Stdout:
i
n
t
_
a
t
t
r
_
f
u
n
f
l
o
a
t
_
a
t
t
r
_
f
u
n
l
i
s
t
_
a
t
t
r
_
f
u
n
d
i
c
t
_
a
t
t
r
_
f
u
n
----------------------------------------------------------------------
Ran 20 tests in 0.002s
FAILED (failures=6)
| f | 1 | def get_molecule_mass(effect_name): | f | 1 | def get_molecule_mass(effect_name): |
| 2 | molecule_mass = 0 | 2 | molecule_mass = 0 | ||
| 3 | for letter in effect_name: | 3 | for letter in effect_name: | ||
| 4 | print(letter) | 4 | print(letter) | ||
| 5 | molecule_mass += ord(letter) | 5 | molecule_mass += ord(letter) | ||
| 6 | 6 | ||||
| 7 | return molecule_mass | 7 | return molecule_mass | ||
| 8 | 8 | ||||
| 9 | class Effect: | 9 | class Effect: | ||
| 10 | 10 | ||||
| 11 | def __init__(self, name, effect): | 11 | def __init__(self, name, effect): | ||
| 12 | self.name = name | 12 | self.name = name | ||
| 13 | self.effect = effect | 13 | self.effect = effect | ||
| 14 | self.part_of_something_bigger = False | 14 | self.part_of_something_bigger = False | ||
| 15 | self.called = False | 15 | self.called = False | ||
| 16 | self.intensity = 1 | 16 | self.intensity = 1 | ||
| 17 | 17 | ||||
| 18 | def increment_intensity(self): | 18 | def increment_intensity(self): | ||
| 19 | self.intensity += 1 | 19 | self.intensity += 1 | ||
| 20 | 20 | ||||
| 21 | def __call__(self, target): | 21 | def __call__(self, target): | ||
| 22 | if self.called: | 22 | if self.called: | ||
| 23 | raise TypeError('Effect is depleted.') | 23 | raise TypeError('Effect is depleted.') | ||
| 24 | 24 | ||||
| 25 | if self.part_of_something_bigger: | 25 | if self.part_of_something_bigger: | ||
| 26 | raise TypeError('Potion is now part of something bigger than itself.') | 26 | raise TypeError('Potion is now part of something bigger than itself.') | ||
| 27 | 27 | ||||
| 28 | for _ in range (self.intensity): | 28 | for _ in range (self.intensity): | ||
| 29 | self.effect(target) | 29 | self.effect(target) | ||
| 30 | self.called = True | 30 | self.called = True | ||
| 31 | 31 | ||||
| 32 | 32 | ||||
| 33 | class Potion: | 33 | class Potion: | ||
| 34 | 34 | ||||
| 35 | def __init__(self, effects, duration): | 35 | def __init__(self, effects, duration): | ||
| 36 | self.effect = {} | 36 | self.effect = {} | ||
| 37 | self.object_effects = {} | 37 | self.object_effects = {} | ||
| 38 | self.duration = duration | 38 | self.duration = duration | ||
| 39 | self.called = False | 39 | self.called = False | ||
| 40 | self.part_of_something_bigger = False | 40 | self.part_of_something_bigger = False | ||
| 41 | for effect_name in effects.keys(): | 41 | for effect_name in effects.keys(): | ||
| 42 | if effect_name in self.effect.keys(): | 42 | if effect_name in self.effect.keys(): | ||
| 43 | self.object_effects[effect_name].increment_intensity() | 43 | self.object_effects[effect_name].increment_intensity() | ||
| 44 | else: | 44 | else: | ||
| 45 | current_effect = Effect(effect_name, effects[effect_name]) | 45 | current_effect = Effect(effect_name, effects[effect_name]) | ||
| 46 | self.effect[effect_name] = effects[effect_name] | 46 | self.effect[effect_name] = effects[effect_name] | ||
| 47 | self.object_effects[effect_name] = current_effect | 47 | self.object_effects[effect_name] = current_effect | ||
| 48 | setattr(self, effect_name, current_effect) | 48 | setattr(self, effect_name, current_effect) | ||
| 49 | 49 | ||||
| 50 | def __add__(self, other): | 50 | def __add__(self, other): | ||
| 51 | if self.called is True or other.called is True: | 51 | if self.called is True or other.called is True: | ||
| 52 | raise TypeError('Potion is depleted.') | 52 | raise TypeError('Potion is depleted.') | ||
| 53 | if self.part_of_something_bigger is True or other.part_of_something_bigger is True: | 53 | if self.part_of_something_bigger is True or other.part_of_something_bigger is True: | ||
| 54 | raise TypeError('Potion is now part of something bigger than itself.') | 54 | raise TypeError('Potion is now part of something bigger than itself.') | ||
| 55 | self.part_of_something_bigger = True | 55 | self.part_of_something_bigger = True | ||
| 56 | other.part_of_something_bigger = True | 56 | other.part_of_something_bigger = True | ||
| 57 | new_potion_effects = self.effect | other.effect | 57 | new_potion_effects = self.effect | other.effect | ||
| 58 | new_potion_duration = max(self.duration, other.duration) | 58 | new_potion_duration = max(self.duration, other.duration) | ||
| 59 | new_potion = Potion(new_potion_effects, new_potion_duration) | 59 | new_potion = Potion(new_potion_effects, new_potion_duration) | ||
| 60 | 60 | ||||
| 61 | for effect_name in new_potion.object_effects: | 61 | for effect_name in new_potion.object_effects: | ||
| n | 62 | if effect_name in self.object_effects: | n | 62 | new_potion.object_effects[effect_name].intensity = 0 |
| 63 | if effect_name in self.object_effects and not self.object_effects[effect_name].called: | ||||
| 63 | new_potion.object_effects[effect_name].intensity = self.object_effects[effect_name].intensity | 64 | new_potion.object_effects[effect_name].intensity += self.object_effects[effect_name].intensity | ||
| 64 | self.object_effects[effect_name].part_of_something_bigger = True | 65 | self.object_effects[effect_name].part_of_something_bigger = True | ||
| n | 65 | else: | n | 66 | if effect_name in other.object_effects and not other.object_effects[effect_name].called: |
| 66 | new_potion.object_effects[effect_name].intensity = other.object_effects[effect_name].intensity | 67 | new_potion.object_effects[effect_name].intensity += other.object_effects[effect_name].intensity | ||
| 67 | other.object_effects[effect_name].part_of_something_bigger = True | 68 | other.object_effects[effect_name].part_of_something_bigger = True | ||
| 68 | 69 | ||||
| n | 69 | for effect_name in self.effect: | n | 70 | for effect_name in self.object_effects: |
| 70 | if effect_name in other.effect: | 71 | if (effect_name in other.object_effects and | ||
| 71 | new_potion.object_effects[effect_name].intensity += other.object_effects[effect_name].intensity | 72 | self.object_effects[effect_name].called and | ||
| 73 | other.object_effects[effect_name].called): | ||||
| 74 | new_potion.object_effects.pop(effect_name) | ||||
| 75 | new_potion.effect.pop(effect_name) | ||||
| 76 | delattr(new_potion, effect_name) | ||||
| 77 | |||||
| 72 | return new_potion | 78 | return new_potion | ||
| 73 | 79 | ||||
| 74 | def __mul__(self, other): | 80 | def __mul__(self, other): | ||
| 75 | if self.called: | 81 | if self.called: | ||
| 76 | raise TypeError('Potion is depleted.') | 82 | raise TypeError('Potion is depleted.') | ||
| 77 | if self.part_of_something_bigger: | 83 | if self.part_of_something_bigger: | ||
| 78 | raise TypeError('Potion is now part of something bigger than itself.') | 84 | raise TypeError('Potion is now part of something bigger than itself.') | ||
| 79 | self.part_of_something_bigger = True | 85 | self.part_of_something_bigger = True | ||
| 80 | new_potion = Potion(self.effect, self.duration) | 86 | new_potion = Potion(self.effect, self.duration) | ||
| 81 | 87 | ||||
| 82 | for effect_name in self.object_effects: | 88 | for effect_name in self.object_effects: | ||
| 83 | if self.object_effects[effect_name].called: | 89 | if self.object_effects[effect_name].called: | ||
| 84 | new_potion.object_effects.pop(effect_name) | 90 | new_potion.object_effects.pop(effect_name) | ||
| 85 | new_potion.effect.pop(effect_name) | 91 | new_potion.effect.pop(effect_name) | ||
| 86 | delattr(new_potion, effect_name) | 92 | delattr(new_potion, effect_name) | ||
| 87 | continue | 93 | continue | ||
| 88 | new_potion.object_effects[effect_name].intensity = self.object_effects[effect_name].intensity | 94 | new_potion.object_effects[effect_name].intensity = self.object_effects[effect_name].intensity | ||
| 89 | self.object_effects[effect_name].part_of_something_bigger = True | 95 | self.object_effects[effect_name].part_of_something_bigger = True | ||
| 90 | for effect_name in new_potion.object_effects: | 96 | for effect_name in new_potion.object_effects: | ||
| 91 | new_potion.object_effects[effect_name].intensity = int(round(new_potion.object_effects[effect_name].intensity * other, 0)) | 97 | new_potion.object_effects[effect_name].intensity = int(round(new_potion.object_effects[effect_name].intensity * other, 0)) | ||
| 92 | return new_potion | 98 | return new_potion | ||
| 93 | 99 | ||||
| 94 | def __sub__(self, other): | 100 | def __sub__(self, other): | ||
| 95 | if self.called is True or other.called is True: | 101 | if self.called is True or other.called is True: | ||
| 96 | raise TypeError('Potion is depleted.') | 102 | raise TypeError('Potion is depleted.') | ||
| 97 | if self.part_of_something_bigger is True or other.part_of_something_bigger is True: | 103 | if self.part_of_something_bigger is True or other.part_of_something_bigger is True: | ||
| 98 | raise TypeError('Potion is now part of something bigger than itself.') | 104 | raise TypeError('Potion is now part of something bigger than itself.') | ||
| 99 | self.part_of_something_bigger = True | 105 | self.part_of_something_bigger = True | ||
| 100 | other.part_of_something_bigger = True | 106 | other.part_of_something_bigger = True | ||
| 101 | new_potion = Potion(self.effect, self.duration) | 107 | new_potion = Potion(self.effect, self.duration) | ||
| 102 | 108 | ||||
| 103 | for effect_name in self.object_effects: | 109 | for effect_name in self.object_effects: | ||
| 104 | new_potion.object_effects[effect_name].intensity = self.object_effects[effect_name].intensity | 110 | new_potion.object_effects[effect_name].intensity = self.object_effects[effect_name].intensity | ||
| 105 | self.object_effects[effect_name].part_of_something_bigger = True | 111 | self.object_effects[effect_name].part_of_something_bigger = True | ||
| 106 | if effect_name in other.object_effects: | 112 | if effect_name in other.object_effects: | ||
| 107 | other.object_effects[effect_name].part_of_something_bigger = True | 113 | other.object_effects[effect_name].part_of_something_bigger = True | ||
| 108 | 114 | ||||
| 109 | for effect_name in other.object_effects: | 115 | for effect_name in other.object_effects: | ||
| 110 | if effect_name not in new_potion.object_effects.keys(): | 116 | if effect_name not in new_potion.object_effects.keys(): | ||
| 111 | raise TypeError('cannot remove non-existent effects') | 117 | raise TypeError('cannot remove non-existent effects') | ||
| 112 | if other.object_effects[effect_name].called: | 118 | if other.object_effects[effect_name].called: | ||
| 113 | continue | 119 | continue | ||
| 114 | if new_potion.object_effects[effect_name].intensity > other.object_effects[effect_name].intensity: | 120 | if new_potion.object_effects[effect_name].intensity > other.object_effects[effect_name].intensity: | ||
| 115 | new_potion.object_effects[effect_name].intensity -= other.object_effects[effect_name].intensity | 121 | new_potion.object_effects[effect_name].intensity -= other.object_effects[effect_name].intensity | ||
| 116 | else: | 122 | else: | ||
| 117 | new_potion.object_effects.pop(effect_name) | 123 | new_potion.object_effects.pop(effect_name) | ||
| 118 | new_potion.effect.pop(effect_name) | 124 | new_potion.effect.pop(effect_name) | ||
| 119 | delattr(new_potion, effect_name) | 125 | delattr(new_potion, effect_name) | ||
| 120 | 126 | ||||
| 121 | for effect_name in self.object_effects: | 127 | for effect_name in self.object_effects: | ||
| 122 | if self.object_effects[effect_name].called: | 128 | if self.object_effects[effect_name].called: | ||
| 123 | new_potion.object_effects.pop(effect_name) | 129 | new_potion.object_effects.pop(effect_name) | ||
| 124 | new_potion.effect.pop(effect_name) | 130 | new_potion.effect.pop(effect_name) | ||
| 125 | delattr(new_potion, effect_name) | 131 | delattr(new_potion, effect_name) | ||
| 126 | return new_potion | 132 | return new_potion | ||
| 127 | 133 | ||||
| 128 | def __truediv__(self, other): | 134 | def __truediv__(self, other): | ||
| 129 | potions = [] | 135 | potions = [] | ||
| 130 | for _ in range(other): | 136 | for _ in range(other): | ||
| 131 | potions.append(self * (1 / other)) | 137 | potions.append(self * (1 / other)) | ||
| 132 | self.part_of_something_bigger = False | 138 | self.part_of_something_bigger = False | ||
| 133 | for effect_name in self.object_effects: | 139 | for effect_name in self.object_effects: | ||
| 134 | self.object_effects[effect_name].part_of_something_bigger = False | 140 | self.object_effects[effect_name].part_of_something_bigger = False | ||
| 135 | 141 | ||||
| 136 | self.part_of_something_bigger = True | 142 | self.part_of_something_bigger = True | ||
| 137 | for effect_name in self.object_effects: | 143 | for effect_name in self.object_effects: | ||
| 138 | self.object_effects[effect_name].part_of_something_bigger = True | 144 | self.object_effects[effect_name].part_of_something_bigger = True | ||
| 139 | return potions | 145 | return potions | ||
| 140 | 146 | ||||
| 141 | def __eq__(self, other): | 147 | def __eq__(self, other): | ||
| 142 | if self.called is True or other.called is True: | 148 | if self.called is True or other.called is True: | ||
| 143 | raise TypeError('Potion is depleted.') | 149 | raise TypeError('Potion is depleted.') | ||
| n | n | 150 | if self.effect != other.effect: | ||
| 151 | return False | ||||
| 144 | for effect_name in self.object_effects: | 152 | for effect_name in self.object_effects: | ||
| 145 | if (effect_name not in other.object_effects or | 153 | if (effect_name not in other.object_effects or | ||
| 146 | other.object_effects[effect_name].intensity != self.object_effects[effect_name].intensity): | 154 | other.object_effects[effect_name].intensity != self.object_effects[effect_name].intensity): | ||
| 147 | return False | 155 | return False | ||
| 148 | 156 | ||||
| 149 | return True | 157 | return True | ||
| 150 | 158 | ||||
| 151 | def __lt__(self, other): | 159 | def __lt__(self, other): | ||
| 152 | if self.called is True or other.called is True: | 160 | if self.called is True or other.called is True: | ||
| 153 | raise TypeError('Potion is depleted.') | 161 | raise TypeError('Potion is depleted.') | ||
| 154 | self_intensity = 0 | 162 | self_intensity = 0 | ||
| 155 | for effect in self.object_effects.values(): | 163 | for effect in self.object_effects.values(): | ||
| 156 | self_intensity += effect.intensity | 164 | self_intensity += effect.intensity | ||
| 157 | other_intensity = 0 | 165 | other_intensity = 0 | ||
| 158 | for effect in other.object_effects.values(): | 166 | for effect in other.object_effects.values(): | ||
| 159 | other_intensity += effect.intensity | 167 | other_intensity += effect.intensity | ||
| 160 | 168 | ||||
| 161 | return self_intensity < other_intensity | 169 | return self_intensity < other_intensity | ||
| 162 | 170 | ||||
| 163 | def __gt__(self, other): | 171 | def __gt__(self, other): | ||
| t | 164 | return not self < other and not self == other | t | 172 | return other < self |
| 165 | 173 | ||||
| 166 | 174 | ||||
| 167 | class ГоспожатаПоХимия: | 175 | class ГоспожатаПоХимия: | ||
| 168 | 176 | ||||
| 169 | def apply(self, target, potion): | 177 | def apply(self, target, potion): | ||
| 170 | if potion.called is True: | 178 | if potion.called is True: | ||
| 171 | raise TypeError('Potion is depleted.') | 179 | raise TypeError('Potion is depleted.') | ||
| 172 | 180 | ||||
| 173 | sorted_effects = list(sorted(potion.object_effects, key=lambda item: get_molecule_mass(item), reverse=True)) | 181 | sorted_effects = list(sorted(potion.object_effects, key=lambda item: get_molecule_mass(item), reverse=True)) | ||
| 174 | for effect in sorted_effects: | 182 | for effect in sorted_effects: | ||
| 175 | if potion.object_effects[effect].called is not True: | 183 | if potion.object_effects[effect].called is not True: | ||
| 176 | potion.object_effects[effect](target) | 184 | potion.object_effects[effect](target) | ||
| 177 | potion.called = True | 185 | potion.called = True | ||
| 178 | 186 | ||||
| 179 | def tick(self): | 187 | def tick(self): | ||
| 180 | pass | 188 | pass | ||
| 181 | 189 |
| Legends | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
|
| |||||||||
08.12.2023 14:00
08.12.2023 13:58
08.12.2023 13:59