在循环python中循环中断

时间:2016-07-12 12:59:11

标签: python-2.7 loops

抱歉,我是一名编程新手,现在遇到了一个简单的嵌套循环问题。

我正在尝试通过平板编写一个非常简单的1D中子传播模型。这个想法是我从x0 = 0开始并将中子向前移动一个随机距离,检查它是否被吸收,如果没有被吸收它再移动一个随机距离我这样做直到移动距离xd = 10.最后中子向xd右侧或xd左侧移动或被吸收。为此我在循环问题中得到了一个简单的循环。我相信它有一个简单的解决方案,因为我不太喜欢编程。以下是我到目前为止在python 2.7中编写的代码。

    import random
    N = 100 # number of neutrons
    Nt= 0   # number of neutrons transmitted
    Na = 0  # number of neutrons absorbed
    Nr = 0 # number of neutrons reflected

    x0 = 0 
    xd = 10
    x = x0 #start position

    j = 1
    while j<= N #loop starts
        x+ = random.uniform(-1,1)
         if x > xd:
            Nt+ = 1
         elif x < x0:
            Nr+ = 1 
         else:
            gamma = random.uniform(0,1)
            if gamma <0.5:
            Na+ = 1
            else:
                continue # it should loop back and calculate x+=random.uniform(-1,1)
      x = x0
      j+= 1
    print Nr, Na, Nt

在最后的else语句之后,它必须循​​环回到第一个if条件并继续检查中子的位置。显然这不会发生在这里。这样做的方法是什么?

1 个答案:

答案 0 :(得分:0)

你需要一个循环来实现它

import random
x0 = 0
xd = 10
x = x0 # start position

# simulates a single neutron, add an outer loop for N number of neutrons
while 1: #loops forever until explicit breaks
     x+ = random.uniform(-1,1) # move
     if x > xd:
        print 'neutron has transmitted'
        break # get out of loop
     if x < x0:
        print 'neutron has reflected'
        break # get out of loop

     if random.uniform(0,1) <0.5:
        print 'neutron has absorbed'
        break # get out of loop
     # at this point the loop repeats from the start