You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.1 KiB
42 lines
1.1 KiB
class Model: |
|
|
|
def __init__(self): |
|
self.previous_value = '' |
|
self.value = '' |
|
self.operator = '' |
|
|
|
def calculate(self, caption): |
|
if caption == 'C': |
|
self.value = '' |
|
|
|
elif caption == '+/-': |
|
self.value = self.value[1:] if self.value[0] == '-' else '-' + self.value |
|
|
|
elif caption == '.': |
|
if not caption in self.value: |
|
self.value += caption |
|
elif self.value[-1] == caption: |
|
self.value = self.value[:-1] |
|
|
|
elif caption == '%': |
|
self.operator = '/' |
|
self.previous_value = self.value |
|
self.value = '100' |
|
self.value = str(self._evaluate()) |
|
|
|
elif caption == '=': |
|
self.value = str(self._evaluate()) |
|
|
|
elif isinstance(caption, int): |
|
self.value += str(caption) |
|
|
|
else: |
|
if self.value: |
|
self.operator = caption |
|
self.previous_value = self.value |
|
self.value = '' |
|
|
|
return self.value |
|
|
|
def _evaluate(self): |
|
return eval(self.previous_value + self.operator + self.value)
|
|
|