Это было бы самое логичное, только вот компьютер не может ничего делать одновременно. Он всегда работает последовательно, хотя и очень быстро. А это - сам видишь - вовсе не одно и то же. Думаю, лучше всего - составить список токов во всех парах, а потом их вычесть и прибавить где нужно.
Так ячейки друг на друга повлиять не должны - ведь обмен электричеством произойдет уже после завершения последней step().
Осуществим эту идею. В массиве I условимся под номером a хранить ток, идущий из a в a+1 (тот же трюк, что мы проелали с сопротивлением). Если ток будет отрицательным, значит он пойдет в обратную сторону (ϕ[a+1] будет уменьшаться, а ϕ[a] - увеличиваться).
def step(a): Δϕ = ϕ[a]-ϕ[a+1] #Считаем разность потенциалов между клетками a и a+1 I[a]=Δϕ/ρ[a] #Найдем силу тока I(a)
def tick(): battery() #Батарея задает потенциалы на концах for a in range(99): #Для каждой клетки step(a) #Рассчитываем обмен потенциалами клетки a (со следующей) for a in range(99): #Для каждой клетки ϕ[a]-=I[a] #Потенциал утекает из клетки a ϕ[a+1]+=I[a] #Потенциал притекает в клетку a+1 print(ϕ) #Печататем состояние проводника
Потенциалы распространются симметрично. Что ж, настало время, запустить цикл и посмотреть, что случится в конце концов.
Только вот print(ϕ) в tick() будет мешать - заполонит весь экран. Перепределим эту функцию без print(ϕ)
def tick(): battery() #Батарея задает потенциалы на концах for a in range(99): #Для каждой клетки step(a) #Рассчитываем обмен потенциалами клетки a (со следующей) for a in range(99): #Для каждой клетки ϕ[a]-=I[a] #Потенциал утекает из клетки a ϕ[a+1]+=I[a] #Потенциал притекает в клетку a+1