Advertisement
Guest User

python

a guest
Jan 17th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.70 KB | None | 0 0
  1. def n_and_o (cadena):
  2.     posicio_o = []
  3.     for lletra in cadena:
  4.         if lletra == '+':
  5.             posicio_o += ['suma']
  6.         elif lletra == '-':
  7.             posicio_o += ['resta']
  8.         elif lletra == '*':
  9.             posicio_o += ['multi']
  10.         elif lletra == '/':
  11.             posicio_o += ['div']
  12.     llista_nums = []
  13.     for n in cadena.replace ('+',' ').replace ('-',' ').replace ('*',' ').replace ('/',' ').split():
  14.         print (n)
  15.         llista_nums += [int (n)]
  16.     return llista_nums, posicio_o
  17.  
  18. def suma_list (llista1, llista2):
  19.     nova = []
  20.     for i in llista1:
  21.         for j in llista2:
  22.             nova += [i + j]
  23.     return nova
  24.  
  25. def rest_list (llista1, llista2, mode):
  26.     nova = []
  27.     if mode == 0:
  28.         for i in llista1:
  29.             for j in llista2:
  30.                 nova += [i - j]
  31.     else:
  32.         for i in llista2:
  33.             for j in llista1:
  34.                 nova += [i - j]
  35.     return nova
  36.  
  37. def mult_list (llista1, llista2):
  38.     nova = []
  39.     for i in llista1:
  40.         for j in llista2:
  41.             nova += [i * j]
  42.     return nova
  43.  
  44. def div_list (llista1, llista2, mode):
  45.     if mode == 0:
  46.         for i in llista1:
  47.             for j in llista2:
  48.                 if j == 0: return
  49.                 nova += [i / j]
  50.     else:
  51.         for i in llista2:
  52.             for j in llista1:
  53.                 if j == 0: return
  54.                 nova += [i / j]
  55.     return nova
  56.  
  57. def rec_op (n, op):
  58.     llarg = len (n)
  59.     print (n, op)
  60.     if llarg == 2:
  61.         if op[0] == 'suma': return [n[0] + n[1]]
  62.         elif op[0] == 'resta': return [n[0] - n[1]]
  63.         elif op[0] == 'multi': return [n[0] * n[1]]
  64.         else: return [n[0] / n[1]]
  65.     else:
  66.         if op[0] == 'suma':
  67.             expr1 = suma_list ([n[0]], rec_op (n[1:], op[1:]))
  68.         elif op[0] == 'resta':
  69.             expr1 = rest_list ([n[0]], rec_op (n[1:], op[1:]), 0)
  70.         elif op[0] == 'multi':
  71.             expr1 = mult_list ([n[0]], rec_op (n[1:], op[1:]))
  72.         else:
  73.             expr1 = div_list ([n[0]], rec_op (n[1:], op[1:]), 0)
  74.         l_op = len (op)
  75.         if op[l_op - 1] == 'suma':
  76.             expr2 = suma_list ([n[llarg-1]], rec_op (n[:llarg-1], op[:l_op-1]))
  77.         elif op[l_op - 1] == 'resta':
  78.             expr2 = rest_list ([n[llarg-1]], rec_op (n[:llarg-1], op[:l_op-1]), 1)
  79.         elif op[l_op - 1] == 'multi':
  80.             expr2 = mult_list ([n[llarg-1]], rec_op (n[:llarg-1], op[:l_op-1]))
  81.         else:
  82.             expr2 = div_list ([n[llarg-1]], rec_op (n[:llarg-1], op[:l_op-1]), 1)
  83.         if llarg%2 == 1:
  84.             return expr1+expr2
  85.         else:
  86.             mid = l_op // 2
  87.             a1 = rec_op (n[:llarg//2], op[:mid])
  88.             a2 = rec_op (n[llarg//2:], op[mid+1:])
  89.             if op[mid] == 'suma':
  90.                 expr3 = suma_list (a1, a2)
  91.             elif op[mid] == 'resta':
  92.                 expr3 = rest_list(a1, a2, 0)
  93.             elif op[mid] == 'multi':
  94.                 expr3 = mult_list(a1, a2)
  95.             else:
  96.                 expr3 = div_list(a1, a2, 0)
  97.             return expr1 + expr3 + expr2
  98.  
  99. def print_list (llista):
  100.     for num in llista:
  101.         print (num)
  102.  
  103. def main ():
  104.     expr = input ("OPERATION: ")
  105.     num, op = n_and_o (expr)
  106.     res = rec_op (num, op)
  107.     print_list (res)
  108.  
  109. main ()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement