<p>似乎你只需要把你的<code>for</code>包装成一个<code>while</code>循环,也许有一个任意的截止。你知道吗</p>
<p>此代码:</p>
<pre><code>for i in range(N):
# Dispersed Source
theta = np.random.uniform(0, np.pi, 1)
phi = np.random.uniform(0, 2 * np.pi, 1)
R = np.random.uniform(0, Ro, 1)
x = R * np.sin(theta) * np.cos(phi)
y = R * np.sin(theta) * np.sin(phi) # ?
z = R * np.cos(theta)
x_vec, y_vec, z_vec, nu = particle_func(x, y, z)
particle_trace = go.Scatter3d(
x=x_vec,
y=y_vec,
z=z_vec,
mode='lines'
)
data.append(particle_trace)
for j in range(int(nu)):
x = x_vec[-1]
y = y_vec[-1]
z = z_vec[-1]
x_vec_1, y_vec_1, z_vec_1, nu1 = particle_func(x, y, z)
particle_trace_fiss = go.Scatter3d(
x=x_vec_1,
y=y_vec_1,
z=z_vec_1,
mode='lines'
)
data.append(particle_trace_fiss)
</code></pre>
<p>变成以下代码:</p>
<pre><code>for i in range(N):
# Dispersed Source
theta = np.random.uniform(0, np.pi, 1)
phi = np.random.uniform(0, 2 * np.pi, 1)
R = np.random.uniform(0, Ro, 1)
x = R * np.sin(theta) * np.cos(phi)
y = R * np.sin(theta) * np.sin(phi) # ?
z = R * np.cos(theta)
arbitrary_limit = 10
x_vec = [x]
y_vec = [y]
z_vec = [z]
nu_vec = [1]
nu = nu_vec[-1] # Updated - keep a list of values of nu
while int(nu) != 0:
for j in range(int(nu)):
x = x_vec[-1]
y = y_vec[-1]
z = z_vec[-1]
x_vec, y_vec, z_vec, nu = particle_func(x, y, z)
nu_vec.append(nu)
particle_trace = go.Scatter3d(
x=x_vec,
y=y_vec,
z=z_vec,
mode='lines'
)
data.append(particle_trace)
</code></pre>
<p>我想问题是,你打算怎么决定什么时候停下来?有什么方法可以约束<code>nu</code>的值吗?你知道吗</p>
<p><strong>更新:</strong>根据您的评论,我删除了<code>arbitrary_limit</code>代码。我还添加了一个<code>nu_vec</code>来跟踪nu的所有值,根据您在另一个尝试性回答中的解释。你知道吗</p>