Skip to content

Commit

Permalink
Electric power (TheAlgorithms#3976)
Browse files Browse the repository at this point in the history
* Electric power

* updated as suggested by cclauss

* updated as suggested by cclauss

* decimal value error

* All done
  • Loading branch information
erdum authored Nov 29, 2020
1 parent 06dad4f commit daceb87
Showing 1 changed file with 49 additions and 0 deletions.
49 changes: 49 additions & 0 deletions electronics/electric_power.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# https://en.m.wikipedia.org/wiki/Electric_power
from collections import namedtuple


def electric_power(voltage: float, current: float, power: float) -> float:
"""
This function can calculate any one of the three (voltage, current, power),
fundamental value of electrical system.
examples are below:
>>> electric_power(voltage=0, current=2, power=5)
result(name='voltage', value=2.5)
>>> electric_power(voltage=2, current=2, power=0)
result(name='power', value=4.0)
>>> electric_power(voltage=-2, current=3, power=0)
result(name='power', value=6.0)
>>> electric_power(voltage=2, current=4, power=2)
Traceback (most recent call last):
File "<stdin>", line 15, in <module>
ValueError: Only one argument must be 0
>>> electric_power(voltage=0, current=0, power=2)
Traceback (most recent call last):
File "<stdin>", line 19, in <module>
ValueError: Only one argument must be 0
>>> electric_power(voltage=0, current=2, power=-4)
Traceback (most recent call last):
File "<stdin>", line 23, in <modulei
ValueError: Power cannot be negative in any electrical/electronics system
>>> electric_power(voltage=2.2, current=2.2, power=0)
result(name='power', value=4.84)
"""
result = namedtuple("result", "name value")
if (voltage, current, power).count(0) != 1:
raise ValueError("Only one argument must be 0")
elif power < 0:
raise ValueError(
"Power cannot be negative in any electrical/electronics system"
)
elif voltage == 0:
return result("voltage", power / current)
elif current == 0:
return result("current", power / voltage)
elif power == 0:
return result("power", float(round(abs(voltage * current), 2)))


if __name__ == "__main__":
import doctest

doctest.testmod()

0 comments on commit daceb87

Please sign in to comment.