给出一个串联和/或并联的固定电阻的电路,计算该电路的总有效电阻。
所有的电阻都以Ω为单位,结果也应以Ω为单位(作为浮动值;测试为±1e-6)。假设电线的电阻可以忽略不计。电池的电压是不相关的。
该电路以下列形式传递给你的函数。
我将把一个元件定义为任何数量的串联或并联的电阻。
整个电路都算作一个元件。
每个元件都是一个数组。
一个串联的元件将在零位上有一个布尔值 "true"。
一个并联的元件在零位上有一个布尔值false。
其他的位置将包含。
数字,表示该电阻的固定电阻。
数组,表示嵌套元件。
一个没有其他条目的串联电路代表一条单线。
True, # series
20, # 20Ω resistor
[
False, # parallel
翻译过来
真实,#串联
20, # 20Ω 电阻器
[
错,#并联
一个没有其他条目的并联电路代表电路中的一个断点(更多细节见下文)。
所有的电路都将是有效的,并以上述形式出现(但可能出现短路或断路)。
将不会出现负的电阻
电路示例:
[
真,#串联
20, # 20Ω的电阻
[
错,#并联
[
真,#串联
30, # 30Ω 电阻器
40,# 40Ω电阻
],
30 # 30Ω 电阻器
],
60 # 60Ω 电阻器
]
上述电路看起来是这样:
计算电阻:
20 + 1/(1/(30+40)+1/30) + 60 = 101Ω
短路
可能出现的情况是,电路的电阻为零。
我们不希望有零电阻,因为这会导致短路
如果发生这种情况,你应该抛出一个错误,而不是返回,并给出错误信息:短路!。
断裂的电路
可能会出现这样的情况:电路中的所有路径都有一个断点。
这就产生了无限的电阻,实际上就是一个断路!你应该抛出一个错误而不是返回。
如果发生这种情况,你应该抛出一个错误,而不是返回,错误信息是Broken Circuit!
电路示例。
def rec(circuit):
if not isinstance(circuit, list):
return circuit
test, *circuit = circuit
if not circuit:
return not test and float('inf')
func = test and series or parall
return func(sum(func(rec(x)) for x in circuit))
def calculate_resistance(circuit):
result = rec(circuit)
if result == 0:
raise Exception("Short Circuit!")
if result == float('inf'):
raise Exception("Broken Circuit!")
return result
本文由mdnice多平台发布