抱歉,我是编程新手,现在遇到了一个简单的嵌套循环问题。
我正在尝试编写一个非常简单的中子通过平板在一维中传播的模型。这个想法是我从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条件,并继续检查中子的位置。显然,这不是在这里发生。怎么做呢?
您将需要一个循环来实现它
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句