def definir_pontos(entrada): pontos_cartesianos = [] for j in range(len(entrada)): if j % 2 != 0: continue valores = retorna_valores_das_tuplas(entrada, j) pontos_cartesianos.append(PontosEm2D(float(valores[0]),float(valores[1]))) return pontos_cartesianos
def realizar_operacao_item_sem_prioridade_antes(operacoes, entrada, pontos_cartesianos, k, identidade=PontosEm2D()): resultado = operacoes[entrada[k]](pontos_cartesianos[(k - 1) // 2], pontos_cartesianos[(k + 1) // 2]) pontos_cartesianos[(k - 1) // 2] = resultado return operacoes[entrada[k]](resultado, identidade)
def operar_nos_pontos(pontos_cartesianos, entrada, operacoes): ocorrencias_tipo_a = lambda lst: (i for i, e in enumerate(lst) if e in ['*', '/', '//']) lista_de_ocorrencias_tipo_a = list(ocorrencias_tipo_a(entrada)) ocorrencias_tipo_b = lambda lst: (i for i, e in enumerate(lst) if e in ['+', '-']) lista_de_ocorrencias_tipo_b = list(ocorrencias_tipo_b(entrada)) ocorrencias_tipo_c = lambda lst: (i for i, e in enumerate(lst) if e in ['==', 'sobre']) lista_de_ocorrencias_tipo_c = list(ocorrencias_tipo_c(entrada)) assert not (any([ k < i for i in lista_de_ocorrencias_tipo_a for k in lista_de_ocorrencias_tipo_b ]) and len(lista_de_ocorrencias_tipo_a) > 0) pos_op = lista_de_ocorrencias_tipo_a + lista_de_ocorrencias_tipo_b + lista_de_ocorrencias_tipo_c assert len(pos_op) > 0 for k in pos_op: if k in lista_de_ocorrencias_tipo_a and any( [i > k for i in lista_de_ocorrencias_tipo_b]): resultado = realizar_operacao_item_sem_prioridade_depois( operacoes, entrada, pontos_cartesianos, k, PontosEm2D(1, 1)) elif k in lista_de_ocorrencias_tipo_a: resultado = realizar_operacao_item_sem_prioridade_antes( operacoes, entrada, pontos_cartesianos, k, PontosEm2D(1, 1)) elif k in lista_de_ocorrencias_tipo_b: resultado = realizar_operacao_item_sem_prioridade_depois( operacoes, entrada, pontos_cartesianos, k) else: if entrada[k] == 'sobre': identidade = pontos_cartesianos[(k - 1) // 2] print(operacoes[entrada[k]](identidade)) elif entrada[k] == '==': print(operacoes[entrada[k]]( pontos_cartesianos[(k - 1) // 2], pontos_cartesianos[(k + 1) // 2])) print(resultado)