抱歉,我是一名编程新手,现在遇到了一个简单的嵌套循环问题。
我正在尝试通过平板编写一个非常简单的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条件并继续检查中子的位置。显然这不会发生在这里。这样做的方法是什么?
答案 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