Step 2 (S-14659)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/3364/step/2

На прошлом уроке мы с вами познакомились тем, как можно на Python писать небольшие программы. Мы попробовали писать программы, которые выполняют арифметические вычисления, совершают ввод-вывод данных и содержат условные конструкции. Уже неплохо, однако этого мало.

Давайте вспомним задачу, в которой нам надо было найти наилучшую попытку студента за тест. В той задаче нам надо было фактически найти максимум двух чисел. Представим себе, что сейчас у студента есть не две попытки, а сто попыток. В таком случае, если мы попробовали бы написать аналогичное решение, нам понадобилось бы сделать порядка ста условных конструкций, что само по себе уже достаточно утомительно. А если представить себе что у нас не один студент, а тысяча, то тогда количество условных конструкций возрастет до ста тысяч. Человеку писать это достаточно утомительно. Вместе с тем, для компьютера выполнить сто тысяч элементарных операций не составляет никакого труда. Любой современный компьютер такое количество операций выполняет за доли секунды. И для таких задач, где надо выполнять повторяющиеся действия, люди придумали циклы.

В языке Python есть несколько видов циклов. Давайте познакомимся с первым из них - это цикл while. Цикл while выглядит следующим образом:

S-14659-1.png

While - это цикл с предусловием. Цикл while содержит сначала ключевое слово while, затем некое условие, которое будет проверяться каждый раз перед тем, как цикл запускается. Внутри цикл содержит некие действия которые выполняются в цикле. Эти действия, в данном случае это две операции, вместе называются итерацией цикла. Таким образом цикл повторяет итерации.

В данном случае итерация состоит из двух команд: вывод числа и уменьшение числа на единице. Теперь посмотрим, как это все это работает. В этом примере мы хотим вывести все целые числа от 5 до 1, то есть - 5 4 3 2 1. Для этого мы завели переменную а и записали в нее значение 5. Далее в цикле мы будем выводить число а и уменьшать его на единицу. Будем делать это до тех пор, пока а больше 0. Таким образом, мы написали здесь условие: продолжать цикл до тех пор пока а больше 0. У нас есть переменная а в которой записано сейчас значение 5.

Как происходит работа цикла? Вначале осуществляется проверка, что условие верно. а равно 5, 5 больше 0, так как условие верно, переходим к операциям внутри цикла. Выполняем первую операцию print(a). Выводится пятерка после которой ставится пробел. Мы используем параметр end, в котором передаем значение символ пробела, для того чтобы значения, которые мы выводим, были разделены не переводами строк, а пробелами. Таким образом, результат вывода всех значений будет находиться в одной строке. После вывода числа мы уменьшаем значения а на единицу. а становится равным 4. Первая итерация цикла закончилась. После этого происходит возврат к проверке условия. Проверяется - верно ли, что условие все еще истинно. В данном случае а равно 4 и 4 больше чем 0, то есть условие верно. Вновь выполнятся обе команды - выведется значение а (текущее значение, которое сейчас равно 4) и значение а уменьшится на единицу и станет равно 3. Дальше снова переходим к проверке условия. Так будет продолжаться, пока после очередной итерации а не станет равной 0 и после перехода на проверку выяснится, что наше условие стало ложным. На этом цикл прекратится и интерпретатор перейдет к командам, которые следуют после цикла. В нашем случае их нет и программа просто завершится. Результатом работы программы будет напечатанная строка - 5 4 3 2 1.

Все операции, используемые внутри цикла, мы записываем с использованием отступа. В общем случае цикл while выглядит следующим образом:

S-14659-2.png

У нас есть ключевое слово while, далее стоит логическое условие, которое проверяется перед каждой очередной итерацией. Итерация выполняется только в том случае, если логическое выражение истинно. Внутри цикла может быть произвольное количество действий. Эти действия могут содержать условные конструкции, дополнительные циклы.

Как правило, логическое условие содержит какие-либо переменные. И эти переменные меняются внутри цикла. В противном случае, условие будет постоянным, и цикл не сделает ни одной итерации, если оно будет ложно. Или будет выполняться бесконечно, если условие истинно. Как правило, мы этого не хотим, поэтому в большинстве случаев в условиях, явно или не явно, фигурируют переменные, которые меняют свое значение внутри цикла.