Условные циклы

Введение

Условные циклы необходимы для повторения каких-либо действий в зависимости от логического значения условия. Если значение условия всегда остаётся положительным, то цикл может быть бесконечным, если оно с самого начала отрицательно, то цикл не будет выполнен. В Python условные циклы создаются с помощью оператора 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)

We call this part of the code the ‘conditional’: '.' not in word

Whether the conditional return True or not determines whether the code inside the while loop runs.

Прочитай расположенный выше код и попробуй разобраться, что он делает (т. е. что будет сделано в результате его работы).

Затем скопируй этот код в файл (например, sentence.py), запусти, и проверь свои догадки.

Примечание

Если ты используешь Python 2, замени input на raw_input для корректной работы программы.

Тюрьма для черепашки

Упражнение

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.

Давайте сделаем новую версию forward(), которая будет поворачивать черепашку, если она слишком далеко (более, чем на 100) отойдёт от начала координатной сетки. . Нам понадобится цикл while и несколько новых функций для черепашки:

  • turtle.distance(0,0) - Расстояние до черепашки от начала координат

  • turtle.towards(0,0) - Градусная мера угла для возвращения к началу координат

  • turtle.setheading(angle) - Ручная установка направления черепашки

You could try playing with a turtle in the interpreter and using these functions to check exactly what they do, if you like.

Now you will need to implement the prison logic using these turtle functions, perhaps a while loop and a bit of conditional logic. It’s a bit of a stretch but keep at it! Don’t be afraid to talk it out with a coach or another student.

Решение

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

Нарисуй спираль

Циклы могут быть прерваны командой break. Она особенно полезна, если ты пишешь бесконечный цикл, т.е. цикл, условие которого всегда истинно.

Упражнение

Напиши while-цикл для рисования спирали, условие которого всегда будет выполняться (т.е. бесконечный цикл), с прекращением выполнения по достижении черепашкой определённого расстояния от центра. Используй функцию turtle.distance(x, y), чтобы получить расстояние от черепашки до заданной точки.

Чтобы сделать это, понадобятся функции turtle.xcor() и turtle.ycor(), которые возвращают координаты (черепашки) X и Y соответственно.

Примечание

Чтобы нарисовать спираль, черепашка должна поворачиваться на неизменяемую величину и двигаться вперёд на постоянно увеличивающееся расстояние

Решение

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

Дополнительно

Can you make a conditional for this loop, so you don’t need the infinite loop while True or the break? Which version do you find easier to understand?