Python - Phyton. ¿Cómo estructurar un código que resuelva expresiones matemáticas desde una línea de texto?

 
Vista:

Phyton. ¿Cómo estructurar un código que resuelva expresiones matemáticas desde una línea de texto?

Publicado por Andrés (1 intervención) el 17/05/2021 23:04:48
Aprecio sus sugerencias para estructurar un código que permita operar lo mostrado a continuación. Prefiero no usar packages. Tengo claro que debo pensar en el siguiente esquema:

I. Tokenization

II. Normalization

III. Evaluation

Ejemplo:

evaluate("seven")
# Returns: 7

evaluate("six minus (three plus five) times two")
# Returns: -10

evaluate("five divided by two")
# Returns: 2.5



GRACIAS!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Phyton. ¿Cómo estructurar un código que resuelva expresiones matemáticas desde una línea de texto?

Publicado por tincopasan (1082 intervenciones) el 18/05/2021 01:16:18
he visto esta misma pregunta en otro foro donde participo y allí ya la cerraron, es claro que por que ahí son más estrictos en cuanto hay que intentar algo, acá permiten pedir soluciones sin que implementen nada de código, en fin.

lo curioso es que si sabés como esquematizar una posible solución ¿por qué simplemente no la implementas?
siguiendo la premisa que no querés usar bibliotecas, lo cual nunca tiene sentido, es querer inventar la rueda , te muestro una posible solución porque no lleva más de 1 minuto de tipeo.
No tiene todas las posibilidades ni control de errores, pero eso ya te toca a vos, ni loco te hago todo el código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
datos={"two":"2","six":"6","seven":"7","three":"3","five":"5",
       "divided":"/","plus":"+","times":"*","minus":"-",
       "(":"(",")":")"}
 
def evaluar(cadena):
    cadena = cadena.split()
    sub = ""
    for x in cadena:
        temp=" "
        if x[0] == "(":
            temp = "("+datos.get(x[1:])
        if x[-1] == ")":
            temp = datos.get(x[:-1]) + ")"
        if x in datos:
            temp = datos.get(x)
        sub+= f"{temp} "
    resultado = eval(sub)
    return resultado
 
print(evaluar("seven"))
print(evaluar("six minus (three plus five) times two"))
print(evaluar("five divided by two"))

como ves, es bastante simple.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar