Skip to main content

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. Tres fragmentos de código que demuestran sentencias condicionales en Python, cada una con una sentencia if con una condición seguida de la palabra clave Pass. Los dos primeros fragmentos tienen marcas de verificación verdes sobre ellos, lo que indica el uso correcto. El primer fragmento incluye solo una instrucción if, mientras que el segundo incluye una instrucción if y una else con la palabra clave Pass en cada una. El tercer fragmento, marcado con una cruz roja, consiste solo en una instrucción else con pass, que indica un uso incorrecto, ya que una instrucción else debe seguir a una instrucción if.

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 vista de arriba hacia abajo del Dynamic Castle Crasher Playground que muestra que solo algunos de los castillos han sido derribados. El robot VR está en la parte superior derecha del patio de recreo después de su movimiento alrededor del patio de recreo.
  • 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. Una vista de arriba hacia abajo del Dynamic Castle Crasher con la interfaz del patio de recreo. El botón de reinicio en la parte inferior izquierda de la interfaz del patio de recreo está resaltado con un cuadro rojo.
  • 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.Una vista en ángulo del patio de recreo Dynamic Castle Crasher que muestra al robot VR empujando un pedazo de un castillo sobre la línea roja del borde y fuera del borde del patio de recreo.
  • 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.A la izquierda está el fragmento de código actual del proyecto. A la derecha está la vista de arriba hacia abajo del patio de recreo Dynamic Castle Crasher con la interfaz del patio de recreo visible. La medición del sensor de distancia en la interfaz del patio de recreo lee 568 mm y se resalta con un cuadro rojo. Esto muestra que el castillo en el medio del patio de recreo está a 568 milímetros del robot de realidad virtual.

  • 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.A la izquierda está el fragmento de código actual del proyecto. A la derecha está la vista de arriba hacia abajo del patio de recreo Dynamic Castle Crasher con la interfaz del patio de recreo visible. La medición del sensor de distancia en la interfaz del patio de recreo lee 1354 mm y se resalta con un cuadro rojo. Esto muestra que el castillo en la parte superior del patio de recreo está a 1354 milímetros del robot de realidad virtual.

  • 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.This is the project's code snippet surrounded by an orange arrow that begins and ends on the while True: statement at the top of the code snippet. There is a note on the arrow that says Loops continuously, showing that anything nested in the while True loop will repeat forever.

  • 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.

El código del proyecto Python con flechas que apuntan a las instrucciones if y else. La parte superior de las flechas lee Comprobar la condición del sensor de distancia para mostrar la instrucción distance.found_object if que comprueba la condición. Si se detecta el objeto, se ejecutará el comando bajo la instrucción if, pero si no se detecta ningún objeto, se ejecuta el comando bajo la instrucción else.

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

El código del proyecto de la Unidad 7 con una gran flecha naranja que rodea todo el código, comenzando y terminando en la declaración while True. Una nota en la flecha naranja dice Si las declaraciones contenidas en el bucle infinito mientras se comprueban repetidamente. Las flechas verdes dentro de la declaración while True muestran el flujo del proyecto, comenzando con las declaraciones if individuales sobre si se ve un determinado color y el comportamiento que se debe hacer en consecuencia, ya sea para hacer un comportamiento o pasar a la siguiente declaración if hasta el final, donde todo vuelve a repetirse.

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. Un diagrama que muestra una intersección gris en forma de T con tres flechas direccionales: una que apunta hacia la izquierda, otra que apunta hacia arriba y otra que apunta hacia la derecha. En el centro de la intersección hay un robot de realidad virtual. A la derecha del diagrama hay dos declaraciones condicionales en formato de código: si va a la escuela: gire a la izquierda y si va a almacenar: gire a la derecha. Las instrucciones if están escritas en texto negro y azul, con if en azul y las instrucciones direccionales en azul.

 

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.A diagram showing a gray Y-shaped intersection with two directional paths - one leading left and one leading right. In the center of the intersection is the VR Robot. Above the diagram is code showing conditional statements in code format: if going to school: Turn left and else: Turn right. The if and else statements are written in black and blue text, with if and else in blue and the directional instructions in lighter blue.  

Preguntas

Seleccione un enlace a continuación para acceder al cuestionario de la lección.

Google Doc / .docx / .pdf