Здравствуйте! Меня зовут Анна Шишкова. Я — приглашенный преподаватель факультета компьютерных наук Высшей школы экономики. Мы начинаем тему "Цикл while", и первая часть — это цикл с условием и цикл while в Python. Cначала мы обсудим, зачем нужны циклы, как работает цикл с условием, разберем пример и посмотрим на реализацию этого примера в Python. Зачем же нужны циклы? Представим себе ситуацию: ребенок должен съесть суп. Как мы можем написать алгоритм того, как он должен это делать, что мы ему говорим? Сравните два варианта. Мы можем последовательно говорить: "Съешь первую, вторую, третью, 150-ю ложку супа". Это странно, неудобно, потому что ложек может быть много, мы устанем говорить. Мы можем сделать гораздо короче, мы можем сказать: "Пока суп не закончится, ешь суп ложкой". Это и есть цикл, потому что пока условие выполняется (суп не закончился), мы будем повторять одну и ту же инструкцию "ешь суп, ешь, ешь, ешь, ешь", но прописывать вручную каждый раз нам это не придется. Этим циклы удобны, они избавляют нас от лишних повторений, мы повторили один раз, а программа нас поймет. Как же работает цикл с условием, именно с точки зрения программы? Вы уже много писали программ, где все инструкции выполнялись одна за другой, последовательно все. Все что написали, все будет выполнено. Недавно вы узнали, что можно делать по-другому, можно говорить: "Если какое-то условие выполнилось, тогда выполняй вот эту инструкцию, а если не выполнилось — не выполняй". Чем же отличается цикл с условием от просто условия? Цикл отличается тем, что мы будем выполнять инструкции не один раз, а до тех пор, пока условие будет выполняться, то есть пока условие выполняется, мы будем повторять инструкции. Это и есть цикл с условием, он помогает нам, позволяет повторять инструкции, пока условие выполняется. Если выполнилось — делаем. Смотрим потом, когда сделали, еще раз проверяем условие. Выполнилось? Снова делаем. Потом опять проверяем условие. Выполнилось? Снова делаем, опять проверяем условие. И когда условие выполняться перестанет по какой-то причине, разберем, почему оно может перестать выполняться, мы перестаем выполнять инструкции, и называется "выходим из цикла". Разберем на примере. Допустим, у нас есть кот Альфред, и мы знаем, что когда кот Альфред мяукает, он хочет есть. Такой у нас котик, почему бы и нет? Как это можно отобразить на блок-схеме? Допустим, к нам подошел кот, мы смотрим: он мяукает или как? Так, мяукает. Если мяукает, мы даем коту сосиску и снова смотрим: а теперь мяукает? Все еще мяукает, опять даем сосиску, потому что знаем, что он мяукает потому, что голоден. То есть, пока кот мяукает, мы будем давать ему сосиску и каждый раз смотреть: а теперь мяукает? Как только он перестанет мяукать, мы выходим из цикла, то есть больше не даем ему сосиски, потому что он не голоден, не мяукает. Давайте посмотрим, как эту ситуацию реализовать в Python. Как цикл while может выглядеть в Python? Мы будем использовать ключевое слово "while", "while" переводится как "пока". While, потом условие цикла, которое мы будем проверять, после условия ставим двоеточие, точно так же, как в условии с if, ставим двоеточие и с новой строки через отступ пишем инструкции. Очень похоже на конструкцию с if, только вместо if теперь ключевое слово while. А в чем отличие, мы уже обсудили. И давайте посмотрим теперь, что делать именно в ситуации с котиком. Мы знаем: пока кот мяукает, даем коту сосиску. А мы хотим написать while, условие, двоеточие, инструкции. Вместо "пока" пишем "while", while кот мяукает, даем коту сосиску. Дальше, что значит "даем коту сосиску"? Давайте просто print сделаем, print, что дали сосиску. Мы будем просто выводить на экран, что мы ему сосиску дали, потому что для объяснения именно этой ситуации нам хватит простого вывода на экран. А вот теперь сложный момент: что значит — кот мяукает? Как мы вообще это можем узнать? Мы вообще должны знать, мяукает он сейчас или нет, то есть узнать это еще до цикла, надо понимать, будет он сейчас мяукать или нет. Мы спрашиваем до цикла: а вообще, кот мяукает? И если окажется, что да, то будем давать ему сосиски. Как это можно сделать? Можно у пользователя спросить: "А мяукает ли кот?" — и сохранить результаты в какую-то переменную, например, переменную "мяу". Итого, у нас есть переменная, значения которой мы можем проверить в условии цикла. Пока у нас переменной не было, нам было нечего проверять в условии цикла, а когда мы спросили: "Мяукает ли кот? " — нам ответили что-то, например, нам сказали: "Да", и мы говорим: "Пока "мяу" — это "да", печатаем", то есть даем коту сосиску. Но мы же должны посмотреть: вот мы ему дали сосиску, а теперь он как, есть хочет или нет? Мы снова должны узнать, мяукает он сейчас или нет. Давайте снова спросим у пользователя: "Мяукает ли кот?" Снова введем через input значение переменной "мяу" и будем его проверять, снова проверяем в цикле. Пока нам пользователь будет вводить "мяу", равное "да", мы будем давать коту сосиску, а когда перестанет, мы уже выйдем из цикла, и сосисок больше котик наш не получит. Чтобы пользователь знал, что именно от него требуется, что нужно ввести, мы добавим вывод этих вопросов для пользователя на экран. Мы спрашиваем: "Кот мяукает сейчас? Напиши нам, дорогой пользователь, да или нет". И тогда пользователь будет знать, что от него требуется и будет смотреть на кота и говорить: "Да, мяукает" — пишет "да" или: "Нет, не мяукает" — пишет "нет". Как только пользователь введет что-то, отличное от "да", мы будем выходить из цикла. Давайте теперь пропишем это все вручную, чтобы посмотреть явно, как это все будет работать, как у нас будут проверяться значения условия в цикле, как будет это условие видеть Python, давайте все это сделаем подробно в блокноте.