Главная страница
Навигация по странице:

  • УПРАЖНЕНИЯ 5.1. Проверка условий

  • 5.2. Больше условий

  • УПРАЖНЕНИЯ 5.3. Цвета 1

  • 5.4. Цвета 2

  • 5.5. Цвета 3

  • 5.6. Периоды жизни

  • 5.7. Любимый фрукт

  • Мэтиз. Изучаем Python. Crash course2 n d e d i t i o na h a n d s o n, p r o j e c t b a s e d i n t r o d u c t i o n t o p r o g r a m m i n g


    Скачать 6.2 Mb.
    НазваниеCrash course2 n d e d i t i o na h a n d s o n, p r o j e c t b a s e d i n t r o d u c t i o n t o p r o g r a m m i n g
    Дата28.06.2022
    Размер6.2 Mb.
    Формат файлаpdf
    Имя файлаМэтиз. Изучаем Python.pdf
    ТипДокументы
    #618322
    страница11 из 52
    1   ...   7   8   9   10   11   12   13   14   ...   52
    92 Глава 5 • Команды if потому что вы можете создать список значений, критичных для вашей программы, а затем легко проверить, присутствует ли проверяемое значение в списке.
    Проверка отсутствия значения в списке
    В других случаях программа должна убедиться в том, что значение не входит в список. Для этого используется ключевое слово not
    . Для примера рассмотрим список пользователей, которым запрещено писать комментарии на форуме. Прежде чем разрешить пользователю отправку комментария, можно проверить, не был ли пользователь включен в черный список:
    banned_users.py
    banned_users = ['andrew', 'carolina', 'david']
    user = 'marie'

    if user not in banned_users:
    print(f"{user.title()}, you can post a response if you wish.")
    Строка  достаточно четко читается: если пользователь не входит в черный список banned_users
    , то Python возвращает
    True и выполняет строку с отступом.
    Пользователь 'marie'
    в этот список не входит, поэтому программа выводит соот- ветствующее сообщение:
    Marie, you can post a response if you wish.
    Логические выражения
    В процессе изучения программирования вы рано или поздно услышите термин
    «логическое выражение». По сути, это всего лишь другое название для проверки условия. Результат логического выражения равен
    True или
    False
    , как и результат условного выражения после его вычисления.
    Логические выражения часто используются для проверки некоторых условий — например, запущена ли компьютерная игра или разрешено ли пользователю редак- тирование некоторой информации на сайте:
    game_active = True can_edit = False
    Логические выражения предоставляют эффективные средства для контроля со- стояния программы или определенного условия, играющего важную роль в вашей программе.
    УПРАЖНЕНИЯ
    5.1. Проверка условий: напишите последовательность условий. Выведите описание каж- дой проверки и ваш прогноз относительно ее результата. Код должен выглядеть примерно так:

    Команды if 93
    car = 'subaru'
    print("Is car == 'subaru'? I predict True.")
    print(car == 'subaru')
    print("\nIs car == 'audi'? I predict False.")
    print(car == 'audi')
    • Внимательно просмотрите результаты. Убедитесь в том, что вы понимаете, почему результат каждой строки равен
    True или
    False
    • Создайте как минимум 10 условий. Не менее пяти одних должны давать результат
    True
    , а не менее пяти других — результат
    False
    5.2. Больше условий: количество условий не ограничивается десятью. Попробуйте напи- сать другие условия и включить их в conditional_tests .py
    . Программа должна выдавать по крайней мере один истинный и один ложный результат для следующих видов проверок:
    • Проверка равенства и неравенства строк.
    • Проверки с использованием функции lower()
    • Числовые проверки равенства и неравенства, условий «больше», «меньше», «боль- ше или равно», «меньше или равно».
    • Проверки с ключевым словом and и or.
    • Проверка вхождения элемента в список.
    • Проверка отсутствия элемента в списке.
    Команды if
    Когда вы поймете, как работают проверки условий, можно переходить к написанию команд if
    . Существуют несколько разновидностей команд if
    , и выбор варианта зави- сит от количества проверяемых условий. Примеры команд if уже встречались вам при обсуждении проверки условий, но сейчас эта тема будет рассмотрена более подробно.
    Простые команды if
    Простейшая форма команды if состоит из одного условия и одного действия:
    if условие:
    действие
    В первой строке размещается условие, а в блоке с отступом — практически любое действие. Если условие истинно, то Python выполняет код в блоке после коман- ды if
    , а если ложно, этот код игнорируется.
    Допустим, имеется переменная, представляющая возраст человека. Следующий код проверяет, что этот возраст достаточен для голосования:
    voting.py
    age = 19

    if age >= 18:

    print("You are old enough to vote!")

    94 Глава 5 • Команды if
    В точке  Python проверяет, что значение переменной age больше или равно 18.
    В таком случае выполняется команда print
     в строке с отступом:
    You are old enough to vote!
    Отступы в командах if играют ту же роль, что и в циклах for
    . Если условие истин- но, то все строки с отступом после команды if выполняются, а если ложно — весь блок с отступом игнорируется.
    Блок команды if может содержать сколько угодно строк. Добавим еще одну строку для вывода дополнительного сообщения в том случае, если возраст достаточен для голосования:
    age = 19
    if age >= 18:
    print("You are old enough to vote!")
    print("Have you registered to vote yet?")
    Условие выполняется, а обе команды print снабжены отступом, поэтому выводятся оба сообщения:
    You are old enough to vote!
    Have you registered to vote yet?
    Если значение age меньше 18, программа ничего не выводит.
    Команды if-else
    Часто в программе необходимо выполнить одно действие в том случае, если ус- ловие истинно, и другое действие, если оно ложно. С синтаксисом if
    - else это возможно. Блок if
    - else в целом похож на команду if
    , но секция else определяет действие или набор действий, выполняемых при неудачной проверке.
    В следующем примере выводится то же сообщение, которое выводилось ранее, если возраст достаточен для голосования, но на этот раз при любом другом возрасте выводится другое сообщение:
    age = 17

    if age >= 18:
    print("You are old enough to vote!")
    print("Have you registered to vote yet?")

    else:
    print("Sorry, you are too young to vote.")
    print("Please register to vote as soon as you turn 18!")
    Если условие  истинно, то выполняется первый блок с командами print
    . Если же условие ложно, выполняется блок else в точке . Так как значение age на этот раз меньше 18, условие оказывается ложным и выполняется код в блоке else
    :

    Команды if 95
    Sorry, you are too young to vote.
    Please register to vote as soon as you turn 18!
    Этот код работает, потому что существуют обе возможные ситуации: возраст либо достаточен для голосования, либо недостаточен. Структура if
    - else хорошо под- ходит для тех ситуаций, в которых Python всегда выполняет только одно из двух возможных действий. В подобных простых цепочках if
    - else всегда выполняется одно из двух возможных действий.
    Цепочки if-elif-else
    Нередко в программе требуется проверять более двух возможных ситуаций; для таких ситуаций в Python предусмотрен синтаксис if
    - elif
    - else
    . Python выполняет только один блок в цепочке if
    - elif
    - else
    . Все условия проверяются по порядку до тех пор, пока одно из них не даст истинный результат. Далее выполняется код, следующий за этим условием, а все остальные проверки Python пропускает.
    Во многих реальных ситуациях существует более двух возможных результатов.
    Представьте себе парк аттракционов, который взимает разную плату за вход для разных возрастных групп:
    ‰
    ‰
    Для посетителей младше 4 лет вход бесплатный.
    ‰
    ‰
    Для посетителей от 4 до 18 лет билет стоит $25.
    ‰
    ‰
    Для посетителей от 18 лет и старше билет стоит $40.
    Как использовать команду if для определения платы за вход? Следующий код определяет, к какой возрастной категории относится посетитель, и выводит со- общение со стоимостью билета:
    amusement_park.py
    age = 12

    if age < 4:
    print("Your admission cost is $0.")

    elif age < 18:
    print("Your admission cost is $25.")

    else:
    print("Your admission cost is $40.")
    Условие if в точке  проверяет, что возраст посетителя меньше 4 лет. Если условие истинно, то программа выводит соответствующее сообщение и Python пропускает остальные проверки. Строка elif в точке  в действительности является еще одной проверкой if
    , которая выполняется только в том случае, если предыдущая проверка завершилась неудачей. В этом месте цепочки известно, что возраст посетителя не меньше 4 лет, потому что первое условие было ложным. Если посетителю меньше
    18 лет, программа выводит соответствующее сообщение и Python пропускает блок else
    . Если ложны оба условия — if и elif
    , то Python выполняет код в блоке else в точке .

    96 Глава 5 • Команды if
    В данном примере условие  дает ложный результат, поэтому его блок не выпол- няется. Однако второе условие оказывается истинным (12 меньше 18), поэтому код будет выполнен. Вывод состоит из одного сообщения с ценой билета:
    Your admission cost is $25.
    При любом значении возраста больше 17 первые два условия ложны. В таких си- туациях блок else будет выполнен и цена билета составит $40.
    Вместо того чтобы выводить сообщение с ценой билета в блоках if
    - elif
    - else
    , лучше использовать другое, более компактное решение: присвоить цену в цепочке if
    - elif
    - else
    , а затем добавить одну команду print после выполнения цепочки:
    age = 12
    if age < 4:

    price = 0
    elif age < 18:

    price = 25
    else:

    price = 40

    print(f"Your admission cost is ${price}.")
    Строки ,  и  присваивают значение price в зависимости от значения age
    , как и в предыдущем примере. После присваивания цены в цепочке if
    - elif
    - else отдельная команда print без отступа  использует это значение для вывода со- общения с ценой билета.
    Этот пример выводит тот же результат, что и предыдущий, но цепочка if
    - elif
    - else имеет более четкую специализацию. Вместо того чтобы определять цену и выво- дить сообщения, она просто определяет цену билета. Кроме повышения эффектив- ности, у этого кода есть дополнительное преимущество: его легче модифицировать.
    Чтобы изменить текст выходного сообщения, достаточно будет отредактировать всего одну команду print
    — вместо трех разных команд.
    Серии блоков elif
    Код может содержать сколько угодно блоков elif
    . Например, если парк аттракци- онов введет особую скидку для пожилых посетителей, вы можете добавить в свой код еще одну проверку для определения того, распространяется ли скидка на те- кущего посетителя. Допустим, посетители возрастом 65 и выше платят половину обычной цены билета, или $40:
    age = 12
    if age < 4:
    price = 0
    elif age < 18:
    price = 25

    elif age < 65:

    Команды if 97
    price = 40

    else:
    price = 20
    print(f"Your admission cost is ${price}.")
    Большая часть кода осталась неизменной. Второй блок elif в точке  теперь убеждается в том, что посетителю меньше 65 лет, прежде чем назначить ему пол- ную цену билета $40. Обратите внимание: значение, присвоенное в блоке else
    , должно быть заменено на $20, потому что до этого блока доходят только посетители с возрастом 65 и выше.
    Отсутствие блока else
    Python не требует, чтобы цепочка if
    - elif непременно завершалась блоком else
    Иногда блок else удобен; иногда бывает лучше использовать дополнительную секцию elif для обработки конкретного условия:
    age = 12
    if age < 4:
    price = 0
    elif age < 18:
    price = 25
    elif age < 65:
    price = 40

    elif age >= 65:
    price = 20
    print(f"Your admission cost is ${price}.")
    Блок elif в точке  назначает цену $20, если возраст посетителя равен 65 и выше; смысл такого кода более понятен, чем у обобщенного блока else
    . С таким измене- нием выполнение каждого блока возможно только при истинности конкретного условия.
    Блок else
    «универсален»: он обрабатывает все условия, не подходящие ни под одну конкретную проверку if или elif
    , причем в эту категорию иногда могут попасть недействительные или даже вредоносные данные. Если у вас имеется завершающее конкретное условие, лучше используйте завершающий блок elif и опустите блок else
    . В этом случае вы можете быть уверены в том, что ваш код будет выполняться только в правильных условиях.
    Проверка нескольких условий
    Цепочки if
    - elif
    - else эффективны, но они подходят в том случае, если истинным должно быть только одно условие. Когда Python находит выполняющееся условие, все остальные проверки пропускаются. Такое поведение достаточно эффективно, потому что оно позволяет проверить одно конкретное условие.

    98 Глава 5 • Команды if
    Однако иногда бывает важно проверить все условия, представляющие интерес.
    В таких случаях следует применять серии простых команд if без блоков elif или else
    . Такое решение уместно, когда истинными могут быть сразу несколько усло- вий и вы хотите отреагировать на все истинные.
    Вернемся к примеру с пиццей. Если кто-то закажет пиццу с двумя топпингами, программа должна обработать оба топпинга:
    toppings.py

    requested_toppings = ['mushrooms', 'extra cheese']

    if 'mushrooms' in requested_toppings:
    print("Adding mushrooms.")

    if 'pepperoni' in requested_toppings:
    print("Adding pepperoni.")

    if 'extra cheese' in requested_toppings:
    print("Adding extra cheese.")
    print("\nFinished making your pizza!")
    Обработка начинается в точке  со списка, содержащего заказанные топпинги.
    Команды if в точке  проверяют, включает ли заказ конкретные топпинги — гри- бы и пепперони, и если включает, выводят подтверждающее сообщение. Проверка в точке  реализована простой командой if
    , а не elif или else
    , поэтому условие будет проверяться независимо от того, было ли предыдущее условие истинным или ложным. Код в точке  проверяет, была ли заказана дополнительная порция сыра, независимо от результата первых двух проверок. Эти три независимых условия проверяются при каждом выполнении программы.
    Так как в этом коде проверяются все возможные варианты топпингов, в заказ будут включены два топпинга из трех:
    Adding mushrooms.
    Adding extra cheese.
    Finished making your pizza!
    Если бы в программе использовался блок if
    - elif
    - else
    , код работал бы непра- вильно, потому что он прерывал бы работу после обнаружения первого истинного условия. Вот как это выглядело бы:
    requested_toppings = ['mushrooms', 'extra cheese']
    if 'mushrooms' in requested_toppings:
    print("Adding mushrooms.")
    elif 'pepperoni' in requested_toppings:
    print("Adding pepperoni.")
    elif 'extra cheese' in requested_toppings:
    print("Adding extra cheese.")
    print("\nFinished making your pizza!")

    Команды if 99
    Первое же проверяемое условие (для 'mushrooms'
    ) оказывается истинным. Од- нако значения 'extra cheese'
    и 'pepperoni'
    после этого не проверяются, потому что в цепочках if
    - elif
    - else после обнаружения первого истинного условия все остальные условия пропускаются. В результате в пиццу будет включено только первый из заказанных топпингов:
    Adding mushrooms.
    Finished making your pizza!
    Итак, если вы хотите, чтобы в программе выполнялся только один блок кода, ис- пользуйте цепочку if
    - elif
    - else
    . Если же выполняться должны несколько блоков, используйте серию независимых команд if
    УПРАЖНЕНИЯ
    5.3. Цвета 1: представьте, что в вашей компьютерной игре только что был подбит корабль пришельцев. Создайте переменную с именем alien_color и присвойте ей значение 'green'
    ,
    'yellow'
    или 'red'
    • Напишите команду if для проверки того, что переменная содержит значение 'green'
    . Если условие истинно, выведите сообщение о том, что игрок только что заработал 5 очков.
    Напишите одну версию программы, в которой условие if выполняется, и другую версию, в которой оно не выполняется. (Во второй версии никакое сообщение вы- водиться не должно.)
    5.4. Цвета 2: выберите цвет, как это было сделано в упражнении 5.3, и напишите цепочку if-else
    • Напишите команду if для проверки того, что переменная содержит значение 'green’.
    Если условие истинно, выведите сообщение о том, что игрок только что заработал
    5 очков.
    • Если переменная содержит любое другое значение, выведите сообщение о том, что игрок только что заработал 10 очков.
    • Напишите одну версию программы, в которой выполняется блок if
    , и другую вер- сию, в которой выполняется блок else
    5.5. Цвета 3: преобразуйте цепочку if-else из упражнения 5.4 в цепочку if-elif-else
    • Если переменная содержит значение 'green'
    , выведите сообщение о том, что игрок только что заработал 5 очков.
    • Если переменная содержит значение 'yellow'
    , выведите сообщение о том, что игрок только что заработал 10 очков.
    • Если переменная содержит значение 'red'
    , выведите сообщение о том, что игрок только что заработал 15 очков.
    • Напишите три версии программы и проследите за тем, чтобы для каждого цвета пришельца выводилось соответствующее сообщение.
    5.6. Периоды жизни: напишите цепочку if-elif-else для определения периода жизни че- ловека. Присвойте значение переменной age
    , а затем выведите сообщение:

    100 Глава 5 • Команды if
    • Если значение меньше 2 — младенец.
    • Если значение больше или равно 2, но меньше 4 — малыш.
    • Если значение больше или равно 4, но меньше 13 — ребенок.
    • Если значение больше или равно 13, но меньше 20 — подросток.
    • Если значение больше или равно 20, но меньше 65 — взрослый.
    • Если значение больше или равно 65 — пожилой человек.
    5.7. Любимый фрукт: составьте список своих любимых фруктов. Напишите серию неза- висимых команд if для проверки того, присутствуют ли некоторые фрукты в списке.
    • Создайте список трех своих любимых фруктов и назовите его favorite_fruits
    • Напишите пять команд if
    . Каждая команда должна проверять, входит ли опреде- ленный тип фрукта в список. Если фрукт входит в список, блок if должен выводить сообщение вида «You really like bananas!».
    Использование команд if со списками
    Объединение команд if со списками открывает ряд интересных возможностей. На- пример, вы можете отслеживать специальные значения, для которых необходима особая обработка по сравнению с другими значения в списке, или эффективно управлять изменяющимися условиями — например, наличием некоторых блюд в ресторане. Также объединение команд if со списками помогает продемонстри- ровать, что ваш код корректно работает во всех возможных ситуациях.
    Проверка специальных значений
    Эта глава началась с простого примера, показывающего, как обрабатывать особые значения (такие, как 'bmw'
    ), которые должны выводиться в другом формате по сравнению с другими значениями в списке. Теперь, когда вы лучше разбираетесь в проверках условий и командах if
    , давайте повнимательнее рассмотрим процесс поиска и обработки особых значений в списке.
    Вернемся к примеру с пиццерией. Программа выводит сообщение каждый раз, когда пицца снабжается топпингом в процессе приготовления. Код этого действия можно записать чрезвычайно эффективно: нужно создать список топпингов, за- казанных клиентом, и использовать цикл для перебора всех заказанных:
    1   ...   7   8   9   10   11   12   13   14   ...   52


    написать администратору сайта