Треки
/
Python
Python
/
Вправи
/
Рахунок за електрику
Рахунок за електрику

Рахунок за електрику

Навчальна вправа

Вступ

Python має три різні типи вбудованих чисел: цілі числа (int), числа з плаваючою комою (float) та комплексні числа (complex). Дроби (fractions.Fraction) і десяткові числа (decimal.Decimal) також доступні через імпорт зі стандартної бібліотеки.

Цілі числа, зокрема шістнадцяткові (hex()), вісімкові (oct()) та двійкові (bin()) числа без десяткових знаків, також належать до типу ints:

# Ints are whole numbers.
>>> 1234
1234
>>> type(1234)
<class 'int'>

>>> -12
-12

Числа, що містять десяткову точку (з дробовою частиною або без неї), належать до типу floats:

>>> 3.45
3.45
>>> type(3.45)
<class 'float'>

Арифметика

Python повністю підтримує арифметичні операції між цими різними типами чисел і перетворює вужчі числа, щоб узгодити їх із ширшими, коли застосовуються бінарні арифметичні оператори (+, -, *, /, // та %).

Додавання та віднімання

Оператори додавання та віднімання поводяться так само, як у звичайній математиці. Якщо один або кілька операндів є float, решту int також буде перетворено на float:

>>> 5 - 3
2
# The int is widened to a float here, and a float is returned.
>>> 3 + 4.0
7.0

Множення

Як і у випадку з додаванням і відніманням, множення перетворює вужчі числа, щоб узгодити їх із ширшими:

>>> 3 * 2
6

>>> 3 * 2.0
6.0

Ділення

Ділення завжди повертає float, навіть якщо результат є цілим числом:

>>> 6/5
1.2

>>> 6/2
3.0

Цілочисельне ділення

Якщо потрібен результат типу int, можна скористатися цілочисельним діленням, щоб відкинути дробову частину. Цілочисельне ділення виконується за допомогою оператора //:

>>> 6//5
1

>>> 6//2
3

Остача

Оператор остачі (%) повертає остачу від ділення двох операндів:

# The result of % is zero here, because dividing 8 by 2 leaves no remainder
>>> 8 % 2
0

# The result of % is 2 here, because 3 only goes into 5 once, with 2 leftover
>>> 5 % 3
2

Інший погляд на 5 % 3:

>>> whole_part = int(5/3)
1

>>> decimal_part = 5/3 - whole_part
0.6666666666666667

>>> whole_remainder = decimal_part * 3
2.0

Округлення

Python надає вбудовану функцію round(number, <decimal_places>), щоб округлити число з плаваючою комою до заданої кількості десяткових знаків. Якщо кількість десяткових знаків не вказано, число округлюється до найближчого цілого й повертає int:

>>> round(3.1415926535, 2)
3.14

>>> round(3.1415926535)
3

Пріоритет і дужки

Python дозволяє використовувати круглі дужки, щоб групувати вирази. Це корисно, коли потрібно змінити типовий порядок виконання операцій.

>>> 2 + 3 * 4
14

>>> (2 + 3) * 4
20

Python дотримується правила PEMDAS щодо пріоритету операторів. Це означає, що обчислення всередині () мають найвищий пріоритет, далі йдуть **, потім *, /, //, %, + та -:

>>> 2 + 3 - 4 * 4
-11

>>> (2 + 3 - 4) * 4
4

# In the following example, the `**` operator has the highest priority, then `*`, then `+`
# Meaning we first do 4 ** 4, then 3 * 64, then 2 + 192
>>> 2 + 3 * 4 ** 4
770

Точність і подання

Цілі числа в Python мають довільну точність: кількість цифр обмежується лише доступною памʼяттю системи, на якій виконується код.

Числа з плаваючою комою зазвичай реалізовано через double у C (15 десяткових знаків точності), але їхнє подання може відрізнятися залежно від системи. Комплексні числа мають частини real та imaginary, кожна з яких подана числом з плаваючою комою.

Щоб докладніше дізнатися про проблеми й обмеження арифметики з плаваючою комою в різних мовах програмування, варто заглянути на 0.30000000000000004.com та в The Python Tutorial.

Вказівки

Компанія, у якій ми працюємо, хоче зменшити свій вуглецевий слід, тож хоче, щоб ми написали програму для обчислення споживання електроенергії та вартості роботи їхніх електроприладів.

1. Отримати додаткові години

У роботодавця є програма, яка обчислює час роботи різних електроприладів. Наразі час зберігається в годинах. Коли роботодавець додав години, він помітив, що тривалість часу неправильна. Він хоче, щоб ми додали 3 додаткові години до даних про час. Він також хотів би знати, скільки «додаткових» годин залишиться після переведення даних у «повні» дні (у добі 24 години). Час, який потрібно перевести, може не становити повних днів.

Реалізуйте функцію get_extra_hours(), яка приймає ціле число, у якому зберігається кількість годин. Функція повинна виконати відповідне коригування «додаткових годин», а потім повернути (return) ціле число, яке показує, скільки годин потрібно відняти від загальної кількості, щоб отримати час у «повних» днях.

>>> get_extra_hours(25)
4

2. Отримати значення в кВт

Роботодавець хоче знати споживання електроенергії різних електроприладів у кВт. кВт означає кіловат, а вати - це одиниця потужності. Кіло в назві одиниці - це префікс метричної системи, що означає 1000. Один кіловат == 1000 ват.

Реалізуйте функцію get_kW_value(), яка приймає ціле число, у якому зберігається кількість ват. Тоді функція повинна повернути (return) вати як кіловати, округлені до 1 знака після коми.

>>> get_kW_value(1150)
1.2

3. Отримати значення в кВт·год

Щоб обчислити вартість роботи електроприладів, роботодавцю потрібно знати споживання електроенергії в кВт·год. кВт·год означає кіловат-годину, де година - це одиниця часу. Одна кіловат-година == 1000 ват, використаних за 1 годину. Година складається з 60 хвилин, а хвилина - з 60 секунд. Одна година дорівнює 3600 секундам. Щоб обчислити значення в кВт·год, потрібно перевести вати в кВт, а потім націло поділити результат на 3600.

Реалізуйте функцію get_kWh_value(), яка приймає ціле число, у якому зберігається кількість ват. Тоді функція повинна повернути (return) кіловат-години як ціле число.

>>> get_kWh_value(5000000)
1

4. Отримати ефективність

Електроприлади не мають 100% ефективності. Тому роботодавець хоче, щоб ми обчислили ефективність електроприладів. Щоб отримати ефективність, потрібно поділити коефіцієнт потужності (число з плаваючою комою від 0 до 100) на 100.

Реалізуйте функцію get_efficiency(), яка приймає число з плаваючою комою — коефіцієнт потужності. Тоді функція повинна повернути (return) обчислену ефективність як число з плаваючою комою.

>>> get_efficiency(80)
0.8

5. Отримати вартість

Роботодавець хоче знати вартість роботи електроприладів. Вартість роботи електроприладів - це використана потужність, помножена на вартість однієї кВт·год. Використана потужність - це задана потужність, поділена на обчислену ефективність.

Реалізуйте функцію get_cost(<watts>,<power_factor>,<price>), яка приймає ціле число з кількістю ват, число з плаваючою комою — коефіцієнт потужності, і число з плаваючою комою — вартість однієї кВт·год. Тоді функція повинна повернути (return) вартість роботи електроприладів як число з плаваючою комою.

>>> get_cost(5000000, 80, 0.25)
0.3125
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Python Exercism

Час розпочати Рахунок за електрику?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Python, а також 17 концепцій146 вправ та справжнє наставництво від людей, і все це безкоштовно.