Diferencia entre revisiones de «Ejemplo de un VPL Python»

De Documentación Campus Virtual de la UEx
Ir a la navegación Ir a la búsqueda
(Página creada con «== '''Ejemplo de un VPL Python''' == <div style="border-left:#FFA000 7px solid;border-top:#FFA000 1px solid;border-right:#FFA000 2px solid;border-bottom:2px #FFA000 solid;...»)
 
Sin resumen de edición
 
(No se muestran 28 ediciones intermedias del mismo usuario)
Línea 4: Línea 4:


::Vamos a crear un Laboratorio Virtual de Programación Python:  
::Vamos a crear un Laboratorio Virtual de Programación Python:  
::::<h5><span style="font-weight: normal;"><span class="" style="font-size: large;"><span class="" style="font-family: Verdana, Geneva, sans-serif; font-size: medium;">Ejemplo de cómo realizar un laboratorio que evalúa la práctica del alumno con varios casos de uso establecidos que simulan la introducción del parámetro de entrada por el usuario..&nbsp;</span><br></span>
::::<span style="font-weight: normal;"><span class="" style="font-size: large;"><span class="" style="font-family: Verdana, Geneva, sans-serif; font-size: medium;">Ejemplo de cómo realizar un laboratorio que evalúa la práctica del alumno con varios casos de uso establecidos que simulan la introducción del parámetro de entrada por el usuario..&nbsp;</span><br></span>
::::    <span class="" style="font-size: medium; font-family: Verdana, Geneva, sans-serif;">En este caso se evalúa la entrega realizada por un alumno, en la que se debe representar un tablero de ajedrez con las dimensiones que se indique por consola.</span>
::::    <span class="" style="font-size: medium; font-family: Verdana, Geneva, sans-serif;">En este caso se evalúa la entrega realizada por un alumno, en la que se debe representar un tablero de ajedrez con las dimensiones que se indique por consola.</span></span>   
      </span>   
::<span style="font-weight: normal;"><span class="" style="font-size: large;"><span class="" style="font-family: Verdana, Geneva, sans-serif; font-size: small;">'''''Referencia''': http://www.science.smith.edu/dftwiki/index.php/Tutorial_Moodle_VPL_Chessboard_--_Python''..&nbsp;</span><br></span>
</h5>
 
=== '''Configuración''': ===
=== '''Configuración''' ===
::::En un principio, como en la creación de todas las actividades de VPL, estas serían las únicas opciones de configuración del laboratorio: '''Nombre''' y "Descripción del Laboratorio"
::::En un principio, como en la creación de todas las actividades de VPL, estas serían las únicas opciones de configuración del laboratorio: '''Nombre''' y "Descripción del Laboratorio"


<div style="text-align:center;">[[Archivo:Configuracion_VPLPython.PNG|650px]]</div>
<div style="text-align:center;">[[Archivo:Configuracion_VPLPython.PNG|650px]]</div>


=== '''Casos de prueba''': ===
=== '''Casos de prueba''' ===
::Para este laboratorio se han implementado 3 tests de pruebas, y el fichero '''vpl_evaluate.cases''' será:
::Para este laboratorio se han implementado 3 tests de pruebas, y el fichero '''vpl_evaluate.cases''' será:
<div class="editor-indent" style="margin-left: 30px;">
<div class="editor-indent" style="margin-left: 30px;">
     <div class="editor-indent" style="margin-left: 30px;">
     <div class="editor-indent" style="margin-left: 30px;">
         <p><span><span class="" style="font-weight: bold; color: rgb(184, 138, 0);">case = </span><span class="" style="color: rgb(151, 174, 45);"><b>Test 1</b></span></span>
         <p><span class="" style="font-weight: bold; color: rgb(184, 138, 0); font-size: small;">case = </span><span class="" style="color: rgb(151, 174, 45);"><b><span class="" style="font-size: small;">Test 1</span></b>
        </p>
            </span><br><b><span class="" style="color: rgb(191, 144, 249); font-size: small;">input =</span><span class="" style="color: rgb(151, 174, 45); font-size: small;"> 0</span></b><br><b><span class="" style="color: rgb(191, 144, 249); font-size: small;">output = </span><span><span class="" style="color: rgb(151, 174, 45); font-size: small;">"</span></span></b><br><b><span class="" style="color: rgb(151, 174, 45); font-size: small;">"</span></b><br><b><span class="" style="color: rgb(184, 138, 0); font-size: small;">case =</span><span class="" style="font-size: small;"> </span></b>
    </div>
            <span
    <div class="editor-indent" style="margin-left: 30px;">
                class="" style="color: rgb(151, 174, 45);"><b><span class="" style="font-size: small;">Test 2</span></b></span><br><b><span class="" style="color: rgb(191, 144, 249); font-size: small;">input =</span><span class="" style="color: rgb(191, 144, 249); font-size: small;">&nbsp;</span></b><b><span class="" style="color: rgb(151, 174, 45); font-size: small;">1</span></b><br>
        <p><b><span class="" style="color: rgb(191, 144, 249);">input =</span><span class="" style="color: rgb(151, 174, 45);"> 0</span></b></p>
                <span
    </div>
                    class="" style="color: rgb(191, 144, 249);"><b><span class="" style="font-size: small;">output =</span></b><span class="" style="font-size: small;"> </span></span><span class="" style="color: rgb(151, 174, 45); font-size: small;">"###</span><br><span style="color: rgb(151, 174, 45); font-size: small;"
    <div class="editor-indent" style="margin-left: 30px;">
                        class="">###</span><br><span style="color: rgb(151, 174, 45); font-size: small;" class="">###</span><br><span style="color: rgb(151, 174, 45); font-size: small;" class="">"</span><br><b><span class="" style="color: rgb(184, 138, 0); font-size: small;">case =</span><span class="" style="font-size: small;"> </span></b>
        <p><b><span class="" style="color: rgb(191, 144, 249);">output = </span><span><span class="" style="color: rgb(151, 174, 45);">"</span></span></b></p>
                    <span
    </div>
                        class="" style="color: rgb(151, 174, 45);"><b><span class="" style="font-size: small;">Test 3</span></b></span><br><span class="" style="color: rgb(191, 144, 249);"><b><span class="" style="font-size: small;">input = </span></b>
    <div class="editor-indent" style="margin-left: 30px;">
                        </span><b><span class="" style="color: rgb(151, 174, 45); font-size: small;">8</span></b><span class="" style="font-size: small;">&nbsp;</span><br><b><span class="" style="color: rgb(191, 144, 249); font-size: small;">output = </span></b>
        <p><b><span class="" style="color: rgb(151, 174, 45);">"</span></b></p>
                        <span
    </div>
                            class="" style="color: rgb(151, 174, 45); font-size: small;">"###...###...###...###...</span><br><span style="color: rgb(151, 174, 45); font-size: small;" class="">###...###...###...###...</span><br><span style="color: rgb(151, 174, 45); font-size: small;" class="">###...###...###...###...</span><br>
    <div class="editor-indent" style="margin-left: 30px;">
                            <span
        <p>&nbsp;</p>
                                style="color: rgb(151, 174, 45); font-size: small;" class="">...###...###...###...###</span><br><span style="color: rgb(151, 174, 45); font-size: small;" class="">...###...###...###...###</span><br><span style="color: rgb(151, 174, 45); font-size: small;" class="">...###...###...###...###</span><br>
    </div>
                                <span
    <div class="editor-indent" style="margin-left: 30px;">
                                    style="color: rgb(151, 174, 45); font-size: small;" class="">......</span><br></p>
        <p><b><span class="" style="color: rgb(184, 138, 0);">case =</span> </b><span class="" style="color: rgb(151, 174, 45);"><b>Test 2</b></span></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><b><span class="" style="color: rgb(191, 144, 249);">input =</span><span class="" style="color: rgb(191, 144, 249);">&nbsp;</span></b><b><span class="" style="color: rgb(151, 174, 45);">1</span></b></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><span class="" style="color: rgb(191, 144, 249);"><b>output =</b> </span><span class="" style="color: rgb(151, 174, 45);">"###</span></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><span class="" style="color: rgb(151, 174, 45);">###</span></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><span class="" style="color: rgb(151, 174, 45);">###</span></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><span class="" style="color: rgb(151, 174, 45);">"</span></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><b><span class="" style="color: rgb(184, 138, 0);">case =</span> </b><span class="" style="color: rgb(151, 174, 45);"><b>Test 3</b></span></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><span class="" style="color: rgb(191, 144, 249);"><b>input = </b></span><b><span class="" style="color: rgb(151, 174, 45);">8</span></b>&nbsp;</p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><b><span class="" style="color: rgb(191, 144, 249);">output = </span></b><span class="" style="color: rgb(151, 174, 45);">"###...###...###...###...</span></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><span class="" style="color: rgb(151, 174, 45);">###...###...###...###...</span></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><span class="" style="color: rgb(151, 174, 45);">###...###...###...###...</span></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><span class="" style="color: rgb(151, 174, 45);">...###...###...###...###</span></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><span class="" style="color: rgb(151, 174, 45);">...###...###...###...###</span></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><span class="" style="color: rgb(151, 174, 45);">...###...###...###...###</span></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><span class="" style="color: rgb(151, 174, 45);">###...###...###...###...</span></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><span class="" style="color: rgb(151, 174, 45);">###...###...###...###...</span></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><span class="" style="color: rgb(151, 174, 45);">###...###...###...###...</span></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><span class="" style="color: rgb(151, 174, 45);">...###...###...###...###</span></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><span class="" style="color: rgb(151, 174, 45);">...###...###...###...###</span></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><span class="" style="color: rgb(151, 174, 45);">...###...###...###...###</span></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><span class="" style="color: rgb(151, 174, 45);">###...###...###...###...</span></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><span class="" style="color: rgb(151, 174, 45);">###...###...###...###...</span></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><span class="" style="color: rgb(151, 174, 45);">###...###...###...###...</span></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><span class="" style="color: rgb(151, 174, 45);">...###...###...###...###</span></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><span class="" style="color: rgb(151, 174, 45);">...###...###...###...###</span></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><span class="" style="color: rgb(151, 174, 45);">...###...###...###...###</span></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><span class="" style="color: rgb(151, 174, 45);">###...###...###...###...</span></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><span class="" style="color: rgb(151, 174, 45);">###...###...###...###...</span></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><span class="" style="color: rgb(151, 174, 45);">###...###...###...###...</span></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><span class="" style="color: rgb(151, 174, 45);">...###...###...###...###</span></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><span class="" style="color: rgb(151, 174, 45);">...###...###...###...###</span></p>
    </div>
    <div class="editor-indent" style="margin-left: 30px;">
        <p><span class="" style="color: rgb(151, 174, 45);">...###...###...###...###</span></p>
     </div>
     </div>
</div>
</div>
<p style="text-align: center;"><br></p>
<div style="float:center;width:2px;margin:17px 0 0 5px;">[[Imagen:CasosPrueba_VPLPython.PNG|650px]]</div>




<div style="text-align:center;">[[Archivo:CasosPrueba_VPLPython.PNG|650px]]</div>
=== '''Opciones de ejecución''' ===
::En este laboratorio nos interesa que se ejecute un script concreto de Python (PYTHON-3), y lo seleccionamos. Con el fin de que el alumno pueda comprobar su actividad antes de la entrega definitiva, activamos la opcións de '''''Ejecutar''''', y para que la actividad se evalúe automáticamente, activamos la opción '''''Evaluar''''', que le dará una calificación al ejercicio en función de si pasa uno, dos o los tres tests de pruebas implementados en el fichero de ''Casos de prueba'' '''vpl_evaluate.cases''' :
<div style="text-align:center;">[[Archivo:OpEjecucion_VPLPython.PNG|650px]]</div>


=== '''Opciones de ejecución''': ===
::Se detectará la extensión del fichero entregado, así que no seleccionamos ningún '''SCRIPT''' ni para ejecutar ni para depurar, se detectará automáticamente.
:: En nuestro ejemplo, no activamos las opciones de "''Ejecutar''" ni "''Evaluar''", ya que no se van a hacer entregas.
<div style="text-align:center;">[[Archivo:OpEjecucion_VPLOctave.PNG|650px]]</div>


=== '''Ficheros requeridos''': ===
=== '''Ficheros requeridos''' ===
::Nuestro fichero se llama '''funcion.m''', y como hemos visto en la tabla, la extensión ''m'' es la que tienen los ficheros Matlab/Octave, y que VPL autodetectará para ejecutar el script correspondiente.  
::Nuestro fichero se llama '''practica.py''', y como hemos visto en la tabla, la extensión ''py'' es la que tienen los ficheros Python, y para el que nuestro laboratorio ejecutará el script que hemos seleccionado PYTHON-3.  
::En este caso, '''''funcion.m''''' es el único fichero que necesitamos, único fichero requerido.
::En este caso, '''''practica.py''''' es el único fichero que se le requiere al alumno, el fichero con su entrega de la actividad. Aquí es donde el alumno debe escribir el código de la práctica.


::'''funcion.m''':
<div style="text-align:center;">[[Archivo:FichRequeridos_VPLPython.PNG|650px]]</div>
::''%%Ejemplo multiplicación de matrices''
::''%%evaluación automática''
::::''A=[4 8;3 5];''
::::''B=[9,2;1,6];''
::::''%disp(A);''
::::''%disp(B);''
::::''disp(A*B);''


::''%%Representación gráfica función senoidal entre -10 y 10''
=== '''Ajustes avanzados''' ===
::::''x = -10:0.1:10;''
::<h5><span class="" style="color: rgb(255, 102, 51); font-size: medium; font-family: Verdana, Geneva, sans-serif;">'''Ficheros para la ejecución'''</span></h5>
::::''plot (x, sin (x));''
::::''xlabel ("x");''
::::''ylabel ("sin (x)");''
::::''title ("Simple 2-D Plot");''


::::Se establecen los ficheros necesarios para la ejecución, depurado o evaluación de la entrega. Esto incluye ficheros script, programas de prueba y ficheros de datos.
::::En nuestro ejemplo, tenemos dos ficheros para ejecutar la entrega ('''vpl_run.sh''' y '''ejecutaajedrez.py''') y un fichero para la evaluación que es en el que hemos definido los casos de pruebas ('''vpl_evaluate.cases'''):
<div style="text-align:center;">[[Archivo:FichEjecucion_VPLPython1.PNG|600px]] [[Archivo:FichEjecucion_VPLPython2.PNG|600px]]</div>
<br>
<table>
    <caption style="text-align: left;"><span class="" style="color: rgb(51, 102, 255); font-size: x-large;">Ficheros de Ejecución</span></caption>
            <tr>
            <th scope="col">
                <h6><span class="" style="color: rgb(255, 102, 51); font-size: medium; font-family: Verdana, Geneva, sans-serif;">vpl_run.sh</span></h6>
            </th>
            <th scope="col">
                <h6><span class="" style="color: rgb(255, 102, 51); font-size: medium; font-family: Verdana, Geneva, sans-serif;">ejecutaajedrez.py</span></h6>
            </th>
        </tr>
 
        <tr>
            <td>
                <p></p>
                <ol>
                    <li><b><span class="" style="color: rgb(168, 159, 159);">&nbsp;</span></b>
                        <!--[endif]--><b><span class="" style="color: rgb(168, 159, 159);">#! /bin/bash</span></b></li>
                    <li><b><br></b></li>
                    <li><b>&nbsp;</b><b><span class="" style="color: rgb(184, 138, 0);">echo</span> <span class="" style="color: rgb(65, 157, 11);">"#! /bin/bash"</span>&nbsp; <span class="" style="color: rgb(255, 102, 51);">&gt;</span> vpl_execution</b></li>
                    <li><b><span class="" style="color: rgb(184, 138, 0);">echo</span> <span class="" style="color: rgb(65, 157, 11);">"python3.5
ejecutaajedrez.py"</span><span class="" style="color: rgb(255, 102, 51);"> &gt;&gt;</span> vpl_execution</b></li>
                    <li><b>chmod <span class="" style="color: rgb(255, 102, 51);">+</span>x vpl_execution</b></li>
                </ol>
                <p></p>
                <br></td>
            <td>
                <p></p>
                <ol>
                    <li><b><span class="" style="color: rgb(146, 139, 139);">#runChessboard.py</span></b></li>
                    <li><b><span class="" style="color: rgb(184, 138, 0);">import</span> sys</b></li>
                    <li><b>&nbsp;</b></li>
                    <li><b><span class="" style="color: rgb(146, 139, 139);">#--- get
dimension of chessboard</span></b></li>
                    <li><b>N <span class="" style="color: rgb(255, 102, 51);">=</span><span class="" style="color: rgb(255, 204, 51);"> int</span><span class="" style="color: rgb(51, 204, 255);">(</span>
<span class="" style="color: rgb(255, 204, 51);">input</span><span class="" style="color: rgb(51, 204, 255);">(</span> <span class="" style="color: rgb(121, 169, 122);">""</span><span class="" style="color: rgb(51, 204, 255);"> ) )</span></b></li>
                    <li><b>&nbsp;</b></li>
                    <li><b><span class="" style="color: rgb(146, 139, 139);">#--- put N
in a text file that will be used as stdin for chessboard.py </span></b></li>
                    <li><b>file <span class="" style="color: rgb(255, 102, 51);">=</span> <span class="" style="color: rgb(255, 204, 51);">open</span><span class="" style="color: rgb(51, 204, 255);">(</span><span class="" style="color: rgb(121, 169, 122);">
"fakestdin.txt"</span>, <span class="" style="color: rgb(121, 169, 122);">"w" </span><span class="" style="color: rgb(51, 204, 255);">)</span></b></li>
                    <li><b>file.write(
<span class="" style="color: rgb(255, 204, 51);">str</span><span class="" style="color: rgb(51, 204, 255);">(</span>N) <span class="" style="color: rgb(255, 102, 51);">+</span> "<span class="" style="color: rgb(255, 51, 204);">\n</span>" <span class="">)</span></b></li>
                    <li><b>file.close<span class="" style="color: rgb(51, 204, 255);">()</span></b></li>
                    <li><b>&nbsp;</b></li>
                    <li><b><span class="" style="color: rgb(146, 139, 139);">#--- make
stdin read information from the text file</span></b></li>
                    <li><b>sys.stdin <span class="" style="color: rgb(255, 102, 51);">=</span>
<span class="" style="color: rgb(255, 204, 51);">open</span><span class="" style="color: rgb(51, 204, 255);">(</span> <span class="" style="color: rgb(121, 169, 122);">"fakestdin.txt"</span>, <span class="" style="color: rgb(121, 169, 122);">"r"</span> <span class="" style="color: rgb(51, 204, 255);">)</span></b></li>
                    <li><b>&nbsp;</b></li>
                    <li><b><span class="" style="color: rgb(146, 139, 139);">#--- capture
the stdout of the program to test into a file</span></b></li>
                    <li><b>saveStdOut <span class="" style="color: rgb(255, 102, 51);">=</span>
sys.stdout</b></li>
                    <li><b>sys.stdout <span class="" style="color: rgb(255, 102, 51);">=</span>
<span class="" style="color: rgb(255, 204, 51);">open</span><span class="" style="color: rgb(51, 204, 255);">(<span class="" style="color: rgb(121, 169, 122);"> </span></span><span class="" style="color: rgb(121, 169, 122);">"fakestdout.txt"</span>, <span class="" style="color: rgb(121, 169, 122);">"w" </span><span class="" style="color: rgb(51, 204, 255);">)</span></b></li>
                    <li><b>&nbsp;</b></li>
                    <li><b><span class="" style="color: rgb(146, 139, 139);">#--- run the
program to test ---</span></b></li>
                    <li><b><span class="" style="color: rgb(184, 138, 0);">import
</span>practica</b></li>
                    <li><b>&nbsp;</b></li>
                    <li><b><span class="" style="color: rgb(146, 139, 139);">#--- filter
out junk from output of program ---</span></b></li>
                    <li><b>sys.stdout.close<span class="" style="color: rgb(51, 204, 255);">()</span></b></li>
                    <li><b>sys.stdout <span class="" style="color: rgb(255, 102, 51);">=</span>
saveStdOut</b></li>
                    <li><b>file <span class="" style="color: rgb(255, 102, 51);">=</span> <span class="" style="color: rgb(255, 204, 51);">open</span><span class="" style="color: rgb(51, 204, 255);">(</span>
<span class="" style="color: rgb(121, 169, 122);">"fakestdout.txt"</span>, <span class="" style="color: rgb(121, 169, 122);">"r"</span> <span class="" style="color: rgb(51, 204, 255);">)</span></b></li>
                    <li><b>text <span class="" style="color: rgb(255, 102, 51);">=</span>
file.read<span class="" style="color: rgb(51, 204, 255);">()</span></b></li>
                    <li><b>index<span class="" style="color: rgb(255, 102, 51);"> =</span>
text.find<span class="" style="color: rgb(51, 204, 255);">(</span> <span class="" style="color: rgb(121, 169, 122);">"#"</span><span class="" style="color: rgb(51, 204, 255);"> )</span></b></li>
                    <li><b>text <span class="" style="color: rgb(255, 102, 51);">=</span>
text<span class="" style="color: rgb(51, 204, 255);">[</span>index:<span class="" style="color: rgb(51, 204, 255);">]</span></b></li>
                    <li><b>text <span class="" style="color: rgb(255, 102, 51);">=</span>
text.strip<span class="" style="color: rgb(51, 204, 255);">( )</span>.strip<span class="" style="color: rgb(51, 204, 255);">(</span> "<span class="" style="color: rgb(255, 51, 204);">\n</span>" <span class="" style="color: rgb(51, 204, 255);">)</span> <span class="" style="color: rgb(255, 102, 51);">+</span> "<span class="" style="color: rgb(255, 51, 204);">\n</span>"</b></li>
                    <li><b><span class="" style="color: rgb(255, 204, 51);">print</span> <span class="" style="color: rgb(51, 204, 255);">(</span> text
, end<span class="" style="color: rgb(255, 102, 51);">=</span><span class="" style="color: rgb(121, 169, 122);">''</span><span class="" style="color: rgb(51, 204, 255);"> )</span></b></li>
                    <li><b>file.close<span class="" style="color: rgb(51, 204, 255);">()</span></b></li>
                </ol>
                <p></p>
</table>
::<h5><span class="" style="color: rgb(255, 102, 51); font-size: medium; font-family: Verdana, Geneva, sans-serif;">'''Límites máximos de recursos de ejecución'''</span></h5>
:Aquí establecemos los límites máximos para el tiempo de ejecución, la memoria usada, el tamaño de los ficheros generados durante la ejecución y el número de procesos simultáneos. Para nuestro ejemplo, no hemos definido límites:
<div style="text-align:center;">[[Archivo:LimitesPython.PNG|600px]]</div>
::<h5><span class="" style="color: rgb(255, 102, 51); font-size: medium; font-family: Verdana, Geneva, sans-serif;">'''Ficheros a mantener mientras se ejecuta'''</span></h5>
:En esta opción marcamos los ficheros que deben permanecer durante la fase de ejecución:
<div style="text-align:center;">[[Archivo:FichEjecucion_VPLPython.PNG|600px]]</div>
::<h5><span class="" style="color: rgb(255, 102, 51); font-size: medium; font-family: Verdana, Geneva, sans-serif;">'''Variaciones'''</span></h5>
: No se han configurado variaciones para esta actividad.
::<h5><span class="" style="color: rgb(255, 102, 51); font-size: medium; font-family: Verdana, Geneva, sans-serif;">'''Comprobación de servidores de ejecución'''</span></h5>
:En este enlace podemos comprobar el estado de los servidores de ejecución usados por esta actividad.
::<h5><span class="" style="color: rgb(255, 102, 51); font-size: medium; font-family: Verdana, Geneva, sans-serif;">'''Servidores de ejecución locales'''</span></h5>
:No se han suministrado urls de servidores de ejecución locales para esta actividad.


<div style="text-align:center;">[[Archivo:FichRequeridos_VPLOctave.PNG|650px]]</div>
=== '''Probar actividad''' ===
::<h5><span class="" style="color: rgb(255, 102, 51); font-size: medium; font-family: Verdana, Geneva, sans-serif;">'''Ejecutar'''</span></h5>
::Hacemos clic en el comando "'''Ejecutar'''" para probar la actividad y comprobar que pasa los test:


=== '''Ajustes avanzados''': ===
<div style="text-align:center;">[[Archivo:Probar_VPLPython.PNG|600px]] [[Archivo:Probar_VPLPython2.PNG|600px]]</div>
::* '''Ficheros para la ejecución'''
::::Se establecen los ficheros necesarios para la ejecución, depurado o evaluación de la entrega. Esto incluye ficheros script, programas de prueba y ficheros de datos.
::::En nuestro ejemplo, no tenemos fichero para ejecutar la entrega ya que sólo necesitamos los ficheros scripts que ya autodetecta el laboratorio en función de la extensión de nuestra entrega (''funcion.m''), así que sólo tenemos contenido en el fichero de evaluación de casos, con un único test de ejemplo:
<div style="text-align:center;">[[Archivo:FichEjecucion_VPLOctave.PNG|650px]]</div>
<p style="text-align: left;">&nbsp; &nbsp; &nbsp;&nbsp;<span class="" style="font-size: medium; font-family: Verdana, Geneva, sans-serif;"><i>Al tratarse de un ejemplo de ejecución de un VPL, lo hemos configurado <b>sin entregas ni ejecución o evaluación automática</b>, así que el resto de opciones del Laboratorio no necesitamos configurarlas para hacer la prueba:</i></span></p>
::* '''Límites máximos de recursos de ejecución''' (NO NECESITA CONFIGURACIÓN)
::* '''Ficheros a mantener mientras se ejecuta''' (NO NECESITA CONFIGURACIÓN)
::* '''Variaciones''' (NO NECESITA CONFIGURACIÓN)
::* '''Comprobación de servidores de ejecución''' (NO NECESITA CONFIGURACIÓN)
::* '''Servidores de ejecución locales''' (NO NECESITA CONFIGURACIÓN)


=== '''Probar actividad''': ===
<div style="text-align:left;">Volver a la página:
'''[[VPL (Virtual Programming Lab)]]''' 
'''[[Administración de un VPL]]'''</div>

Revisión actual - 10:50 21 dic 2020

Ejemplo de un VPL Python

Vamos a crear un Laboratorio Virtual de Programación Python:
Ejemplo de cómo realizar un laboratorio que evalúa la práctica del alumno con varios casos de uso establecidos que simulan la introducción del parámetro de entrada por el usuario.. 
En este caso se evalúa la entrega realizada por un alumno, en la que se debe representar un tablero de ajedrez con las dimensiones que se indique por consola.
Referencia: http://www.science.smith.edu/dftwiki/index.php/Tutorial_Moodle_VPL_Chessboard_--_Python.. 

Configuración

En un principio, como en la creación de todas las actividades de VPL, estas serían las únicas opciones de configuración del laboratorio: Nombre y "Descripción del Laboratorio"
Configuracion VPLPython.PNG

Casos de prueba

Para este laboratorio se han implementado 3 tests de pruebas, y el fichero vpl_evaluate.cases será:

case = Test 1
input = 0
output = "
"
case = Test 2
input = 1
output = "###
###
###
"
case = Test 3
input = 8 
output = "###...###...###...###...
###...###...###...###...
###...###...###...###...
...###...###...###...###
...###...###...###...###
...###...###...###...###
......

CasosPrueba VPLPython.PNG


Opciones de ejecución

En este laboratorio nos interesa que se ejecute un script concreto de Python (PYTHON-3), y lo seleccionamos. Con el fin de que el alumno pueda comprobar su actividad antes de la entrega definitiva, activamos la opcións de Ejecutar, y para que la actividad se evalúe automáticamente, activamos la opción Evaluar, que le dará una calificación al ejercicio en función de si pasa uno, dos o los tres tests de pruebas implementados en el fichero de Casos de prueba vpl_evaluate.cases :
OpEjecucion VPLPython.PNG


Ficheros requeridos

Nuestro fichero se llama practica.py, y como hemos visto en la tabla, la extensión py es la que tienen los ficheros Python, y para el que nuestro laboratorio ejecutará el script que hemos seleccionado PYTHON-3.
En este caso, practica.py es el único fichero que se le requiere al alumno, el fichero con su entrega de la actividad. Aquí es donde el alumno debe escribir el código de la práctica.
FichRequeridos VPLPython.PNG

Ajustes avanzados

Ficheros para la ejecución
Se establecen los ficheros necesarios para la ejecución, depurado o evaluación de la entrega. Esto incluye ficheros script, programas de prueba y ficheros de datos.
En nuestro ejemplo, tenemos dos ficheros para ejecutar la entrega (vpl_run.sh y ejecutaajedrez.py) y un fichero para la evaluación que es en el que hemos definido los casos de pruebas (vpl_evaluate.cases):
FichEjecucion VPLPython1.PNG FichEjecucion VPLPython2.PNG


Ficheros de Ejecución
vpl_run.sh
ejecutaajedrez.py

  1.   #! /bin/bash

  2.  echo "#! /bin/bash"  > vpl_execution
  3. echo "python3.5 ejecutaajedrez.py" >> vpl_execution
  4. chmod +x vpl_execution


  1. #runChessboard.py
  2. import sys
  3.  
  4. #--- get dimension of chessboard
  5. N = int( input( "" ) )
  6.  
  7. #--- put N in a text file that will be used as stdin for chessboard.py
  8. file = open( "fakestdin.txt", "w" )
  9. file.write( str(N) + "\n" )
  10. file.close()
  11.  
  12. #--- make stdin read information from the text file
  13. sys.stdin = open( "fakestdin.txt", "r" )
  14.  
  15. #--- capture the stdout of the program to test into a file
  16. saveStdOut = sys.stdout
  17. sys.stdout = open( "fakestdout.txt", "w" )
  18.  
  19. #--- run the program to test ---
  20. import practica
  21.  
  22. #--- filter out junk from output of program ---
  23. sys.stdout.close()
  24. sys.stdout = saveStdOut
  25. file = open( "fakestdout.txt", "r" )
  26. text = file.read()
  27. index = text.find( "#" )
  28. text = text[index:]
  29. text = text.strip( ).strip( "\n" ) + "\n"
  30. print ( text , end= )
  31. file.close()

Límites máximos de recursos de ejecución
Aquí establecemos los límites máximos para el tiempo de ejecución, la memoria usada, el tamaño de los ficheros generados durante la ejecución y el número de procesos simultáneos. Para nuestro ejemplo, no hemos definido límites:
LimitesPython.PNG
Ficheros a mantener mientras se ejecuta
En esta opción marcamos los ficheros que deben permanecer durante la fase de ejecución:
FichEjecucion VPLPython.PNG
Variaciones
No se han configurado variaciones para esta actividad.
Comprobación de servidores de ejecución
En este enlace podemos comprobar el estado de los servidores de ejecución usados por esta actividad.
Servidores de ejecución locales
No se han suministrado urls de servidores de ejecución locales para esta actividad.

Probar actividad

Ejecutar
Hacemos clic en el comando "Ejecutar" para probar la actividad y comprobar que pasa los test:
Probar VPLPython.PNG Probar VPLPython2.PNG