Opreadores Lógicos

Introducción

Los condicionales son una muy buena forma de tomar decisiones preguntando si algo es igual a True o no. Pero a menudo una condición no es suficiente. Podríamos querer tomar lo opuesto a nuestro resultado. O por ejemplo si queremos tomar una decisión sobre turtle.xcor() y turtle.ycor() debemos combinarlos. Esto puede realizarse con operadores lógicos.

Negación de una sentencia

Si queremos que algo sea False podemos usar not. Es un operador lógico:

x = False
if not x :
    print("condition met")
else:
    print("condition not met")

Ejercicio

El programa turtle nos da una función muy útil para saber si se está dibujando o no: turtle.isdown(). Esta función retorna True si la tortuga está dibujando. Como hemos visto anteriormente, la función turtle.penup() y turtle.pendown() conmuta entre dibujar mientras se está moviendo, o solo moverse sin dejar trazo.

Podemos escribir una función que permita ir adelante solamente si el lápiz está levantado?

Solución

def stealthed_forward(distance):
    if not turtle.isdown():
        turtle.forward(distance)

Esto, aquello u otra cosa

Dos operadores fáciles de entender son and y or. Ellos hacen exactamente lo que dicen sus nombres::

if 1 < 2 and 4 > 2:
    print("condition met")

if 1 > 2 and 4 < 10:
    print("condition not met")

if 4 < 10 or 1 < 2:
    print("condition met")

No está restringido a un operador lógico. Puede combinar tantos como quiera.

Ejercicio

Antes pusimos a la tortuga en una prisión circular. Ahora hagamos la prisión cuadrada. Si la tortuga intenta ir a más de 100 en el eje X or en el eje Y, entonces retornemos a la tortuga de vuelta al centro.

Solución

def forward(distance):
    while distance > 0:
        if (turtle.xcor() > 100
            or turtle.xcor() < -100
            or turtle.ycor() > 100
            or turtle.ycor() < -100):
            turtle.setheading(turtle.towards(0,0))
        turtle.forward(1)
        distance = distance - 1