为什么内部“for循环”在代码中不起作用?

2024-09-28 22:29:43 发布

您现在位置:Python中文网/ 问答频道 /正文

在下面的代码中,我在彼此中使用了两个for循环,但是内部的for循环不起作用,代码转到下一行并检查ifelse

代码怎么了

for kk in range(1,10):
    # ---- set initial conditions (random)
    decisionE.gen = decisionE.gen * (1 + 0.2 * rand(decisionE.__len__()))
    decisionI.gen = decisionI.gen * (1 + 0.2 * rand(decisionI.__len__()))
    decisionE.V = decisionE.V + rand(decisionE.__len__()) * 2 * mV
    decisionI.V = decisionI.V + rand(decisionI.__len__()) * 2 * mV

    # ---- set initial conditions (random)
    sensoryE.V = -50.0 * mV - 2 * mV + rand(sensoryE.__len__()) * 2 * mV
    sensoryI.V = -50.0 * mV - 2 * mV + rand(sensoryI.__len__()) * 2 * mV
    sensoryE.gea = 0.05 * (1 + rand(sensoryE.__len__()) * 0.2)
    sensoryI.gea = 0.05 * (1 + rand(sensoryI.__len__()) * 0.2)

    # record spikes of excitatory neurons
    S_DE1 = SpikeMonitor(decisionE1, record=True)
    S_DE2 = SpikeMonitor(decisionE2, record=True)
    S_SE1 = SpikeMonitor(sensoryE1, record=True)
    S_SE2 = SpikeMonitor(sensoryE2, record=True)

    # record instantaneous populations activity
    R_DE1 = PopulationRateMonitor(decisionE1, bin=20 * ms)
    R_DE2 = PopulationRateMonitor(decisionE2, bin=20 * ms)
    R_SE1 = PopulationRateMonitor(sensoryE1, bin=20 * ms)
    R_SE2 = PopulationRateMonitor(sensoryE2, bin=20 * ms)

    print kk 

    # ------------------------------------------------------------------------------
    # Run the simulation
    # ------------------------------------------------------------------------------

    # construct network
    net = Network(Dgroups.values(), Sgroups.values(), Dconnections.values(), Sconnections.values(),
                  Dnetfunctions, update_input, C_SE1_DE1, C_SE2_DE2, C_DE1_SE1, C_DE2_SE2,
                  S_DE1, S_DE2, S_SE1, S_SE2, R_DE1, R_DE2, R_SE1, R_SE2)
    net.prepare()
    net.run(runtime)

    ck_=int(runtime/20)-1

    for ii in range(1,ck_):
       if (R_DE1.rate[ii]>=15):
          break

    for jj in range(1,ck_):
       if (R_DE2.rate[jj]>=15):
          break


    if (jj>=ii):
      print R_DE1.rate[ii]
      print ("A fired at ")
      print R_DE1.times[ii]
    else:
      print R_DE2.rate[jj]
      print("B fired at ")
      print R_DE2.times[jj]

Tags: forlenifrecordiiprintmvrand
1条回答
网友
1楼 · 发布于 2024-09-28 22:29:43

正如@khelwood在评论中所说的,这似乎是关于break语句的问题

for ii in range(1,ck_):
       if (R_DE1.rate[ii]>=15):
          break

for jj in range(1,ck_):
       if (R_DE2.rate[jj]>=15):
          break

语句R_DE2.rate[ii]>=15R_DE2.rate[jj]>=15的频率是多少?它们会阻止这些循环工作(假设您指的是这两个循环)。如果语句为true,则触发break语句,然后跳出循环并转到下一个语句Check out what ^{} does.

我建议将break语句替换为那些循环中您想做的事情(这两个内部循环目前不做任何事情)

相关问题 更多 >