Сложно разклоняване¶
Последователни условия¶
Има задачи, при които, когато едно условие не е изпълнено, трябва да се провери друго, а ако това условие не е валидно, тогава се проверява и трето и така нататък. За да избегнете писането
в Python използваме специалната дума elif
, която означава else: и последвалото if на следващия ред. Така получаваме по-четим код:
Note 1: Всички последващи elif оператори може да бъде ползвана по този начин.
Note 2: Тази част
не е задължителна и може да бъде отстранена ако не е необходима
Примери и задачи¶
Пример - индекс на телесна маса:
Индексът на телесна маса (съкратено bmi) се използва за бърза ориентация по отношение на степента на затлъстяване или загуба на тегло. Формулата за изчисляване на индекса на телесната маса е \(bmi = {m \over {h \times h}}\), където m е масата в килограми, а h е височината в метри. Стойностите на bmi се интерпретират, както следва:
до 18.5: недохранено лице
от 18,5 до 25: човек с нормално телесно тегло
от 25 до 30: наднормено тегло
над 30: човек със затлъстяване
Напишете програма, която взема теглото и ръста на човек и след това пише към коя категория принадлежи този човек (граничните стойности принадлежат към по-ниска категория).
Едно възможно решение е дадено по-долу. Помислете защо не е необходимо в това решение да се използват сложни логически условия (използвайки and, or, not) в решението.
Задача - възрастови категории на играчи:
- Младите баскетболисти се регистрират в началото на баскетболния сезон в една от възрастовите категории, според това колко години се обръщат през календарната година, в която започва сезона. Правилата за регистрация са следните:
10 и под - няма категория
11 или 12 години - по-млади пионери
13 или 14 години - пионери
15 или 16 - кадети
17 или 18 - юноши
19 години и по-големи - възрастни хора
Напишете програма, която взема възрастта на баскетболист през годината, в която се регистрира, и и изкарва категорията.
Задача - номер:
Напишете програма, която зарежда цяло число от 1 до 6 (включително граници) и извежда съответния номер с букви. Например, ако е зареден номер 6, трябва да се отпечата „шестият“ (без кавички).
Гнездово разклоняване (вложено разклоняване)¶
Вложени разклонения са if оператори внедрени в други, if оператори. Вложени if оператори могат да бъдат открити във всяко едно от разклоненията, или и в двете на голям if цикъл. По този начин оператора if може да достигне до всякаква дълбочина. Трябва обаче да се има предвид, че така програмите могат да бъдат трудно разбираеми и трудни за поддръжка.
В първия пример умишлено предоставяме програма с три нива на влагане, за да ви помогнем да си представите как би могла да изглежда по-сложна програма. В другите примери и задачи, ще се ограничим до едно ниво на вмъкване на if оператори.
Примери и задачи¶
Пример - познайте кой
В квартала има осем деца, които често са заедно. Техните имена са: Алис, Бен, Шарлот, Даниел, Емили, Франки, Габриела и Хари. Алис, Бен, Шарлът и Даниел ходят на урози по програмиране, а Алис, Бен, Емили и Франки на спорт. Училищният готваш иска да похвали едно от децата за някакво дело, но не знае името на това дете.
Напишете програма, която задава три въпроса, приема отговорите на тези въпроси (буквата „у“ за да и всеки друг отговор за „не“) и изписва името на въпросното дете. Въпросите, които програмата задава са:
Момиче ли е?
Ходи ли на спортната секция?
Ходи ли в секцията за програмиране?
Обърнете внимание, че програмите с вложени клонове могат да бъдат модифицирани така, че да използват само последователни условия и да се формират с elif, без да използваме if оператори многократно в дълбочина. Правейки това, ние използваме сложни условия, които изграждаме с помощта на логически операции and, or и not.
Задача - кръстопът:
Има пресечка на улици А и Б. Четните номера на къщи в улица А са отдясно, а нечетни - отляво. От четната (дясната) страна числата до кръстовището са от 2 до 200, а след пресечката са тези, по-големи от 200. От нечетна (лява) страна числата до пресечната точка са от 1 до 177, т.е. а след кръстовището те са тези от 179 г. нататък.
Напишете програма, която зарежда един домашен номер на улица А и отговаря дали този номер е преди или след пресечката и от коя страна на улица А е на. Например:
за номер 128 „от дясната страна, преди кръстовището“
за номер 284 „от дясната страна, след пресичането“
за номер 177 „отляво, преди кръстовището“
за номер 219 „отляво след кръстовището“
Съвет: След зареждането първо трябва да проверите дали n е четно, тоест дали n% 2 == 0. \(n \% 2 == 0\).
Задача - изучаване:
Родителите на Джон казали на Джон, че ако получи четворки или петици по математика и английски език, може да отиде на следобеден футболен турнир, в противен случай трябва да научи предмета или предметите, от които е получил оценка по-ниска от 4 (оценките са от 1 до 5).
Напишете програма, която първо зарежда курса по математика на Джон, а след това английски и отпечатва съобщение за Джон. Например:
за оценки 2, 3 изведи „научете математика и английски език“
за оценки 3, 4 изведи „научете математика“
за оценки 4,2 изведи „научете английски“
за оценки 5, 4 изведи „отидете на турнира“
Задача - обличане:
Иан пише програма, която чете текущата температура (в градуси по Целзий) и вероятността за дъжд (от 0 до 100) от уебсайта за метеорологични условия и въз основа на тази информация пише препоръка дали да носите яке (което има качулка) или чадър, или нито един от тези два. Иън избра това правило:
когато температурата е под 21, съветът трябва да бъде: “носете якето”
когато температурата е 21 или по-висока и вероятността за дъжд е над 50, препоръката е: „носете чадър“
когато температурата е 21 или по-висока и вероятността за дъжд е до 50, съветът трябва да бъде „можете да отидете в тениска“
Задачата за вас е да напишете програма, която първо зарежда температурата, след това вероятността за дъжд и след това препоръка.