计算该电路的总有效电阻

给出一个串联和/或并联的固定电阻的电路,计算该电路的总有效电阻。

所有的电阻都以Ω为单位,结果也应以Ω为单位(作为浮动值;测试为±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多平台发布

你可能感兴趣的:(计算该电路的总有效电阻)