TheAlgorithms-Python
57 строк · 1.8 Кб
1# https://en.m.wikipedia.org/wiki/Electric_power
2from __future__ import annotations3
4from typing import NamedTuple5
6
7class Result(NamedTuple):8name: str9value: float10
11
12def electric_power(voltage: float, current: float, power: float) -> tuple:13"""14This function can calculate any one of the three (voltage, current, power),
15fundamental value of electrical system.
16examples are below:
17>>> electric_power(voltage=0, current=2, power=5)
18Result(name='voltage', value=2.5)
19>>> electric_power(voltage=2, current=2, power=0)
20Result(name='power', value=4.0)
21>>> electric_power(voltage=-2, current=3, power=0)
22Result(name='power', value=6.0)
23>>> electric_power(voltage=2, current=4, power=2)
24Traceback (most recent call last):
25...
26ValueError: Only one argument must be 0
27>>> electric_power(voltage=0, current=0, power=2)
28Traceback (most recent call last):
29...
30ValueError: Only one argument must be 0
31>>> electric_power(voltage=0, current=2, power=-4)
32Traceback (most recent call last):
33...
34ValueError: Power cannot be negative in any electrical/electronics system
35>>> electric_power(voltage=2.2, current=2.2, power=0)
36Result(name='power', value=4.84)
37"""
38if (voltage, current, power).count(0) != 1:39raise ValueError("Only one argument must be 0")40elif power < 0:41raise ValueError(42"Power cannot be negative in any electrical/electronics system"43)44elif voltage == 0:45return Result("voltage", power / current)46elif current == 0:47return Result("current", power / voltage)48elif power == 0:49return Result("power", float(round(abs(voltage * current), 2)))50else:51raise ValueError("Exactly one argument must be 0")52
53
54if __name__ == "__main__":55import doctest56
57doctest.testmod()58