
python without ifs. challenge one.
By: a guest on Jun 12th, 2011 | syntax:
Python | size: 1.55 KB | hits: 54 | expires: Never
#coding: utf-8
"""
Make calculator that has [2, 3, 5] numbers, plus and minus buttons and equal button.
Additional condition: make it without any if statements
"""
class CalcModel:
"""
Calculator Model
>>> c = CalcModel()
>>> c.add_number(5)
>>> c.add_number(6)
>>> c.current_number
'056'
>>> c.plus()
>>> c.number_stack
[56]
>>> c.add_number(3)
>>> c.add_number(4)
>>> c.equal()
90
>>> c.add_number(6)
>>> c.add_number(7)
>>> c.minus()
>>> c.equal()
23
"""
actions = {
'+': lambda x,y: x+y,
'-': lambda x,y: x-y
}
def __init__(self):
self.current_number = "0"
self.number_stack = []
self.action_stack = []
def add_number(self, n):
self.current_number += str(n)
def add_action(self, action):
self.number_stack.append(int(self.current_number))
self.current_number = "0"
self.action_stack.append(action)
def plus(self):
self.add_action('+')
def minus(self):
self.add_action('-')
def equal(self):
self.number_stack.append(int(self.current_number))
result = 0
for ind, action in enumerate(self.action_stack):
result += self.actions[action](self.number_stack[ind], self.number_stack[ind+1])
self.current_number = "0"
self.number_stack = [result]
self.action_stack = []
return result
if __name__ == "__main__":
import doctest
doctest.testmod()