TheAlgorithms-Python

Форк
0
/
electric_power.py 
57 строк · 1.8 Кб
1
# https://en.m.wikipedia.org/wiki/Electric_power
2
from __future__ import annotations
3

4
from typing import NamedTuple
5

6

7
class Result(NamedTuple):
8
    name: str
9
    value: float
10

11

12
def electric_power(voltage: float, current: float, power: float) -> tuple:
13
    """
14
    This function can calculate any one of the three (voltage, current, power),
15
    fundamental value of electrical system.
16
    examples are below:
17
    >>> electric_power(voltage=0, current=2, power=5)
18
    Result(name='voltage', value=2.5)
19
    >>> electric_power(voltage=2, current=2, power=0)
20
    Result(name='power', value=4.0)
21
    >>> electric_power(voltage=-2, current=3, power=0)
22
    Result(name='power', value=6.0)
23
    >>> electric_power(voltage=2, current=4, power=2)
24
    Traceback (most recent call last):
25
        ...
26
    ValueError: Only one argument must be 0
27
    >>> electric_power(voltage=0, current=0, power=2)
28
    Traceback (most recent call last):
29
        ...
30
    ValueError: Only one argument must be 0
31
    >>> electric_power(voltage=0, current=2, power=-4)
32
    Traceback (most recent call last):
33
        ...
34
    ValueError: Power cannot be negative in any electrical/electronics system
35
    >>> electric_power(voltage=2.2, current=2.2, power=0)
36
    Result(name='power', value=4.84)
37
    """
38
    if (voltage, current, power).count(0) != 1:
39
        raise ValueError("Only one argument must be 0")
40
    elif power < 0:
41
        raise ValueError(
42
            "Power cannot be negative in any electrical/electronics system"
43
        )
44
    elif voltage == 0:
45
        return Result("voltage", power / current)
46
    elif current == 0:
47
        return Result("current", power / voltage)
48
    elif power == 0:
49
        return Result("power", float(round(abs(voltage * current), 2)))
50
    else:
51
        raise ValueError("Exactly one argument must be 0")
52

53

54
if __name__ == "__main__":
55
    import doctest
56

57
    doctest.testmod()
58

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.