import streamlit as st import os import random import google.generativeai as genai # Obteniendo la API KEY del entorno gemini_api_key = os.getenv("GEMINI_API_KEY") # Configuración de la API KEY para el uso de genai genai.configure(api_key=gemini_api_key) # Inicialización del modelo model = genai.GenerativeModel('gemini-pro') def chat_with_model(user_input): response = model.generate_content(user_input) return response.text def generar_ecuacion_y_respuestas(): a = random.randint(1, 10) b = random.randint(-10, 10) c = random.randint(-10, 10) x = (c - b) / a respuestas_incorrectas = set() while len(respuestas_incorrectas) < 3: respuesta_erronea = x + random.choice([-2, -1, 1, 2]) * random.random() respuestas_incorrectas.add(round(respuesta_erronea, 2)) respuestas = list(respuestas_incorrectas) + [round(x, 2)] random.shuffle(respuestas) ecuacion = f"{a}x + ({b}) = {c}" if b < 0 else f"{a}x + {b} = {c}" return ecuacion, respuestas, round(x, 2) def manejar_respuesta(ecuacion, respuesta_elegida, respuesta_correcta): if respuesta_elegida == str(respuesta_correcta): resultado = "Fantástico, tienes 1 puntos sube de nivel." st.session_state.aciertos += 1 else: resultado = "Incorrecto, sigue practicando." st.session_state.errores += 1 resultado += f" Escogiste la respuesta: {respuesta_elegida}." explicacion = chat_with_model(f"Explica el problema {ecuacion} y por qué la respuesta {respuesta_elegida} es {'correcta' if respuesta_elegida == str(respuesta_correcta) else 'incorrecta'}.") return resultado + "\n" + explicacion # Configuración de la interfaz de Streamlit st.title("Desafío de Matemáticas") st.markdown("Intenta resolver la ecuación y selecciona tu respuesta.") # Inicialización de contadores de aciertos y errores en el estado de sesión if 'aciertos' not in st.session_state: st.session_state.aciertos = 0 if 'errores' not in st.session_state: st.session_state.errores = 0 if 'nuevo_problema' not in st.session_state: st.session_state.nuevo_problema = True # Se añade un nuevo estado para controlar la generación de nuevos problemas # Mostrar los contadores en la barra lateral st.sidebar.write(f"Aciertos: {st.session_state.aciertos}") st.sidebar.write(f"Errores: {st.session_state.errores}") # Generación o recuperación del problema actual if st.session_state.nuevo_problema: st.session_state.ecuacion, st.session_state.respuestas, st.session_state.respuesta_correcta = generar_ecuacion_y_respuestas() st.session_state.nuevo_problema = False # Restablecer para evitar re-ejecuciones innecesarias st.write(st.session_state.ecuacion) respuesta_elegida = st.radio("Elige tu respuesta", [str(respuesta) for respuesta en st.session_state.respuestas]) # Botón de envío if st.button("Enviar"): resultado = manejar_respuesta(st.session_state.ecuacion, respuesta_elegida, st.session_state.respuesta_correcta) st.write(resultado) # No se necesita llamar a st.experimental_rerun() aquí porque la página se actualiza con el resultado # Botón para generar un nuevo problema if st.button("Generar Nuevo Problema"): st.session_state.nuevo_problema = True # Activar la señal para generar un nuevo problema st.experimental_rerun() # Re-ejecutar la aplicación para reflejar el cambio