riabayonaor's picture
Update app.py
2700858 verified
raw
history blame contribute delete
No virus
3.39 kB
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 punto. 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 in 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