# Four Operational Practice

Recommended for you: Get network issues from WhatsUp Gold. Not end users.

Recursive:

```def oper_two(num_one, oper, num_two):
if oper == '+':
return str(int(num_one) + int(num_two))
if oper == '-':
return str(int(num_one) - int(num_two))
if oper == '*':
return str(int(num_one) * int(num_two))
if oper == '/':
if num_two != '0':
return str(int(num_one) / int(num_two))
print 'oper_two error!'

#a = oper_two('4', '/', '2')
#print a

def compute_str(mystr):
print "str is: " , mystr
if len(mystr) <4:
return oper_two(mystr[0], mystr[1], mystr[2])
if mystr[1] == '*' or mystr[1] == '/':
return compute_str(compute_str(mystr[0:3]) + mystr[3:])
elif mystr[3] == '*' or mystr[3] == '/':
return compute_str(mystr[0:2] + compute_str(mystr[2:5]) + mystr[5:])
else:
return compute_str(compute_str(mystr[:3]) + mystr[3:])

def compute_allstr(allstr):
print "allstr is:" , allstr
first = allstr.find('(')
last = allstr.rfind(')')
#    print first , 'and', last
if first != -1 and last != -1:
return compute_allstr(allstr[:first] + compute_str(allstr[first+1:last]) + allstr[last+1:])
else:
return compute_str(allstr)

#arith_str = "1+2*3-7/2"
#result = compute_str(arith_str)

arith_str = "1+2*(7-3)/2"
result = compute_allstr(arith_str)

print result
```

Output:

allstr is: 1+2*(7-3)/2

str is:  7-3

allstr is: 1+2*4/2

str is:  1+2*4/2

str is:  2*4

str is:  1+8/2

str is:  8/2

str is:  1+4

5

```def oper_two(num_one, oper, num_two):
if oper == '+':
return str(int(num_one) + int(num_two))
if oper == '-':
return str(int(num_one) - int(num_two))
if oper == '*':
return str(int(num_one) * int(num_two))
if oper == '/':
if num_two != '0':
return str(int(num_one) / int(num_two))
print 'oper_two error!'

#a = oper_two('4', '/', '2')
#print a

def compute_str(mystr):
print "str is: " , mystr
tmp_list = []
if len(mystr) <4:
return oper_two(mystr[0], mystr[1], mystr[2])
if mystr[1] == '*' or mystr[1] == '/':
for i in mystr[0:3]:
tmp_list.append(i)
for i in mystr[3:]:
tmp_list.append(i)
return compute_str(tmp_list)
elif mystr[3] == '*' or mystr[3] == '/':
for i in mystr[0:2]:
tmp_list.append(i)
tmp_list.append(compute_str(mystr[2:5]))
for i in mystr[5:]:
tmp_list.append(i)
return compute_str(tmp_list)
else:
tmp_list.append(compute_str(mystr[:3]))
for i in mystr[3:]:
tmp_list.append(i)
return compute_str(tmp_list)

def compute_allstr(allstr):
print "allstr is:" , allstr
tmp_list = []
count = 0
first = -1
last = -1
for i in allstr[:]:
count += 1
if i == '(':
first = count
count = 0
for i in allstr[-1::-1]:
count += 1
if i == ')':
last = count

print first , 'and', last
if first != -1 and last != -1:
for i in allstr[:first-1]:
tmp_list.append(i)
tmp_list.append(compute_str(allstr[first:-last]))
for i in allstr[-last+1:]:
tmp_list.append(i)
return compute_allstr(tmp_list)
else:
return compute_str(allstr)

#arith_str = "1+2*3-7/2"
#result = compute_str(arith_str)

#arith_str = "1+2*(7-3)/2"
#result = compute_allstr(arith_str)

def str2list(mystr):
mylist = []
one_num = 0
tmp_i = ''
for i in mystr:
if i.isdigit():
one_num = one_num * 10 + int(i)
elif i == '(':
mylist.append(i)
elif i == ')':
mylist.append(one_num)
one_num = 0
mylist.append(i)
else:
if tmp_i != ')':
mylist.append(one_num)
one_num = 0
mylist.append(i)
tmp_i = i

mylist.append(one_num)
return mylist
#
#arith_str = "1+2*17-3/2"
arith_str = "1+2*(17-3)/2"

arith_list = str2list(arith_str)
print arith_list
result = compute_allstr(arith_list)

print result
```

Output:

[1, '+', 2, '*', '(', 17, '-', 3, ')', '/', 2]

allstr is: [1, '+', 2, '*', '(', 17, '-', 3, ')', '/', 2]

5 and 3

str is:  [17, '-', 3]

allstr is: [1, '+', 2, '*', '14', '/', 2]

-1 and -1

str is:  [1, '+', 2, '*', '14', '/', 2]

str is:  [2, '*', '14']

str is:  [1, '+', '28', '/', 2]

str is:  ['28', '/', 2]

str is:  [1, '+', '14']

15

The use of stack

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download

Posted by Barnett at November 22, 2013 - 2:27 AM