Loops Condicionales

Introducción

Loops condicionales son la forma de repetir algo mientras se satisfaga cierta condición, o True. Si la condición se satisface siempre (nunca se vuelve False), el loop se vuelve infinito. Si la condición al inicio es falsa, el código del loop nunca se ejecutará! En Python los loops condicionales se definen con la sentencia while:

word = ''
sentence = ''
print('Please enter some words.')
print('Include a period (.) when you are finished.')
while '.' not in word:
    word = input('next word: ')
    sentence = word + ' ' + sentence
print()
print('Aha! You said:')
print(sentence)

Esta parte del código la llamamos el ‘condicional’: '.' not in word

Si el condicional devuelve o no el valor True, determina si el código dentro del loop while se ejecuta.

Lea el código de arriba, y vea si puede resumir en su cabeza que es lo que hará (cual será la salida final).

Luego cópielo a un archivo, digamos sentence.py y ejecútelo - vea exactamente que hace. ¿Es el comportamiento tal como lo imaginó?

Nota

Si está usando Python 2, necesitará reemplazar input```con ``raw_input para ejecutar el programa correctamente.

Prisión Tortuga

Ejercicio

The turtle has been up to its usual tricks again, robbing liquor stores and building up huge gambling debts. It’s time for turtle to be put into a cell that it can’t get out of.

Hagamos una nueva versión de forward(). Una que gire la tortuga a la dirección opuesta si trata de ir a más de 100 desde el origen. Necesitaremos un loop while, y algunas funciones nuevas de turtle:

  • turtle.distance(0,0) - Distancia de la tortuga al origen

  • turtle.towards(0,0) - Ángulo para volver al origen

  • turtle.setheading(angle) - Establecer dirección de la tortuga

Si lo desea, puede intentar jugar con turtle en el intérprete y usar estas funciones para verificar que hacen ellas exactamente.

Ahora necesitará implementar la lógica de la prisión usando estas funciones, quizá con un loop while y un poco de lógica condicional. Es un poco complicado, pero ánimo! No tema consultar con algún profesor u otro estudiante.

Solución

def forward(distance):
    while distance > 0:
        if turtle.distance(0,0) > 100:
            angle = turtle.towards(0,0)
            turtle.setheading(angle)
        turtle.forward(1)
        distance = distance - 1

Dibuje una espiral

Loops pueden ser interrumpidos con una sentencia break. Esto es especialmente útil si escribe un loop infinito, el cual es un loop donde su condicional es siempre True.

Ejercicio

Escriba un loop while con una condición que sea siempre verdadera para dibujar un espiral. Interrumpa el loop cuando la tortuga alcance cierta distancia desde el centro. Use la función turtle.distance(x, y) para obtener la distancia al punto definido por las coordenadas x e y.

Para hacer esto necesitará las funciones turtle.xcord() y turtle.ycord(), las cuales retornan lka posición de la tortuga en los ejes X e Y respectivamente.

Nota

Para dibujar una espiral, la tortuga debe rotar con un valor constante y moverse adelante con un valor que se incremente.

Solución

def draw_spiral(radius):
    original_xcor = turtle.xcor()
    original_ycor = turtle.ycor()
    speed = 1
    while True:
        turtle.forward(speed)
        turtle.left(10)
        speed += 0.1
        if turtle.distance(original_xcor, original_ycor) > radius:
            break

Bonus

Puede hacer un condicional para este loop, tal que no necesite un loop infinito while True```o la sentencia ``break? que versión le parece más fácil de entender?