У Python інструкції if, elif (скорочення від «else and if») та else використовуються, щоб керувати потоком виконання і ухвалювати рішення в програмі.
На відміну від багатьох інших мов програмування, у версіях Python 3.9 і нижче немає формальної конструкції перемикання: замість неї для схожої мети використовуються кілька інструкцій elif.
Python 3.10 запроваджує різновид конструкції перемикання під назвою structural pattern matching, який ми розглянемо окремо в іншій концепції.
Умовні конструкції використовують вирази, які мають зводитися до True або False: або повертаючи тип bool напряму, або обчислюючись як «truthy» або «falsy».
x = 10
y = 5
# The comparison '>' returns the bool 'True',
# so the statement is printed.
if x > y:
print("x is greater than y")
...
>>> x is greater than y
У парі з if необовʼязковий блок коду else виконається тоді, коли початкова умова if обчислиться як False:
x = 5
y = 10
# The comparison '>' here returns the bool 'False',
# so the 'else' block is executed instead of the 'if' block.
if x > y:
print("x is greater than y")
else:
print("y is greater than x")
...
>>> y is greater than x
elif дає змогу виконувати кілька перевірок і мати кілька гілок.
x = 5
y = 10
z = 20
# The 'elif' statement allows for the checking of more conditions.
if x > y:
print("x is greater than y and z")
elif y > z:
print("y is greater than x and z")
else:
print("z is greater than x and y")
...
>>> z is greater than x and y
Булеві операції (англ. Boolean) та порівняння можна поєднувати з умовними конструкціями для складніших перевірок:
>>> def classic_fizzbuzz(number):
if number % 3 == 0 and number % 5 == 0:
say = 'FizzBuzz!'
elif number % 5 == 0:
say = 'Buzz!'
elif number % 3 == 0:
say = 'Fizz!'
else:
say = str(number)
return say
>>> classic_fizzbuzz(15)
'FizzBuzz!'
>>> classic_fizzbuzz(13)
'13'
У цій вправі ми розробимо просту систему керування для ядерного реактора.
Щоб реактор виробляв енергію, він має перебувати в стані критичності. Якщо реактор перебуває в стані, нижчому за критичність, він може зазнати пошкоджень. Якщо стан реактора перевищує критичність, він може перевантажитися, що призведе до розплавлення. Ми хочемо зменшити ймовірність розплавлення та правильно керувати станом реактора.
Наступні три завдання стосуються написання коду для підтримання ідеального стану реактора.
Перше, що має зробити система керування, це перевірити, чи реактор збалансований за критичністю. Кажуть, що реактор збалансований за критичністю, якщо він задовольняє такі умови:
Реалізуйте функцію is_criticality_balanced(), яка приймає temperature, виміряну в кельвінах, і neutrons_emitted як параметри, та повертає True, якщо умови критичності виконано, і False, якщо ні.
>>> is_criticality_balanced(750, 600)
True
Щойно реактор почав виробляти енергію, потрібно визначити його ефективність. Ефективність можна поділити на 4 діапазони:
green -> ефективність 80% або більше,orange -> ефективність менша за 80%, але не менша за 60%,red -> ефективність нижча за 60%, але все ще 30% або більше,black -> ефективність менша за 30%.Відсоткове значення можна обчислити як (generated_power/theoretical_max_power)*100,
де generated_power = voltage * current.
Зауважте, що відсоткове значення зазвичай не є цілим числом, тож подбайте про
правильне використання порівнянь < і <=.
Реалізуйте функцію reactor_efficiency(<voltage>, <current>, <theoretical_max_power>) із трьома параметрами: voltage,
current і theoretical_max_power.
Ця функція має повертати діапазон ефективності реактора: 'green', 'orange', 'red' або 'black'.
>>> reactor_efficiency(200,50,15000)
'orange'
Останнє завдання - створити механізм відмовостійкості, щоб уникнути перевантаження та розплавлення. Цей механізм визначатиме, чи реактор перебуває нижче, на рівні або вище ідеального порогу критичності. Потім критичність можна підвищити, знизити або зупинити, вставляючи (або виймаючи) керувальні стрижні в реактор.
Реалізуйте функцію fail_safe(), яка приймає 3 параметри: temperature, виміряну в кельвінах,
neutrons_produced_per_second і threshold, та видає код стану реактора.
Якщо temperature * neutrons_produced_per_second < 90% від threshold, видайте код стану 'LOW',
який означає, що для виробництва енергії потрібно вийняти керувальні стрижні.
Якщо значення temperature * neutrons_produced_per_second відрізняється від threshold не більше ніж на 10% (тобто на 0-10% менше за поріг, дорівнює порогу або на 0-10% більше за поріг), реактор перебуває в стані критичності, і слід видати код стану 'NORMAL', який означає, що реактор перебуває в оптимальному стані, а керувальні стрижні перебувають в ідеальному положенні.
Якщо temperature * neutrons_produced_per_second не потрапляє в наведені вище діапазони, реактор
прямує до розплавлення, і потрібно передати код стану 'DANGER', щоб негайно заглушити реактор.
>>> fail_safe(temperature=1000, neutrons_produced_per_second=30, threshold=5000)
'DANGER'
Зареєструйтеся на Exercism, щоб вивчати й опановувати Python, а також 17 концепцій146 вправ та справжнє наставництво від людей, і все це безкоштовно.