Fin video av en Stack-basert kalkulator tormaroe.
Dette så ut som en artig oppgave,så lagde en versjon i python.
Testet litt og gjort noe feilbehandling,fulgte ikke et TDD opplegg under denne oppgaven.
Kode
class Stack_calc(object):
'''Stack calulator - push numbers into stack - calculate last 2 elements'''
def __init__(self):
self.item = []
self.calculate =\
{'+' : lambda: self.item.append(self.item.pop() + self.item.pop()),
'-' : lambda: self.item.append(self.item.pop() - self.item.pop()),
'*' : lambda: self.item.append(self.item.pop() * self.item.pop()),
'/' : lambda: self.item.append(self.item.pop() / self.item.pop()),}
def parse_stack(self, source):
stack = source.split()
for element in stack:
try:
self.item.append(float(element))
except ValueError:
if element in self.calculate:
try:
self.calculate[element]()
except IndexError:
pass
def __str__(self):
return str(self.item)
def main():
obj = Stack_calc()
#Enter number will add to stack,use operators +-*/ to calculate 2 last elements
#To exit type Q
while True:
into_stack = raw_input(':-> ')
if into_stack == 'Q':
break
obj.parse_stack("%s" % into_stack)
print obj
if __name__ == '__main__':
main()
Testkjøring.
Kode
>>>
:-> 1
[1.0]
:-> 2
[1.0, 2.0]
:-> 3
[1.0, 2.0, 3.0]
:-> 4
[1.0, 2.0, 3.0, 4.0]
:-> 5
[1.0, 2.0, 3.0, 4.0, 5.0]
:-> +
[1.0, 2.0, 3.0, 9.0]
:-> -
[1.0, 2.0, 6.0]
:-> *
[1.0, 12.0]
:-> /
[12.0]
:-> /
[]
:-> 10000
[10000.0]
:-> 2222 44444
[10000.0, 2222.0, 44444.0]
:-> 5555
[10000.0, 2222.0, 44444.0, 5555.0]
:-> 900000000
[10000.0, 2222.0, 44444.0, 5555.0, 900000000.0]
:-> /
[10000.0, 2222.0, 44444.0, 162016.20162016203]
:-> *
[10000.0, 2222.0, 7200648064.806481]
:-> +
[10000.0, 7200650286.806481]
:-> -
[7200640286.806481]
:-> -
[]
:-> Q
>>>