Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def n_and_o (cadena):
- posicio_o = []
- for lletra in cadena:
- if lletra == '+':
- posicio_o += ['suma']
- elif lletra == '-':
- posicio_o += ['resta']
- elif lletra == '*':
- posicio_o += ['multi']
- elif lletra == '/':
- posicio_o += ['div']
- llista_nums = []
- for n in cadena.replace ('+',' ').replace ('-',' ').replace ('*',' ').replace ('/',' ').split():
- print (n)
- llista_nums += [int (n)]
- return llista_nums, posicio_o
- def suma_list (llista1, llista2):
- nova = []
- for i in llista1:
- for j in llista2:
- nova += [i + j]
- return nova
- def rest_list (llista1, llista2, mode):
- nova = []
- if mode == 0:
- for i in llista1:
- for j in llista2:
- nova += [i - j]
- else:
- for i in llista2:
- for j in llista1:
- nova += [i - j]
- return nova
- def mult_list (llista1, llista2):
- nova = []
- for i in llista1:
- for j in llista2:
- nova += [i * j]
- return nova
- def div_list (llista1, llista2, mode):
- if mode == 0:
- for i in llista1:
- for j in llista2:
- if j == 0: return
- nova += [i / j]
- else:
- for i in llista2:
- for j in llista1:
- if j == 0: return
- nova += [i / j]
- return nova
- def rec_op (n, op):
- llarg = len (n)
- print (n, op)
- if llarg == 2:
- if op[0] == 'suma': return [n[0] + n[1]]
- elif op[0] == 'resta': return [n[0] - n[1]]
- elif op[0] == 'multi': return [n[0] * n[1]]
- else: return [n[0] / n[1]]
- else:
- if op[0] == 'suma':
- expr1 = suma_list ([n[0]], rec_op (n[1:], op[1:]))
- elif op[0] == 'resta':
- expr1 = rest_list ([n[0]], rec_op (n[1:], op[1:]), 0)
- elif op[0] == 'multi':
- expr1 = mult_list ([n[0]], rec_op (n[1:], op[1:]))
- else:
- expr1 = div_list ([n[0]], rec_op (n[1:], op[1:]), 0)
- l_op = len (op)
- if op[l_op - 1] == 'suma':
- expr2 = suma_list ([n[llarg-1]], rec_op (n[:llarg-1], op[:l_op-1]))
- elif op[l_op - 1] == 'resta':
- expr2 = rest_list ([n[llarg-1]], rec_op (n[:llarg-1], op[:l_op-1]), 1)
- elif op[l_op - 1] == 'multi':
- expr2 = mult_list ([n[llarg-1]], rec_op (n[:llarg-1], op[:l_op-1]))
- else:
- expr2 = div_list ([n[llarg-1]], rec_op (n[:llarg-1], op[:l_op-1]), 1)
- if llarg%2 == 1:
- return expr1+expr2
- else:
- mid = l_op // 2
- a1 = rec_op (n[:llarg//2], op[:mid])
- a2 = rec_op (n[llarg//2:], op[mid+1:])
- if op[mid] == 'suma':
- expr3 = suma_list (a1, a2)
- elif op[mid] == 'resta':
- expr3 = rest_list(a1, a2, 0)
- elif op[mid] == 'multi':
- expr3 = mult_list(a1, a2)
- else:
- expr3 = div_list(a1, a2, 0)
- return expr1 + expr3 + expr2
- def print_list (llista):
- for num in llista:
- print (num)
- def main ():
- expr = input ("OPERATION: ")
- num, op = n_and_o (expr)
- res = rec_op (num, op)
- print_list (res)
- main ()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement