{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Команды if" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Программисту часто приходится проверять наборы условий и принимать решения в зависимости от этих условий. Команда if в языке Python позволяет проверить текущее состояние программы и выбрать дальнейшие действия взависимости от результатов проверки." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Простой пример" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Следующий короткий пример показывает, как правильно организовать обработку специальных ситуаций с использованием if. Допустим, у вас имеется список машин, и вы хотите вывести название каждой машины. Названия большинства машин должны записываться с капитализацией (первая буква вверхнем регистре,остальные внижнем). С другой стороны, значение'bmw'должно записываться в верхнем регистре. Следующий код перебирает список названий машин и ищет в нем значение'bmw'. Для всех элементов, содержащих значение'bmw', значение выводится вверхнем регистре:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Audi\n", "BMW\n", "Subaru\n", "Toyota\n" ] } ], "source": [ "cars = ['audi', 'bmw', 'subaru', 'toyota']\n", "for car in cars:\n", " if car == 'bmw':print(car.upper())\n", " else:print(car.title())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Проверка условий" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "В каждой команде if центральное место занимает выражение, результатом которого является логическая истина (True) или логическая ложь (False); это выражение называется условием. Взависимости от результата проверки Python решает, должен ли выполняться код в команде if. Если результат условия равен True, то Python выполняет код, следующий за командой if." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Проверка равенства" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Во многих условиях текущее значение переменной сравнивается с конкретным значением, интересующим вас. Простейшее условие проверяет, равно ли значение переменной конкретной величине:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "car = 'bmw'\n", "car == 'bmw'" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "car = 'audi'\n", "car == 'bmw'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Проверка равенства без учета регистра" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "В языке Python проверка равенства выполняется с учетом регистра. Например, два значения с разным регистром символов равными не считаются:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "car = 'Audi'\n", "car == 'audi' " ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "car = 'Audi'\n", "car.lower() == 'audi'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Веб-сайты устанавливают определенные правила для данных, вводимых пользователями подобным образом. Например, сайт может использовать проверку условия,чтобы убедиться в том, что имя каждого пользователя уникально (а не совпадает с именем другого пользователя, отличаясь от него только регистром символов). Когда кто-то указывает новое имя пользователя, это имя преобразуется к нижнему регистру и сравнивается с версиями всех существующих имен в нижнем регистре. Во время такой проверки имя'John'будет отклонено, если в системе уже используется любая разновидность'john'." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Проверка неравенства" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Если вы хотите проверить, что два значения различны, используйте комбинацию из восклицательного знака и знака равенства **(!=)**. Восклицательный знак представляет отрицание, как и во многих языках программирования. Для знакомства с оператором неравенства мы воспользуемся другой командой if. В переменной хранится заказанное дополнение к пицце; если клиент не заказал анчоусы (anchovies), программа выводит сообщение:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hold the anchovies!\n" ] } ], "source": [ "requested_topping = 'mushrooms'\n", "if requested_topping != 'anchovies':print(\"Hold the anchovies!\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Сравнения чисел" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Проверка числовых значений достаточно прямолинейна. Например, следующий код проверяет, что переменная age равна 18:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "age = \"18\"\n", "age == 18" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Также можно проверить условие неравенства двух чисел. Например, следующий код выводит сообщение, если значение переменной answer отлично от ожидаемого:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "That is not the correct answer. Please try again!\n" ] } ], "source": [ "answer = 17\n", "if answer != 42:print(\"That is not the correct answer. Please try again!\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "В условные команды также можно включать всевозможные математические сравнения: меньше, меньше или равно, больше, больше или равно:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "age = 19" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "age < 21" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "age <= 21" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "age > 21" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "age >= 21" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Проверка нескольких условий" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Иногда требуется проверить несколько условий одновременно. Например, в некоторых случаях для выполнения действия бывает нужно, чтобы истинными были сразу два условия; вдругих случаях достаточно, чтобы истинным было хотя бы одно из двух условий. Ключевые слова **and** и **or** помогут вам в подобных ситуациях." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Использование and для проверки нескольких условий" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Чтобы проверить, что два условия истинны одновременно, объедините их ключевым словом *and*; если оба условия истинны, то и все выражение тоже истинно. Если хотя бы одно (или оба) условия ложны, то и результат всего выражения равен False." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "age_0 = 22\n", "age_1 = 18\n", "age_2 = 19\n", "age_0 >= 21 and age_1 <= 21 and age_2 <= 21" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "age_1 = 22\n", "age_0 >= 21 and age_1 >= 21" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Использование or для проверки нескольких условий" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ключевое слово *or* тоже позволяет проверить несколько условий, но результат общей проверки является истинным в том случае, когда истинно хотя бы одно или оба условия. Ложный результат достигается только в том случае, если оба отдельных условия ложны." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "age_0 = 22\n", "age_1 = 18\n", "age_0 >= 21 or age_1 >= 21" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "age_0 = 18\n", "age_0 >= 21 or age_1 >= 21" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Проверка вхождения значений в список" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Иногда бывает важно проверить, содержит ли список некоторое значение, прежде чем выполнять действие. Например, перед завершением регистрации нового пользователя на сайте можно проверить, существует ли его имя в списке имен действующих пользователей, или в картографическом проекте определить, входит ли передаваемое место в список известных мест на карте. Чтобы узнать, присутствует ли заданное значение в списке, воспользуйтесь ключевым словом *in*. Допустим, вы пишете программу для пиццерии. Вы создали список дополнений к пицце, заказанных клиентом, и хотите проверить, входят ли некоторые дополнения в этот список." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "requested_toppings = ['mushrooms', 'onions', 'pineapple']\n", "'mushrooms' in requested_toppings" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "'pepperoni' in requested_toppings" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Проверка отсутствия значения в списке" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "В других случаях программа должна убедиться в том, что значение *не входит* в список. Для этого используется ключевое слово not. Для примера рассмотримсписок пользователей, которым запрещено писать комментарии на форуме. Преждечем разрешить пользователю отправку комментария, можно проверить, не был ли пользователь включен в «черный список»:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Marie, you can post a response if you wish.\n" ] } ], "source": [ "banned_users = ['andrew', 'carolina', 'david']\n", "user = 'marie'\n", "if user not in banned_users:\n", " print(user.title() + \", you can post a response if you wish.\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Логические выражения" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "В процессе изучения программирования вы рано или поздно услышите термин «логическое выражение». По сути это всего лишь другое название для проверки условия. Результат логического выражения равен True или False, как и результат условного выражения после его вычисления.Логические выражения часто используются для проверки некоторых условий — например, запущена ли компьютерная игра или разрешено ли пользователю редактирование некоторой информации на сайте:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Команды if" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Когда вы поймете, как работают проверки условий, можно переходить к написанию команд if. Существуют несколько разновидностей команд if, и выбор варианта зависит от количества проверяемых условий. Примеры команд if уже встречались вам при обсуждении проверки условий, но сейчас эта тема будет рассмотрена более подробно." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Простые команды if" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Простейшая форма команды if состоит из одного условия иодного действия: \n", "\n", " if условие: \n", " \n", " действие\n", " \n", " \n", "В первой строке размещается условие, а в блоке с отступом — практически любое действие. Если условие истинно, то Python выполняет код в блоке после команды if, а если ложно, этот код игнорируется. Допустим, имеется переменная, представляющая возраст человека. Следующий код проверяет, что этот возраст достаточен для голосования:" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "You are old enough to vote!\n" ] } ], "source": [ "age = 19\n", "if age >= 18 and :\n", " print(\"You are old enough to vote!\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Отступы в командах if играют ту же роль, что и в циклах for. Если условие истинно, то все строки с отступом после команды if выполняются, а если ложно — весь блок с отступом игнорируется.\n", "Блок команды if может содержать сколько угодно строк. Добавим еще одну строку для вывода дополнительного сообщения в том случае, если возраст достаточен для голосования:" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "You are old enough to vote!\n", "Have you registered to vote yet?\n" ] } ], "source": [ "age = 19 \n", "if age >= 18:\n", " print(\"You are old enough to vote!\")\n", " print(\"Have you registered to vote yet?\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Команды if-else" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Часто в программе необходимо выполнить одно действие в том случае, если условие истинно, и другое действие, если оно ложно. С синтаксисом *if-else* это возможно. Блок if-else в целом похож накоманду if, но секция else определяет действие или набор действий, выполняемых при неудачной проверке." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "You are old enough to vote!\n", "Have you registered to vote yet?\n" ] } ], "source": [ "age = 19\n", "if age >= 18:\n", " print(\"You are old enough to vote!\")\n", " print(\"Have you registered to vote yet?\")\n", "else:\n", " print(\"Sorry, you are too young to vote.\")\n", " print(\"Please register to vote as soon as you turn 18!\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Цепочки if-elif-else" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Нередко в программе требуется проверять более двух возможных ситуаций; для таких ситуаций в Python предусмотрен синтаксис if-elif-else. Python выполняет только один блок в цепочке if-elif-else. Все условия проверяются по порядкудо тех пор, пока одно из них не даст истинный результат. Далее выполняется код, следующий за этим условием, а все остальные проверки Python пропускает.Во многих реальных ситуациях существуют более двух возможных результатов. Представьте себе парк аттракционов, который взимает разную плату за вход для разных возрастных групп:\n", " * Для посетителей младше 4 лет вход бесплатный. \n", " * Для посетителей от 4 до 5 лет билет стоит 5. \n", " 6-10\n", " 10-17\n", " * Для посетителей от 18 лет истарше билет стоит 10.\n", "Как использовать команду if для определения платы за вход? \n", "Следующий кодопределяет, ккакой возрастной категории относится посетитель, ивыводит со-общение со стоимостью билета:" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Your admission cost is $5.\n" ] } ], "source": [ "age = 12\n", "if age < 4:\n", " print(\"Your admission cost is $0.\")\n", "elif age < 18:\n", " print(\"Your admission cost is $5.\")\n", "elif\n", "elif\n", "else:\n", " print(\"Your admission cost is $10.\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Серии блоков elif" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Код может содержать сколько угодно блоковel if. Например, если парк аттракционов введет особую скидку для пожилых посетителей, вы можете добавить в свой код еще одну проверку для определения того, распространяется ли скидка на текущего посетителя. Допустим, посетители свозрастом 65 и выше платят половинуот обычной цены билета, или $5:" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Your admission cost is $5.\n" ] } ], "source": [ "age = 12\n", "if age < 4:\n", " price = 0 \n", "elif age < 18:\n", " price = 5\n", "elif age < 65:\n", " price = 10\n", "else:\n", " price = 5\n", "print(\"Your admission cost is $\" + str(price) + \".\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Отсутствие блока else" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Python не требует, чтобы цепочка if-elif непременно завершалась блоком else. Иногда блок else удобен; в других случаях бывает нагляднее использовать дополнительную секцию elif для обработки конкретного условия:" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Your admission cost is $5.\n" ] } ], "source": [ "age = 12\n", "if age < 4:\n", " price = 0\n", "elif age < 18:\n", " price = 5\n", "elif age < 65:\n", " price = 10\n", "elif age >= 65:\n", " price = 5\n", "print(\"Your admission cost is $\" + str(price) + \".\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Проверка нескольких условий" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Цепочки if-elif-else эффективны, но они подходят только в том случае, если истинным должно быть только одно условие. Как только Python находит выполняющееся условие, все остальные проверки пропускаются. Такое поведение достаточно эффективно, потому что оно позволяет проверить одно конкретное условие. Однако иногда бывает важно проверить все условия, представляющие интерес. В таких случаях следует применять серии простых команд if без блоков elif или else. Такое решение уместно, когда истинными могут быть сразу несколько условий и вы хотите отреагировать на все истинные условия. Вернемся к примеру спиццей. Если кто-то закажет пиццу с двумя дополнениями,программа должна обработать оба дополнения:" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Adding mushrooms.\n", "Adding extra cheese.\n", "\n", "Finished making your pizza!\n" ] } ], "source": [ "requested_toppings = ['mushrooms', 'extra cheese']\n", "if 'mushrooms' in requested_toppings:\n", " print(\"Adding mushrooms.\")\n", "if 'pepperoni' in requested_toppings:\n", " print(\"Adding pepperoni.\")\n", "if 'extra cheese' in requested_toppings:\n", " print(\"Adding extra cheese.\")\n", "print(\"\\nFinished making your pizza!\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Если бы в программе использовался блок if-elif-else, код работал бы неправильно, потому что он прерывал работу после обнаружения первого истинного условия. Вот как это выглядело бы:" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Adding mushrooms.\n", "\n", "Finished making your pizza!\n" ] } ], "source": [ "requested_toppings = ['mushrooms', 'extra cheese']\n", "if 'mushrooms' in requested_toppings:\n", " print(\"Adding mushrooms.\")\n", "elif 'pepperoni' in requested_toppings:\n", " print(\"Adding pepperoni.\")\n", "elif 'extra cheese' in requested_toppings:\n", " print(\"Adding extra cheese.\")\n", "print(\"\\nFinished making your pizza!\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Итак, если вы хотите, чтобы в программе выполнялся только один блок кода,— используйте цепочку if-elif-else. Если же выполняться должны несколько блоков, используйте серию независимых команд if." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Использование команд if со списками" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Объединение команд if со списками открывает ряд интересных возможностей. Например, вы можете отслеживать специальные значения, для которых необходима особая обработка по сравнению с другими значениями в списке, или эффективно управлять изменяющимися условиями — например, наличием некоторых блюд в ресторане. Также объединение команд if со списками помогает продемонстрировать, что ваш код корректно работает во всех возможных ситуациях." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Проверка специальных значений" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Вернемся к примеру с пиццерией. Программа выводит сообщение каждый раз, когда пицца снабжается дополнением в процессе приготовления. Код этого действия можно записать чрезвычайно эффективно: нужно создать список дополнений, заказанных клиентом, и использовать цикл для перебора всех заказанных дополнений:" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Adding mushrooms.\n", "Adding green peppers.\n", "Adding extra cheese.\n", "\n", "Finished making your pizza!\n" ] } ], "source": [ "requested_toppings = ['mushrooms', 'green peppers', 'extra cheese']\n", "for requested_topping in requested_toppings:\n", " print(\"Adding \" + requested_topping + \".\")\n", "print(\"\\nFinished making your pizza!\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "А если в пиццерии вдруг кончится зеленый перец? Команда if в цикле for может правильно обработать эту ситуацию:" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Adding mushrooms.\n", "Sorry, we are out of green peppers right now.\n", "Adding extra cheese.\n", "\n", "Finished making your pizza!\n" ] } ], "source": [ "requested_toppings = ['mushrooms', 'green peppers', 'extra cheese']\n", "for requested_topping in requested_toppings:\n", " if requested_topping == 'green peppers':\n", " print(\"Sorry, we are out of green peppers right now.\")\n", " else: \n", " print(\"Adding \" + requested_topping + \".\")\n", "print(\"\\nFinished making your pizza!\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Проверка наличия элементов всписке" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Для всех списков, с которыми мы работали до сих пор, действовало одно простое предположение: мы считали, что в каждом списке есть хотя бы один элемент. Скоро мы предоставим пользователю возможность вводить информацию, хранящуюся в списке, поэтому мы уже не можем предполагать, что при каждом выполнении цикла в списке есть хотя бы один элемент. В такой ситуации перед выполнением цикла for будет полезно проверить, есть ли в списке хотя бы один элемент. Проверим, есть ли элементы в списке заказанных дополнений, перед изготовлением пиццы. Если список пуст, программа предлагает пользователю подтвердить, что он хочет базовую пиццу без дополнений. Если список не пуст, пицца готовится также, как в предыдущих примерах:" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Are you sure you want a plain pizza?\n" ] } ], "source": [ "requested_toppings = []\n", "for requested_topping in requested_toppings:\n", " print(\"Adding \" + requested_topping + \".\")\n", " print(\"\\nFinished making your pizza!\")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Множественные списки" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Посетители способны заказать что угодно, особенно когда речь заходит о дополнениях к пицце. Что если клиент захочет положить на пиццу картофель фри? Спискии команды if позволят вам убедиться в том, что входные данные имеют смысл,\n", "прежде чем обрабатывать их. Давайте проверим наличие нестандартных дополнений перед тем, как готовить пиццу. В следующем примере определяются два списка. Первый список содержит перечень доступных дополнений, а второй — список дополнений, заказанных клиентом. На этот раз каждый элемент из requested_toppings проверяется по списку доступных дополнений перед добавлением в пиццу:" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Adding mushrooms.\n", "Sorry, we don't have french fries.\n", "Adding extra cheese.\n", "\n", "Finished making your pizza!\n" ] } ], "source": [ "available_toppings = ['mushrooms', 'olives', 'green peppers','pepperoni', 'pineapple', 'extra cheese']\n", "requested_toppings = ['mushrooms', 'french fries', 'extra cheese']\n", "for requested_topping in requested_toppings:\n", " if requested_topping in available_toppings:\n", " print(\"Adding \" + requested_topping + \".\")\n", " else:\n", " print(\"Sorry, we don't have \" + requested_topping + \".\")\n", "print(\"\\nFinished making your pizza!\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Оформление команд if" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Во всех примерах этой главы применялись правила стилевого оформления. ВPEP 8приведена только одна рекомендация, касающаяся проверки условий: заключать операторы сравнения (такие, как==,>=,<=ит.д.) в одиночные пробелы. Например, запись\n", "if age < 4:\n", "лучше, чем:\n", "if age<4:\n", "Пробелы не влияют на интерпретацию вашего кода Python; они только упрощают чтение кода вами и другими разработчиками." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.5" } }, "nbformat": 4, "nbformat_minor": 2 }