Lección 2: Construir y probar el proyecto
Continuar construyendo el proyecto
-
Ahora es necesario establecer la condición de la declaración if else . Para utilizar el sensor de distancia para detectar castillos, se puede utilizar el comando found_object . Agregue el comando found_object a la condición. Tu proyecto ahora debería verse así:
def main(): # ¿El sensor de distancia detecta un castillo? if front_distance.found_object(): # Castillo estrellado detectado por un pase del sensor de distancia else: # Gira para encontrar un castillo usando el pase del sensor de distancia -
Si el sensor de distancia encuentra un objeto, el robot VR debe avanzar para derribar el castillo. Agregue un comando drive en la rama 'if' de la declaración if else y configure el parámetro para impulsar el robot VR hacia adelante. (Este comando debe reemplazar el 'aprobado').
def main(): # ¿El sensor de distancia detecta un castillo? if front_distance.found_object(): # Castillo de choque detectado por un tren de transmisión del sensor de distancia.drive (FORWARD) else: # Gira para encontrar un castillo usando el pase del sensor de distancia -
Cuando el found_object informa Falso, se ejecutará la rama 'else' , por lo que el Robot VR deberá girar para encontrar un castillo en el Patio de Juegos. Agregue un comando turn dentro de la rama 'else' y configure los parámetros para girar el robot VR hacia la derecha.
def main(): # ¿El sensor de distancia detecta un castillo? if front_distance.found_object(): # Castillo de choque detectado por un sensor de distancia drivetrain.drive (ADELANTE) else: # Gira para encontrar un castillo usando el sensor de distancia drivetrain.turn(DERECHA)
Para su información
La rama 'else' de la instrucción if else solo funciona en un proyecto como parte de una instrucción if else. Si bien puede tener una declaración if independiente, no existe una declaración 'else' en VEXcode VR Python. La rama 'else' se ejecuta cuando no se cumple la condición de la rama 'if'. Sin una condición definida (la rama 'if'), la rama 'else' nunca se ejecutaría. 
Añadir un bucle y probar el proyecto
- Antes de probar el proyecto, es necesario añadir un comando más. Si no, las instrucciones solo verificarán la condición una vez antes de pasar al siguiente comando fuera de la instrucción. En la Unidad 7, se agregó un bucle infinito mientras que al proyecto para indicarle al robot VR que verifique repetidamente el estado del sensor de ojo hacia abajo. Para garantizar que la condición del Sensor de distancia se verifique repetidamente , arrastre o escriba un bucle infinito while , luego copie la declaración if else dentro del bucle infinito while. Tu proyecto ahora debería verse así:
-
Recuerde tener en cuenta la sangría al copiar y pegar comandos en un bucle, para que el proyecto funcione según lo previsto cuando se ejecute.
def main(): while True: # ¿El sensor de distancia detecta un castillo? if front_distance.found_object(): # Crash castle detected by a Distance Sensor drivetrain.drive(FORWARD) else: # Gira para encontrar un castillo usando el Distance Sensor drivetrain.turn(RIGHT) wait(5, MSEC)
-
- Abra la ventana del patio de recreo si aún no está abierta. Asegúrese de que Dynamic Castle Crasher Playground se abra y ejecute el proyecto.

- Una vez que el robot VR haya derribado al menos dos castillos, recargue el patio de recreo y ejecute el proyecto en otro diseño del Dynamic Castle Crasher Playground.

- En cada ejecución del proyecto, el robot VR girará hasta que el sensor de distancia detecte un castillo y luego se dirigirá hacia ese edificio para derribarlo.

- Durante la ejecución del proyecto, el robot de realidad virtual puede empujar una pieza del castillo hasta el borde y caerse del patio de recreo. Esto se debe a que el comando found_object sigue informando de que hay un objeto delante del robot VR. Cuando este comando indica Verdadero, el Robot VR avanza, lo que hace que el Robot VR se caiga del patio de recreo.
Flujo de proyecto con una declaración If Else
La instrucción if else se utiliza para que el robot de realidad virtual pueda tomar una decisión. Si la condición booleana es verdadera, se ejecutarán los comandos dentro de la rama 'si'. Si la condición booleana es False, se ejecutarán los comandos dentro de la rama 'else'.
Por ejemplo, en esta iteración del Dynamic Castle Crasher Playground , se inicia el proyecto, el sensor de distancia detecta un objeto: la condición del comando found_object informa Verdadero. Ahora, la rama 'if' del proyecto se ejecutará y el robot VR avanzará. El robot VR se saltará la rama 'else' del proyecto.
- Tenga en cuenta que los datos del sensor de distancia también se informan en el panel de control. Cuando se detecta un objeto, se mostrará el valor de la distancia.
Sin embargo, en esta iteración del Dynamic Castle Crasher Playground, cuando se inicia el proyecto, el sensor de distancia NO detecta un objeto: la condición del comando found_object informa Falso. Ahora el robot VR omitirá la rama 'if' del proyecto, y se ejecutará la rama 'else' del proyecto, por lo que el robot VR girará a la derecha.
- Observe que el valor del sensor de distancia en el panel de control se informa como > 3000 mm. El sensor de distancia puede detectar objetos dentro de un rango de 3000 milímetros (mm), por lo que cuando no se detecta un objeto, el valor se informa como mayor que (>) 3000 mm.
Debido a que la declaración if else está dentro de un bucle infinito while , el proyecto vuelve al inicio del bucle infinito while para verificar la condición de la declaración if else repetidamente. Este bucle continuará para siempre, instruyendo al Robot VR a verificar continuamente la condición if else cientos de veces por segundo.
- Tenga en cuenta que los comandos drive y turn dentro de la declaración if else son comandos que no esperan. Los comandos que no están en espera no detienen el flujo de un proyecto mientras se están ejecutando. Un comportamiento de no espera que se ejecuta en una instrucción if else (como "avanzar si se detecta un objeto") continuará mientras se comprueba la condición y solo cambiará cuando cambie la condición.
Para su información
Se utiliza una instrucción if else para garantizar que solo se ejecute una rama en el proyecto cuando se comprueba la condición. Solo una instancia o condición puede ser verdadera en cualquier momento. Esto hace que el proyecto sea más eficiente.

Compare el proyecto actual con el proyecto creado en la Unidad 7. El proyecto de la Unidad 7 utiliza cuatro declaraciones if .

Al ejecutar un proyecto con múltiples declaraciones if , podría ser posible que múltiples condiciones informen Verdadero (o Falso) a medida que el proyecto ejecuta los comandos en el bucle infinito while Conflictos como este podrían provocar que el proyecto deje de ejecutarse o se ejecute más lentamente.
En otras palabras, tener múltiples declaraciones si en un proyecto es como viajar por una carretera con múltiples rampas de salida. Dependiendo de a dónde intentes ir, girarías en diferentes lugares. Por ejemplo, si fueras a la escuela, girarías a la izquierda; si fueras a la tienda, girarías a la derecha. Pero, ¿y si no fueras a la escuela o a la tienda? Ambas condiciones informarían como Falso, y usted se mantendría en el camino recto. ¿O qué pasaría si fueras tanto a la escuela como a la tienda? Ambas condiciones indicarían Verdadero, pero no puede girar en dos ubicaciones al mismo tiempo. 
Para continuar con la analogía, una declaración if else es como viajar a una bifurcación en el camino: te obliga a tomar una decisión. Si vas a la escuela, gira a la izquierda; de lo contrario, gira a la derecha. No importa a dónde vaya, gire a la izquierda o a la derecha. Usar una sentencia if else evitaría errores como los anteriores, porque te obligaría a tomar una decisión, ya que solo una condición puede ser verdadera en un momento dado.
Preguntas
Seleccione un enlace a continuación para acceder al cuestionario de la lección.
Google Doc / .docx / .pdf