-
Notifications
You must be signed in to change notification settings - Fork 0
/
mytools.py
66 lines (60 loc) · 2.02 KB
/
mytools.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
from Istack import Stack
def mystr(anInteger):
NumberStack = Stack()
while anInteger >= 10:
digit = anInteger % 10
NumberStack.push(digit)
anInteger = anInteger // 10
NumberStack.push(anInteger)
aString = ''
for i in range(len(NumberStack)):
aString = aString + chr(NumberStack.pop() + 48)
return aString
def evalPostfix( postfixExpression ):
expressionlist = postfixExpression.split()
expressionstack = Stack()
for element in expressionlist:
if element not in '+-*/':
expressionstack.push(element)
elif len(expressionstack) >= 2:
num1 = float(expressionstack.pop())
num2 = float(expressionstack.pop())
num = ''
if element == '+':
num = num1 + num2
elif element == '-':
num = num2 - num1
elif element == '*':
num = num1 * num2
elif element == '/':
num = num2 / num1
else:
return None
if num != '':
expressionstack.push(num)
if len(expressionstack) == 1:
return float(expressionstack.pop())
def evalPrefix( prefixExpression ):
expressionlist = prefixExpression.split()
expressionstack = Stack()
for element in expressionlist[::-1]:
if element not in '+-*/':
expressionstack.push(element)
else:
num1 = float(expressionstack.pop())
num2 = float(expressionstack.pop())
num = ''
if element == '+':
num = num1 + num2
elif element == '-':
num = num1 - num2
elif element == '*':
num = num1 * num2
elif element == '/':
num = num1 / num2
else:
return None
if num != '':
expressionstack.push(num)
if len(expressionstack) == 1:
return float(expressionstack.pop())