Програмісту часто доводиться перевіряти набори умов і приймати рішення в залежності від цих умов. Команда if в мові Python дозволяє перевірити поточний стан програми та вибрати подальші дії в залежності від результатів перевірки. У цій статті ви навчитеся писати умовні перевірки для будь-яких умов, які вас цікавлять. Ми почнемо з простих команд if, а потім перейдемо до більш складних серій команд if для перевірки комбінованих умов. Потім ця концепція буде застосована до списків; ви дізнаєтеся, як написати цикл, який виконує з більшістю елементів списку одну операцію, і про те, що для деяких елементів з конкретними значеннями застосовується особлива обробка.
Простий приклад.
Наступний короткий приклад показує, як правильно організувати обробку спеціальних ситуацій з використанням if. Припустимо, у вас є список машин, і ви хочете вивести назву кожної машини. Назви більшості машин повинні записуватися з капіталізацією (перша буква в верхньому регістрі, інші в нижньому). З іншого боку, значення 'bmw' має записуватися в верхньому регістрі. Наступний код перебирає список назв машин і шукає в ньому значення 'bmw'. Для всіх елементів, що містять значення 'bmw', значення виводиться у верхньому регістрі:
cars = [ 'audi', 'bmw', 'subaru', 'toyota']
for car in cars:
.1. if car == 'bmw':
print(car.upper ())
else:
print(car.title ())
Цикл в цьому прикладі .1. спочатку перевіряє, чи містить car значення 'bmw'. Якщо перевірка дає позитивний результат, то значення виводиться у верхньому регістрі. Якщо car містить все що завгодно, крім 'bmw', то при виводі значення застосовується капіталізація:
Audi
BMW
Subaru
Toyota
У цьому прикладі об'єднуються кілька концепцій, про які ви дізнаєтеся в цій статті. Для початку розглянемо основні конструкції, які застосовуються для перевірки умов в програмах.
Перевірка умов.
У кожній команді if центральне місце займає вираз, результатом якого є логічна істина (True) або логічна брехня (False); цей вислів називається умовою. Залежно від результату перевірки Python вирішує, чи повинен виконуватися код в команді if. Якщо результат умови дорівнює True, то Python виконує код, наступний за командою if.
Перевірка рівності.
У багатьох умовах поточне значення змінної порівнюється з конкретним значенням, що цікавлять вас. Найпростіше умова перевіряє, чи дорівнює значення змінної конкретній величині:
.1. >>> car = 'bmw'
.2. >>> car == 'bmw'
True
У рядку .1. змінній car присвоюється значення 'bmw'; операція виконується одним знаком =, як ви вже неодноразово бачили. Рядок .2. перевіряє, чи рівне значення car рядку 'bmw'; для перевірки використовується подвійний знак рівності (==). Цей оператор повертає True, якщо значення зліва і праворуч від оператора рівні; якщо ж значення не збігаються, оператор повертає False. У нашому прикладі значення збігаються, тому Python повертає True. Якщо car приймає будь-яке інше значення замість 'bmw', перевірка повертає False:
.1. >>> car = 'audi'
.2. >>> car == 'bmw'
False
Одинарний знак рівності виконує операцію; код .1. можна прочитати в формі «Присвоїти car значення 'audi'». З іншого боку, подвійний знак рівності, як в рядку .2., задає питання: «Значення car рівне 'bmw'?» Таке застосування знаків рівності зустрічається в багатьох мовах програмування.
Перевірка рівності без урахування регістру.
У мові Python перевірка рівності виконується з урахуванням регістру. Наприклад, два значення з різним регістром символів рівними не вважаються:
>>> car = 'Audi'
>>> car == 'audi'
False
Якщо регістр символів важливий, така поведінка приносить користь. Але якщо перевірка повинна виконуватися на рівні символів без урахування регістру, перетворіть значення змінної до нижнього регістру перед виконанням порівняння:
>>> car = 'Audi'
>>> car.lower() == 'audi'
True
Умова повертає True незалежно від регістру символів 'Audi', тому що перевірка тепер виконується без урахування регістру. Функція lower() не змінює значення, яке спочатку зберігалося в car, так що порівняння не відбивається на вихідній змінній:
.1. >>> car = 'Audi'
.2. >>> car.lower() == 'audi'
True
.3. >>> car
'Audi'
У точці .1. рядок 'Audi' зберігається в змінній car. У точці .2. значення car приводиться до нижнього регістру і порівнюється зі значенням рядка 'audi', також записаним в нижньому регістрі. Два рядки збігаються, тому Python повертає True. Вираз в точці .3. показує, що значення, яке зберігається в car, не змінилося в результаті перевірки.
Веб-сайти встановлюють певні правила для даних, що вводяться користувачами подібним чином. Наприклад, сайт може використовувати перевірку умови, щоб переконатися в тому, що ім'я кожного користувача унікальне (а не збігається з ім'ям іншого користувача, відрізняючись від нього тільки регістром символів). Коли хтось вказує нове ім'я користувача, це ім'я перетвориться до нижнього регістру і порівнюється з версіями всіх існуючих імен в нижньому регістрі. Під час такої перевірки ім'я 'John' буде відхилено, якщо в системі вже використовується будь-який різновид 'john'.
Перевірка нерівності.
Якщо ви хочете перевірити, що два значення різні, використовуйте комбінацію з знаку оклику і знака рівності (!=). Знак оклику представляє заперечення, як і в багатьох мовах програмування. Для знайомства з оператором нерівності ми скористаємося іншою командою if. В змінній зберігається замовлене доповнення до піци; якщо клієнт не замовив анчоуси (anchovies), програма виводить повідомлення:
requested_topping = 'mushrooms'
.1. if requested_topping != 'Anchovies':
print( "Hold the anchovies!")
Рядок .1. порівнює значення requested_topping зі значенням 'anchovies'. якщо ці два значення не рівні, Python повертає True і виконує код після команди if. Якщо два значення рівні, Python повертає False і не виконує код після команди if. Так як значення requested_topping відрізняється від 'anchovies', команда print буде виконана:
Hold the anchovies!
У більшості умовних виразів, які ви будете використовувати в програмах, буде перевірятися рівність, але іноді перевірка нерівності виявляється ефективнішою.
Порівняння чисел.
Перевірка числових значень досить прямолінійна. Наприклад, наступний код перевіряє, чи змінна age дорівнює 18:
>>> age = 18
>>> age == 18
True
Також можна перевірити умова нерівності двох чисел. Наприклад, наступний код виводить повідомлення, якщо значення змінної answer відрізняється від очікуваного:
answer = 17
.1. if answer != 42:
print ( "That is not the correct answer. Please try again!")
Умова .1. виконується, тому що значення answer (17) не дорівнює 42. Оскільки умова істинна, блок з відступом виконується:
That is not the correct answer. Please try again!
В умовні команди також можна включати всі можливі математичні порівняння: менше, менше або дорівнює, більше, більше або дорівнює:
>>> age = 19
>>> age <21
True
>>> age <= 21
True
>>> age> 21
False
>>> age> = 21
False
Всі ці математичні порівняння можуть використовуватися в умовах if, що підвищує точність формулювання умов, які вас цікавлять.
Перевірка декількох умов.
Іноді потрібно перевірити кілька умов одночасно. Наприклад, в деяких випадках для виконання дії буває потрібно, щоб істинними були відразу дві умови; в інших випадках достатньо, щоб істинним було хоча б одна з двох умов. Ключові слова and і or допоможуть вам в подібних ситуаціях.
Використання and для перевірки декількох умов.
Щоб перевірити, що дві умови істинні одночасно, об'єднайте їх ключовим словом and; якщо обидва умови істинні, то і весь вираз теж істинний. Якщо хоча б одна (або обидві) умови помилкові, то і результат всього виразу дорівнює False. Наприклад, щоб переконатися в тому, що кожному з двох людей більше 21 року, використовуйте наступну перевірку:
.1. >>> age_0 = 22
>>> age_1 = 18
.2. >>> age_0 >= 21 and age_1 >= 21
False
.3. >>> age_1 = 22
>>> age_0 >= 21 and age_1 >= 21
True
У точці .1. визначаються дві змінні, age_0 і age_1. У точці .2. програма перевіряє, що обидва значення рівні 21 і більше. Ліва умова виконується, а права ні, тому весь умовний вираз дає результат False. У точці .3. змінній age_1 присвоюється значення 22. Тепер значення age_1 більше 21; обидві перевірки проходять, а весь умовний вираз дає істинний результат. Щоб код краще читався, окремі умови можна включити в круглі дужки, але це не обов'язково. З круглими дужками перевірка може виглядати так:
(age_0 >= 21) and (age_1 >= 21)
Використання or для перевірки декількох умов.
Ключове слово or теж дозволяє перевірити кілька умов, але результат загальної перевірки є істинним в тому разі, коли істинна хоча б одна або обидві умови. Помилковий результат досягається тільки в тому випадку, якщо обидві окремі умови помилкові. Повернемося до прикладу з віком, але на цей раз перевіримо, чи хоча б одна з двох
змінних більше 21:
.1. >>> age_0 = 22
>>> age_1 = 18
.2. >>> age_0 >= 21 or age_1 >= 21
True
.3. >>> age_0 = 18
>>> age_0 >= 21 or age_1 >= 21
False
Як і в попередньому випадку, в точці .1. визначаються дві змінні. Так як умова для age_0 в точці .2. істинна, весь вираз також дає істинний результат. Потім значення age_0 зменшується до 18. При перевірці .3. обидва умови виявляються помилковими, і загальний результат всього виразу теж хибний.
Перевірка входження значень в список.
Іноді буває важливо перевірити, чи містить список деяке значення, перш ніж виконувати дію. Наприклад, перед завершенням реєстрації нового користувача на сайті можна перевірити, чи існує його ім'я в списку імен зареєстрованих користувачів, або в картографічному проекті визначити, чи входить місце яке передається в список відомих місць на карті.
Щоб дізнатися, чи присутнє задане значення в списку, скористайтеся ключовим словом in. Припустимо, ви пишете програму для піцерії. Ви створили список доповнень до піци, замовлених клієнтом, і хочете перевірити, чи входять деякі доповнення в цей список.
>>> requested_toppings = [ 'mushrooms', 'onions', 'pineapple']
.1. >>> 'mushrooms' in requested_toppings
True
.2. >>> 'pepperoni' in requested_toppings
False
У точках .1. і .2. ключове слово in наказує Python перевірити, чи входять значення 'mushrooms' і 'pepperoni' в список requested_toppings. Це дуже корисно, тому що ви можете створити список значень, критичних для вашої програми, а потім легко перевірити, чи присутнє значення яке перевіряється в списку.
Перевірка відсутності значення в списку.
В інших випадках програма повинна переконатися в тому, що значення не входить в список. Для цього використовується ключове слово not. Для прикладу розглянемо
список користувачів, яким заборонено писати коментарі на форумі. Перш ніж дозволити учаснику надсилати коментарі, можна перевірити, чи не був користувач включений в «чорний список»:
banned_users = [ 'andrew', 'carolina', 'david']
user = 'marie'
.1. if user not in banned_users:
print (user.title() + ", you can post a response if you wish.")
Рядок .1. досить чітко читається: якщо користувач не входить в «чорний список» banned_users, то Python повертає True і виконує рядок з відступом. Користувач 'marie' до цього списку не входить, тому програма виводить відповідне повідомлення:
Marie, you can post a response if you wish.
Логічні вирази.
У процесі вивчення програмування ви рано чи пізно почуєте термін «Логічний вираз». По суті це всього лише інша назва для перевірки умови. Результат логічного виразу дорівнює True або False, як і результат умовного вираження після його обчислення. Логічні вирази часто використовуються для перевірки деяких умов - наприклад, чи запущена комп'ютерна гра або чи дозволено користувачеві редагувати деяку інформацію на сайті:
game_active = True
can_edit = False
Логічні вирази надають ефективні засоби для контролю стану програми або певної умови, що в свою чергу відіграє важливу роль у вашій програмі.
Команди if.
Коли ви зрозумієте, як працюють перевірки умов, можна переходити до написання команд if. Існують кілька різновидів команд if, і вибір варіанту залежить від кількості умов, які будуть перевірені. Приклади команд if вже зустрічалися вам при обговоренні перевірки умов, але зараз ця тема буде розглянута більш детально.
Прості команди if.
Найпростіша форма команди if складається з однієї умови і однієї дії:
if умова:
дія
У першому рядку розміщується умова, а в блоці з відступом - практично будь-яка дія. Якщо умова істинна, то Python виконує код в блоці після команди if, а якщо помилкова, цей код ігнорується. Припустимо, є змінна, що представляє вік людини. Наступний код перевіряє, що цей вік достатній для голосування:
age = 19
.1. if age >= 18:
.2. print( "You are old enough to vote!")
У точці .1. Python перевіряє, що значення змінної age більше або дорівнює 18. В такому випадку виконується команда print .2. в рядку з відступом:
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
.1. if age> = 18:
print ( "You are old enough to vote!")
print ( "Have you registered to vote yet?")
.2. else:
print ( "Sorry, you are too young to vote.")
print ( "Please register to vote as soon as you turn 18!")
Якщо умова .1. істинна, то виконується перший блок з командами print. Якщо ж умова помилкова, виконується блок else в точці .2.. Так як значення age на цей раз менше 18, умова виявляється хибною, і виконується код в блоці else:
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 років квиток коштує $5.
- Для відвідувачів більше 18 років квиток коштує $10.
Як використовувати команду if для визначення плати за вхід? Наступний код визначає, до якої вікової категорії належить відвідувач, і виводить повідомлення з вартістю квитка:
age = 12
.1. if age < 4:
print("Your admission cost is $0.")
.2. elif age < 18:
print("Your admission cost is $5.")
.3. else:
print("Your admission cost is $10.")
Умова if в точці .1. перевіряє, що вік відвідувача менше 4 років. Якщо умова істинна, то програма виводить відповідне повідомлення, і Python пропускає інші перевірки. Рядок elif в точці .2. насправді є ще однією перевіркою if, яка виконується тільки в тому випадку, якщо попередня перевірка завершилася невдачею. У цьому місці нам відомо, що вік відвідувача не менше 4 років, тому що перша умова було помилковою. Якщо відвідувачеві менше 18 років, програма виводить відповідне повідомлення, і Python пропускає блок else. Якщо помилкові обидві умови - if і elif, то Python виконує код в блоці else в точці .3.. В даному прикладі умова .1. дає помилковий результат, тому її блок не виконується. Однак друга умова виявляється істинною (12 менше 18), тому код буде виконаний. Результат складається із одного повідомлення з ціною квитка:
Your admission cost is $5.
При будь-якому значенні віку більше 17 перші дві умови помилкові. У таких ситуаціях блок else буде виконаний і ціна квитка складе $10. Замість того щоб виводити повідомлення з ціною квитка в блоках if - elif - else, краще використовувати інше, більш компактне рішення: присвоїти ціну в ланцюжку if - elif - else, а потім додати одну команду print після виконання ланцюжка:
age = 12
if age <4:
.1. price = 0
elif age <18:
.2. price = 5
else:
.3. price = 10
.4 print ( "Your admission cost is $" + str(price) + ".")
Рядкам .1., .2. і .3. присвоюють значення price в залежності від значення age, як і в попередньому прикладі. Після присвоювання ціни в ланцюжку if - elif - else окрема команда print без відступу .4. використовує це значення для виведення повідомлення з ціною квитка. Цей приклад виводить той же результат, що і попередній, але ланцюжок if - elif - else має більш чітку спеціалізацію. Замість того щоб визначати ціну і виводити повідомлення, він просто визначає ціну квитка. Крім підвищення ефективності, у цього коду є додаткова перевага, а саме для того щоб змінити текст вихідного повідомлення, досить буде відредагувати всього одну команду print - замість трьох різних команд.
Серії блоків elif.
Код може містити скільки завгодно блоків elif. Наприклад, якщо парк атракціонів введе особливу знижку для літніх відвідувачів, ви можете додати в свій код ще одну перевірку для визначення того, чи поширюється знижка на поточного користувача. Припустимо, відвідувачі з віком 65 і вище платять половину від звичайної ціни квитка, або $5:
age = 12
if age < 4:
price = 0
elif age < 18:
price = 5
.1. elif age < 65:
price = 10
.2. else:
price = 5
print( "Your admission cost is $" + str(price) + ".")
Більша частина коду залишилася незмінною. Другий блок elif в точці .1. тепер переконується в тому, що відвідувачеві менше 65 років, перш ніж призначити йому повну ціну квитка $10. Зверніть увагу: значення, присвоєне в блоці else .2., має бути замінено на $5, тому що до цього блоку доходять тільки відвідувачі з віком 65 і вище.
Відсутність блоку else.
Python не вимагає, щоб ланцюжок if - elif неодмінно завершувалася блоком else. Іноді блок else зручний; в інших випадках буває краще використовувати додаткову секцію elif для обробки конкретної умови:
age = 12
if age < 4:
price = 0
elif age < 18:
price = 5
elif age < 65:
price = 10
.1. elif age > = 65:
price = 5
print ( "Your admission cost is $" + str(price) + ".")
Блок elif в точці .1. призначає ціну $5, якщо вік відвідувача дорівнює 65 і вище; сенс такого коду зрозуміліший, ніж в узагальненого блоку else. З такою зміною коду, виконання кожного блоку можливо тільки при істинності конкретної умови. Блок else «універсальний»: він обробляє всі умови, що не підходять ні під одну конкретну перевірку if або elif, причому в цю категорію іноді можуть потрапити недійсні або навіть шкідливі дані. Якщо у вас є кінцева конкретна умова, краще використовуйте завершальний блок elif і опустіть блок else. В цьому випадку ви можете бути впевнені в тому, що ваш код буде виконуватися тільки в правильних умовах.
Перевірка декількох умов.
Ланцюжки if - elif - else ефективні, але вони підходять тільки в тому випадку, якщо істинним має бути тільки одна умова. Як тільки Python знаходить що виконується умова, всі інші перевірки пропускаються. Така поведінка досить ефективна, тому що воно дозволяє перевірити одну конкретну умову. Однак іноді буває важливо перевірити всі умови, що представляють інтерес. У таких випадках слід застосовувати серії простих команд if без блоків elif або else. Таке рішення доречно, коли істинними можуть бути відразу декілька умов і ви хочете відреагувати на всі істинні умови. Повернемося до прикладу з піцою. Якщо хтось замовить піцу з двома доповненнями, програма повинна обробити обидва доповнення:
.1. requested_toppings = [ 'mushrooms', 'extra cheese']
.2. if 'mushrooms' in requested_toppings:
print ( "Adding mushrooms.")
.3. if 'pepperoni' in requested_toppings:
print ( "Adding pepperoni.")
.4. if 'extra cheese' in requested_toppings:
print ( "Adding extra cheese.")
print ( "\n Finished making your pizza!")
Обробка починається в точці .1. зі списку, що містить замовлені доповнення. Команди if в точці .2. і .3. перевіряють, чи включає замовлення конкретні доповнення - гриби і пепероні, і якщо включає - виводять повідомлення з підтвердженням. Перевірка в точці .3. реалізована простою командою if, а не elif або else, тому умова буде перевірятися незалежно від того, чи була попередня умова істинною або хибною. Код в точці .4. перевіряє, чи була замовлена додаткова порція сиру, незалежно від результату перших двох перевірок. Ці три незалежних умови перевіряються при кожному виконанні програми. Так як в цьому коді перевіряються всі можливі варіанти доповнень, в замовлення будуть включені два доповнення з трьох:
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 ( "\n Finished making your pizza!")
Перше ж умова, яка перевіряється (для 'mushrooms') виявляється істинною. Однак значення 'extra cheese' і 'pepperoni' після цього не перевіряються, тому що в ланцюжках if - elif - else після виявлення першої справжньої умови, всі інші умови пропускаються. В результаті в піцу буде включено тільки перше з замовлених доповнень:
Adding mushrooms.
Finished making your pizza!
Отже, якщо ви хочете, щоб в програмі виконувався лише один блок коду - використовуйте ланцюжок if - elif - else. Якщо ж виконуватися повинні кілька блоків, використовуйте серію незалежних команд if.
Використання команд if зі списками.
Об'єднання команд if зі списками відкриває ряд цікавих можливостей. Наприклад, ви можете відстежувати спеціальні значення, для яких необхідна особлива обробка в порівнянні з іншими значеннями в списку, або ефективно управляти умовами, що змінюються - наприклад, наявністю деяких страв в ресторані. Також об'єднання команд if зі списками допомагає продемонструвати, що ваш код коректно працює у всіх можливих ситуаціях.
Перевірка спеціальних значень.
Давайте уважніше розглянемо процес пошуку і обробки особливих значень в списку. Повернемося до прикладу з піцерією. Програма виводить повідомлення кожного разу, коли у піцу додається доповнення в процесі приготування. Код цієї дії можна записати надзвичайно ефективно: потрібно створити список доповнень, що були замовлені клієнтом, і використовувати цикл для перебору всіх замовлених доповнень:
requested_toppings = [ 'mushrooms', 'green peppers', 'extra cheese']
for requested_topping in requested_toppings:
print ( "Adding" + requested_topping + ".")
print ( "\n Finished making your pizza!")
Результат досить тривіальний, тому код зводиться до простого циклу for:
Adding mushrooms.
Adding green peppers.
Adding extra cheese.
Finished making your pizza!
А якщо в піцерії раптом закінчиться зелений перець? Команда if в циклі for може правильно обробити цю ситуацію:
requested_toppings = [ 'mushrooms', 'green peppers', 'extra cheese']
for requested_topping in requested_toppings:
.1. if requested_topping == 'green peppers':
print ( "Sorry, we are out of green peppers right now.")
.2. else:
print ( "Adding" + requested_topping + ".")
print ( "\n Finished making your pizza!")
На цей раз програма перевіряє кожен замовлений елемент перед додаванням його до піци. У точці .1. програма перевіряє, чи замовив клієнт зелений перець і якщо замовив - виводить повідомлення про те, що цього доповнення немає. Блок else в точці .2. гарантує, що всі інші доповнення будуть включені в замовлення. З вихідних даних видно, що всі замовлені доповнення обробляються правильно:
Adding mushrooms.
Sorry, we are out of green peppers right now.
Adding extra cheese.
Finished making your pizza!
Перевірка наявності елементів в списку.
Для всіх списків, з якими ми працювали до цих пір, діяло одне просте припущення: ми вважали, що в кожному списку є хоча б один елемент. Скоро ми надамо користувачеві можливість вводити інформацію, що зберігається в списку, тому ми вже не зможемо припускати, що при кожному виконанні циклу в списку є хоча б один елемент. У такій ситуації перед виконанням циклу for буде корисно перевірити, чи є в списку хоча б один елемент. Перевіримо, чи є елементи в списку замовлених доповнень, перед виготовленням піци. Якщо список порожній, програма пропонує користувачеві підтвердити, що він хоче базову піцу без доповнень. Якщо список не порожній - піца готується так, як в попередніх прикладах:
.1. requested_toppings = []
.2. if requested_toppings:
for requested_topping in requested_toppings:
print ( "Adding" + requested_topping + ".")
print ( "\n Finished making your pizza!")
.3. else:
print ( "Are you sure you want a plain pizza?")
На цей раз ми починаємо з порожнього списку замовлених доповнень у точці .1.. Замість того щоб відразу переходити до циклу for, програма виконує перевірку в точці .2.. Коли ім'я списку використовується в умові if, Python повертає True, якщо список містить хоча б один елемент; якщо список пустий, повертається значення False. Якщо requested_toppings проходить перевірку умови, виконується цикл for, який ми використовували в попередньому прикладі. Якщо ж умова помилкова, то програма виводить повідомлення, яке пропонує клієнту підтвердити, чи дійсно він хоче отримати базову піцу без доповнень .3.. В даному прикладі список порожній, тому виводиться повідомлення:
Are you sure you want a plain pizza?
Якщо в списку є хоча б один елемент, у вихідні дані включається кожне замовлене доповнення.
Множинні списки.
Відвідувачі здатні замовити що завгодно, особливо коли мова заходить про доповнення до піци. Що якщо клієнт захоче покласти на піцу картоплю фрі? Списки
і команди if дозволять вам переконатися в тому, що вхідні дані мають сенс, перш ніж обробляти їх. Давайте перевіримо наявність нестандартних доповнень перед тим, як готувати піцу. У наступному прикладі визначаються два списки. Перший список містить перелік доступних доповнень, а другий - список доповнень, що були замовлені клієнтом. На цей раз кожен елемент з requested_toppings перевіряється зі списком доступних доповнень перед додаванням в піцу:
.1. available_toppings = [ 'mushrooms', 'olives', 'green peppers', 'pepperoni', 'pineapple', 'extra cheese']
.2. requested_toppings = [ 'mushrooms', 'french fries', 'extra cheese']
.3. for requested_topping in requested_toppings:
.4. if requested_topping in available_toppings:
print ( "Adding" + requested_topping + ".")
.5. else:
print ( "Sorry, we do not have" + requested_topping + ".")
print ( "\n Finished making your pizza!")
У точці .1. визначається список доступних доповнень до піци. Варто зауважити, якщо в піцерії використовується постійний асортимент доповнень, цей список можна реалізувати у вигляді кортежу. У точці .2. створюється список доповнень, замовлених клієнтом. Зверніть увагу на незвичайне замовлення 'french fries'. У точці .3. програма перебирає список замовлених доповнень. Всередині циклу програма спочатку перевіряє, що кожне замовлене доповнення присутнє в списку доступних доповнень .4.. Якщо доповнення доступне, воно додається в піцу. Якщо замовлене доповнення не входить в список, виконується блок else .5.. Блок else виводить повідомлення про те, що доповнення недоступно. З цим синтаксисом програма видає чіткий, змістовний результат:
Adding mushrooms.
Sorry, we do not have french fries.
Adding extra cheese.
Finished making your pizza!
Всього в декількох рядках коду нам вдалося ефективно вирішити цілком реальну проблему!
Оформлення команд if.
У всіх прикладах цього розділу застосовувалися правила стильового оформлення. У PEP 8 наведена тільки одна рекомендація, що стосується перевірки умов: заключати
оператори порівняння (такі, як ==, >=, <= і т. д.) в одинарні пробіли. Наприклад, запис
if age < 4:
краще ніж:
if age<4:
Пробіли не впливають на інтерпретацію вашого коду Python; вони тільки спрощують читання коду вами і іншими розробниками.
- Войдите или зарегистрируйтесь, чтобы оставлять комментарии