es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Necesito evaluar una expresión matemática utilizando un bucle For

Tengo este código ya para una calculadora que recibe entrada de la cadena:

keepAsking = True
equationList = []

while keepAsking:  # seguir repitiendo hasta que keepAsking sea falso
    print("Por favor, introduce la expresión matemática que deseas evaluar en el programa: \n")  # tomando la entrada del usuario
    userInput = input()
    equationList.append(userInput)
    print("¿Tienes otras operaciones para añadir? \n")  # otra entrada del usuario (elección)
    userChoice = input()
    if userChoice.lower() == "yes":  # si el usuario quiere seguir preguntando
        keepAsking = True
    else:
        print(100 * "-")
        print("|{0:<15s}|{1:^40s}|{2:>40s}|".format("Número de operación", "expresión de la operación", "resultado de la operación"))
        # si no, imprimir lo siguiente
        print(100 * "-")
        # Para cada ecuación, obtener el índice y el elemento en sí
        for i, item in enumerate(equationList):
            # eval() ejecuta código Python
            print("|{0:<15d}|{1:^40s}|{2:>40.2f}|".format(i + 1, item, eval(item)))
        keepAsking = False
        print(100 * "-")

pero quiero reemplazar la función eval() con bucles For para evaluar las expresiones y obtener el mismo resultado, ¿sería posible?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible reemplazar la función eval() con bucles for para evaluar expresiones. Aquí hay una forma de hacerlo:

    1. Divida la entrada del usuario en una lista de operandos y operadores utilizando el método split().
    2. Utilice un bucle for para iterar a través de la lista de operandos y operadores, realizando los cálculos uno a la vez.
    3. Mantenga un seguimiento del resultado actual a medida que itera a través de la lista, actualizándolo después de cada operación realizada.
    4. Devuelva el resultado final después de que se hayan realizado todas las operaciones.

    Aquí hay un ejemplo de implementación:

    def evaluar_expresion(expresion):
        # Dividir la expresión en una lista de operandos y operadores
        operandos = expresion.split()
        operadores = ['+', '-', '*', '/']
        resultado = float(operandos[0])  # Inicializar el resultado con el primer operando
    
        # Iterar a través de la lista de operandos y operadores
        for i in range(1, len(operandos), 2):
            operador = operandos[i]
            operando = float(operandos[i + 1])
    
            # Realizar la operación y actualizar el resultado
            if operador == '+':
                resultado += operando
            elif operador == '-':
                resultado -= operando
            elif operador == '*':
                resultado *= operando
            elif operador == '/':
                resultado /= operando
    
        return resultado
    

    Luego puedes usar esta función en tu código existente de esta manera:

    seguirPreguntando = True
    listaExpresiones = []
    
    while seguirPreguntando:
        print("Por favor, ingrese la expresión matemática que desea que el programa evalúe:")
        entradaUsuario = input()
        listaExpresiones.append(entradaUsuario)
        print("¿Tiene otras operaciones para agregar?")
        eleccionUsuario = input()
        if eleccionUsuario.lower() == "sí":
            seguirPreguntando = True
        else:
            print(100*"-")
            print("|{0:<15s}|{1:^40s}|{2:>40s}|".format("Nº de operación", "expresión de la operación", "resultado de la operación"))
            print(100*"-")
            for i, item in enumerate(listaExpresiones):
                salida = evaluar_expresion(item)  # Llamada a la nueva función para evaluar la expresión
                print("|{0:<15d}|{1:^40s}|{2:>40.2f}|".format(i + 1, item, salida))
            seguirPreguntando = False
            print(100*"-")
    

    Nota: Esta implementación asume que cada expresión consta de alternancia de operandos y operadores, separados por espacios en blanco. Es posible que debas modificarlo si el formato de entrada es diferente.

Comments are closed.