|
| 1 | +# https://byjus.com/equivalent-resistance-formula/ |
| 2 | + |
| 3 | +from __future__ import annotations |
| 4 | + |
| 5 | + |
| 6 | +def resistor_parallel(resistors: list[float]) -> float: |
| 7 | + """ |
| 8 | + Req = 1/ (1/R1 + 1/R2 + ... + 1/Rn) |
| 9 | +
|
| 10 | + >>> resistor_parallel([3.21389, 2, 3]) |
| 11 | + 0.8737571620498019 |
| 12 | + >>> resistor_parallel([3.21389, 2, -3]) |
| 13 | + Traceback (most recent call last): |
| 14 | + ... |
| 15 | + ValueError: Resistor at index 2 has a negative or zero value! |
| 16 | + >>> resistor_parallel([3.21389, 2, 0.000]) |
| 17 | + Traceback (most recent call last): |
| 18 | + ... |
| 19 | + ValueError: Resistor at index 2 has a negative or zero value! |
| 20 | + """ |
| 21 | + |
| 22 | + first_sum = 0.00 |
| 23 | + index = 0 |
| 24 | + for resistor in resistors: |
| 25 | + if resistor <= 0: |
| 26 | + raise ValueError(f"Resistor at index {index} has a negative or zero value!") |
| 27 | + first_sum += 1 / float(resistor) |
| 28 | + index += 1 |
| 29 | + return 1 / first_sum |
| 30 | + |
| 31 | + |
| 32 | +def resistor_series(resistors: list[float]) -> float: |
| 33 | + """ |
| 34 | + Req = R1 + R2 + ... + Rn |
| 35 | +
|
| 36 | + Calculate the equivalent resistance for any number of resistors in parallel. |
| 37 | +
|
| 38 | + >>> resistor_series([3.21389, 2, 3]) |
| 39 | + 8.21389 |
| 40 | + >>> resistor_series([3.21389, 2, -3]) |
| 41 | + Traceback (most recent call last): |
| 42 | + ... |
| 43 | + ValueError: Resistor at index 2 has a negative value! |
| 44 | + """ |
| 45 | + sum_r = 0.00 |
| 46 | + index = 0 |
| 47 | + for resistor in resistors: |
| 48 | + sum_r += resistor |
| 49 | + if resistor < 0: |
| 50 | + raise ValueError(f"Resistor at index {index} has a negative value!") |
| 51 | + index += 1 |
| 52 | + return sum_r |
| 53 | + |
| 54 | + |
| 55 | +if __name__ == "__main__": |
| 56 | + import doctest |
| 57 | + |
| 58 | + doctest.testmod() |
0 commit comments