給出一個串聯(lián)和/或并聯(lián)的固定電阻的電路,計算該電路的總有效電阻。
所有的電阻都以Ω為單位称杨,結(jié)果也應(yīng)以Ω為單位(作為浮動值;測試為±1e-6)筷转。假設(shè)電線的電阻可以忽略不計姑原。電池的電壓是不相關(guān)的。
該電路以下列形式傳遞給你的函數(shù)呜舒。
我將把一個元件定義為任何數(shù)量的串聯(lián)或并聯(lián)的電阻锭汛。
整個電路都算作一個元件。
每個元件都是一個數(shù)組袭蝗。
一個串聯(lián)的元件將在零位上有一個布爾值 "true"唤殴。
一個并聯(lián)的元件在零位上有一個布爾值false。
其他的位置將包含到腥。
數(shù)字朵逝,表示該電阻的固定電阻。
數(shù)組乡范,表示嵌套元件配名。
一個沒有其他條目的串聯(lián)電路代表一條單線。
True, # series
20, # 20Ω resistor
[
False, # parallel
翻譯過來
真實篓足,#串聯(lián)
20, # 20Ω 電阻器
[
錯,#并聯(lián)
一個沒有其他條目的并聯(lián)電路代表電路中的一個斷點(更多細(xì)節(jié)見下文)闰蚕。
所有的電路都將是有效的栈拖,并以上述形式出現(xiàn)(但可能出現(xiàn)短路或斷路)。
將不會出現(xiàn)負(fù)的電阻
電路示例:
[
真没陡,#串聯(lián)
20, # 20Ω的電阻
[
錯涩哟,#并聯(lián)
[
真索赏,#串聯(lián)
30, # 30Ω 電阻器
40,# 40Ω電阻
],
30 # 30Ω 電阻器
],
60 # 60Ω 電阻器
]
上述電路看起來是這樣:
計算電阻:
20 + 1/(1/(30+40)+1/30) + 60 = 101Ω
短路
可能出現(xiàn)的情況是贴彼,電路的電阻為零潜腻。
我們不希望有零電阻,因為這會導(dǎo)致短路
如果發(fā)生這種情況器仗,你應(yīng)該拋出一個錯誤融涣,而不是返回,并給出錯誤信息:短路精钮!威鹿。
斷裂的電路
可能會出現(xiàn)這樣的情況:電路中的所有路徑都有一個斷點。
這就產(chǎn)生了無限的電阻轨香,實際上就是一個斷路忽你!你應(yīng)該拋出一個錯誤而不是返回。
如果發(fā)生這種情況臂容,你應(yīng)該拋出一個錯誤科雳,而不是返回,錯誤信息是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多平臺發(fā)布