File size: 3,386 Bytes
c0e5641
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
687f2cc
2700858
687f2cc
 
9a62f20
687f2cc
9a62f20
 
c0e5641
 
 
 
 
 
687f2cc
 
 
 
 
9645475
 
687f2cc
 
 
 
 
9a62f20
9645475
9a62f20
9645475
c0e5641
 
2700858
c0e5641
9a62f20
c0e5641
 
 
9645475
8054b60
9645475
 
 
 
2700858
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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