11.3. Конструкција if-elif-else¶
Долазимо до гранања где се појављује више од две гране. Ситуација код
оваквих примера није више да ли је услов испуњен или није, него имамо више опција.
Овакве ситуације се решавају употребом if-elif-else
програмске конструкције.
Погледајмо следећи задатак.
Агрегатно стање воде¶

Напиши програм који за дату температуру воде (у степеним Целзијуса) одређује њено агрегатно стање (сматраћемо да је вода у чврстом стању ако јој је температура строго мања од 0, да је у течном ако јој је температура између 0 и 100 степени, укључујући и те границе, и да је у гасовитом стању ако јој је температура строго већа од 100 степени).
Приметимо да програм има нови задатак, ситуација није више или једно или друго. Имамо три могућности сада, или је чврсто или течно или гасовито.
На први поглед може нам се појавити следећа идеја:
На основу услова задатка може се формирати програм у којем се помоћу три провере услова независно проверава припадност температуре једном од три интервала \((-\infty , 0]\), \((0, 100)\) и \([100, \infty)\).
Иако ово решење ради, пример је како не треба решавати овакве
задатке. Због узастопних провера свих if
услова (које се може избећи) ово решење
је неефикасно (траје дуже и непотребно задаје процесору задатке).
То би нарочито дошло до изражаја да имамо велики број if
провера.
Ефикасно решење може креирати ако размишљамо на следећи начин (тако да логички услови буду међусобно зависни):
ако температура мања од \(0^{\circ}\,C\) - агрегатно стање је чврсто;
у противном (температура је већа или једнака \(0^{\circ}\,C\)): ако је температура мања или једнака \(100^{\circ}\,C\) (припада другом интервалу) - агрегатно стање je течно;
у противном (температура је већа \(100^{\circ}\,C\)) агрегатно стање је гасовито.
Такво постпуно проверавање услова се остварује помоћу конструкције
if-elif-else
и треба га увек користити.
У општем случају, општи облик ове конструкције је следећи:
Прва група наредби се извршава ако је први услов испуњен, друга ако први није испуњен а други јесте, трећа ако прва два услова нису испуњена, а трећи јесте и тако даље, све до последње групе наредби која се извршава ако ниједан од наведених услова није испуњен. Видећеш да се увек извршава тачно један блок наредби а затим више нема провера услова и програм одмах излази из конструкције.
Суштина задатка била је у томе да се одреди којем од
неколико надовезаних интервала припада дата вредност (то су били
интервали \((-\infty, 0)\), \([0, 100]\) и \((100,
+\infty)\)). Задаци тог облика су чести и решавају се конструкцијом
if-elif-else
како смо то овде описали.
Погледај наредни пример у коме задатак има четири могућности.
Успех ученика¶

Напиши програм који у зависности од просека исписује успех ученика на крају године. Претпоставићемо да је ученик успешно прешао разред (нема недовољних оцена) односно да његов успех може бити одличан, врло добар, добар или довољан.