Update app.py
Browse files
app.py
CHANGED
@@ -19,7 +19,7 @@ contexto = """
|
|
19 |
|
20 |
def generar_preguntas(num_preguntas=38):
|
21 |
prompt = f"""Basándote en el siguiente contexto sobre drones y aeronaves no tripuladas, genera {num_preguntas} preguntas de opción múltiple.
|
22 |
-
Cada pregunta debe tener tres opciones de respuesta y solo una debe ser correcta.
|
23 |
Devuelve las preguntas en el siguiente formato:
|
24 |
|
25 |
1. [Pregunta 1]
|
@@ -49,15 +49,16 @@ def generar_preguntas(num_preguntas=38):
|
|
49 |
current_question = {}
|
50 |
for line in content.split('\n'):
|
51 |
if re.match(r'^\d+\.', line):
|
52 |
-
if current_question:
|
53 |
preguntas.append(current_question)
|
54 |
current_question = {'pregunta': line.split('.', 1)[1].strip(), 'opciones': []}
|
55 |
elif line.startswith(('a)', 'b)', 'c)')):
|
56 |
current_question['opciones'].append(line[2:].strip())
|
57 |
elif line.startswith('Respuesta correcta:'):
|
58 |
-
|
|
|
59 |
|
60 |
-
if current_question:
|
61 |
preguntas.append(current_question)
|
62 |
|
63 |
return preguntas
|
@@ -66,7 +67,7 @@ def generar_preguntas(num_preguntas=38):
|
|
66 |
return []
|
67 |
|
68 |
# Aplicación Streamlit
|
69 |
-
st.title("
|
70 |
|
71 |
# Inicializar o cargar preguntas
|
72 |
if 'preguntas' not in st.session_state or not st.session_state.preguntas:
|
@@ -82,21 +83,26 @@ with st.form("quiz_form"):
|
|
82 |
respuestas_usuario = []
|
83 |
for i, pregunta in enumerate(st.session_state.preguntas):
|
84 |
st.write(f"**Pregunta {i+1}:** {pregunta['pregunta']}")
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
|
|
|
|
|
|
|
|
94 |
else:
|
95 |
-
st.
|
96 |
|
97 |
submitted = st.form_submit_button("Enviar respuestas")
|
98 |
|
99 |
# Calcular y mostrar el resultado final
|
100 |
if submitted:
|
101 |
-
correctas = sum(1 for user, pregunta in zip(respuestas_usuario, st.session_state.preguntas)
|
|
|
102 |
st.write(f"Has acertado {correctas} de {len(st.session_state.preguntas)} preguntas.")
|
|
|
19 |
|
20 |
def generar_preguntas(num_preguntas=38):
|
21 |
prompt = f"""Basándote en el siguiente contexto sobre drones y aeronaves no tripuladas, genera {num_preguntas} preguntas de opción múltiple.
|
22 |
+
Cada pregunta debe tener tres opciones de respuesta y solo una debe ser correcta.
|
23 |
Devuelve las preguntas en el siguiente formato:
|
24 |
|
25 |
1. [Pregunta 1]
|
|
|
49 |
current_question = {}
|
50 |
for line in content.split('\n'):
|
51 |
if re.match(r'^\d+\.', line):
|
52 |
+
if current_question and len(current_question.get('opciones', [])) == 3:
|
53 |
preguntas.append(current_question)
|
54 |
current_question = {'pregunta': line.split('.', 1)[1].strip(), 'opciones': []}
|
55 |
elif line.startswith(('a)', 'b)', 'c)')):
|
56 |
current_question['opciones'].append(line[2:].strip())
|
57 |
elif line.startswith('Respuesta correcta:'):
|
58 |
+
respuesta = line.split(':')[1].strip().lower()
|
59 |
+
current_question['respuesta_correcta'] = {'a': 0, 'b': 1, 'c': 2}.get(respuesta, 0)
|
60 |
|
61 |
+
if current_question and len(current_question.get('opciones', [])) == 3:
|
62 |
preguntas.append(current_question)
|
63 |
|
64 |
return preguntas
|
|
|
67 |
return []
|
68 |
|
69 |
# Aplicación Streamlit
|
70 |
+
st.title("*Las preguntas tardan 2 minutos en generarse")
|
71 |
|
72 |
# Inicializar o cargar preguntas
|
73 |
if 'preguntas' not in st.session_state or not st.session_state.preguntas:
|
|
|
83 |
respuestas_usuario = []
|
84 |
for i, pregunta in enumerate(st.session_state.preguntas):
|
85 |
st.write(f"**Pregunta {i+1}:** {pregunta['pregunta']}")
|
86 |
+
opciones = pregunta.get('opciones', [])
|
87 |
+
if opciones:
|
88 |
+
respuesta = st.radio(f"Selecciona una opción para la pregunta {i+1}:",
|
89 |
+
opciones,
|
90 |
+
key=f"pregunta_{i}")
|
91 |
+
respuesta_indice = opciones.index(respuesta)
|
92 |
+
respuestas_usuario.append(respuesta_indice)
|
93 |
+
|
94 |
+
# Mostrar si la respuesta es correcta o incorrecta inmediatamente
|
95 |
+
if respuesta_indice == pregunta.get('respuesta_correcta', 0):
|
96 |
+
st.success("¡Correcto!")
|
97 |
+
else:
|
98 |
+
st.error(f"Incorrecto. La respuesta correcta es: {opciones[pregunta.get('respuesta_correcta', 0)]}")
|
99 |
else:
|
100 |
+
st.warning(f"No hay opciones disponibles para la pregunta {i+1}")
|
101 |
|
102 |
submitted = st.form_submit_button("Enviar respuestas")
|
103 |
|
104 |
# Calcular y mostrar el resultado final
|
105 |
if submitted:
|
106 |
+
correctas = sum(1 for user, pregunta in zip(respuestas_usuario, st.session_state.preguntas)
|
107 |
+
if user == pregunta.get('respuesta_correcta', 0))
|
108 |
st.write(f"Has acertado {correctas} de {len(st.session_state.preguntas)} preguntas.")
|