Preguntas con respuestas alineadas con el texto
Una opción para las preguntas con fichero consiste en componer el fichero completando un texto que se propone al alumno. En este caso al alumno no se le pediría que componga todo el fichero, sino simplemente que complete el texto que se le proporciona, rellenando una serie de huecos en los lugares indicados.
La presentación es similar a las preguntas en línea de respuesta construida, salvo que en este caso la respuesta del alumno no se evalúa simplemente con un patrón, como las demás preguntas de respuesta libre, sino que se compone un fichero que se envía para evaluar mediante un script, al igual que las demás preguntas con ficheros.
Ejemplo 1
El uso mas frecuente es el de completar un cierto código de programación escribiendo las sentencias que faltan:
Esta pregunta no puede resolverse fácilmente mediante la evaluación por patrones, ya que las respuestas pueden ser muy distintas. En este ejemplo serían respuestas válidas, entre otras:
if ndx<3: if 3>ndx: if ndx<=2: if 2>=ndx: if listing[ndx]<111: ...
En general las respuestas pueden ser mas aún mas variadas, pero hay una manera efectiva de comprobar si son correcta, que es componiendo el fichero ejecutándolo mediante el interprete de Python y comparando el resultado con el esperado. Para ello hay que completar el programa contenido en el enunciado con la respuesta dada por el alumno.
En este ejemplo el contenido del campo enunciado es el siguiente:
<div style="display: none;">'''</div>
<p>Completar el siguiente programa para obtener la salida:</p>
<pre> 108
109
110
</pre>
<hr>
<div style="display: none;">'''</div>
<pre>listing = [108,109,110,111,112,113,114]
for ndx in range(7):
___________________________
print(listing[ndx])
else :
break</pre>
Para evaluar esta pregunta habría que realizar las siguientes operaciones:
- Eliminar del enunciado todos los tags HTML
- Sustituir los guiones "______" por "if ndx<3:"
- Guarda un fichero con un nombre preestablecido, por ejemplo “test.py”
- Ejecutar la instrucción “python3 test.py”.
- Comparar la salida con la esperada.
En realidad, las dos últimas operaciones son un caso particular de lo que hacen todas las preguntas de fichero: ejecutar un script, componer una salida y compararla con una pregunta de respuesta libre subyacente. En este caso se ha optado por la solución mas simple, usar la corrección directa, aunque podría evaluarse mediante etiquetas si se prefiere. Nótese que el enunciado contiene una parte previa al código fuente en Python, que da las instrucciones para resolverlo. 1)
Sin embargo, a diferencia de otros casos de preguntas con fichero, cuando se presenta la pregunta al alumno y se obtiene su respuesta, en la corrección no se muestra el resultado de la ejecución del script, sino simplemente la respuesta del alumno anotada mediante los iconos que indica acierto o fallo.
En caso de respuesta incorrecta, el comportamiento por defecto solo mostraría la corrección, pero si se hecha en falta el resultado de la ejecución siempre podria añadirse un refuerzo con el siguiente texto:
La respuesta es incorrecta, este sería el resultado de la ejecución: <pre><code><<respuesta>></code></pre>
Usando la variable de sesión <<respuesta>>, lo que generaría la siguiente presentacion de resultados::
En las preguntas de fichero se usan y se guardan dos tipos de ficheros: 2)
- Los ficheros que contienen la respuesta en crudo del alumno, es decir exactamente lo que el alumno contestó. Estos ficheros tienen nombre fijos "_text1.txt", "_text2.txt", etc. (en caso de que haya varios campos a completar)
- El fichero compuesto obtenido en el paso 3 del proceso. El nombre de este fichero se establece en la pestaña Avanzado de la sección de preguntas.
A estos ficheros se añadirán todos los que hagan falta para evaluar el fichero enviado. Puesto que se dispone también de los ficheros en crudo, no sería necesario componer el fichero completo, si hubiera cualquier otra forma de evaluar la corrección de los componentes
Ejemplo 2
En este otro ejemplo, se propone completar una función en Python mediante un trozo de código. En este caso se desea forzar una implementación mediante acumuladores, que sería dificil de comprobar si la función se implementara libremente. A diferencia del ejemplo anterior, no se espera como respuesta una sola linea, sino varias, por lo que se presenta un área de texto para la respuesta:
PAra forzar el uso de un área de texto, la pregunta debe definir el campo Tamaño de las respuestas en la pestaña Presentacion, indicando el numero de filas y columnas que se presentan inicialmente.
En este caso, cuando se compone el fichero a enviar, se respeta el sangrado de todas las líneas incluidas en el área de texto, de manera la estructura del fichero concuerde con la apariencia de la posición visual del área de texto. Este es un detalle importante en lenguajes como Python, aunque en otros lenguajes pueda ser irrelevante.
Al enviar la respuesta se muestra igualmente la corrección en el área de texto, aunque en este caso se usa un script para evaluar mediante etiquetas que comprobar que realmente se ha usado recursividad en la implementación:
cp ../../../python/check.py . cp ../../../python/checkNodo.py . @File test1.txt fib(9) => 55 fib(10) => 89 fib(11) => 144 @End @Command on python3 check.py test1.txt == ok -> Correcto : Incorrecto @Command off python3 checkNodo.py recursivo fib_acum == ok -> Correcto : NoRec
El resultado de una ejecución incorrecta se muestra así:
En donde se ha usado el mismo artificio que se empleó en el ejemplo anterior para mostrar los mensaje de ejecución en el espacio correspondiente al refuerzo.
Ejemplo 3
Una alternativa al uso de un área de texto es usar varios campos de respuesta de una sola línea (controles tipo Input). Para ello en el enunciado deberán aparecer varias regiones indicadas con "____", de manera que cada una de ellas se sustituirá por un campo de entrada:
A diferencia de las preguntas de respuesta en línea sin ficheros , en este caso la corrección de cada campo de respuesta no es independiente, ya que se construye un único programa, que se corrige entero, por lo que finalmente o ambas líneas son correctas o ambas son incorrectas. No hay limitación especifica del número de campos que pueden usarse.






