【发布时间】:2017-10-13 00:04:44
【问题描述】:
我有以下代码:
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)
问题是for循环需要继续这样下去:
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)
for k in range(int(nu1)):
x = x_vec_1[-1]
y = y_vec_1[-1]
z = z_vec_1[-1]
x_vec_2, y_vec_2, z_vec_2, nu2 = particle_func(x, y, z)
particle_trace_fiss = go.Scatter3d(
x=x_vec_2,
y=y_vec_2,
z=z_vec_2,
mode='lines'
)
data.append(particle_trace_fiss)
for l in range(int(nu2)):
x = x_vec_2[-1]
y = y_vec_2[-1]
z = z_vec_2[-1]
x_vec_3, y_vec_3, z_vec_3, nu3 = particle_func(x, y, z)
particle_trace_fiss = go.Scatter3d(
x=x_vec_3,
y=y_vec_3,
z=z_vec_3,
mode='lines'
)
data.append(particle_trace_fiss)
...
因为 nu 的值是一个随机数或零(由particle_func 函数给出),所以我需要的循环数可能会一直持续下去。也就是说,我可以复制/粘贴
for k in range(int(nu#)):...
data.append(particle_trace_fiss)
无限次并得到我正在寻找的东西(其中 nu# 表示前一个循环提供的 nu 的值。
抱歉,如果我的问题不清楚,我很乐意回复任何要求澄清的 cmets。提前感谢所有帮助,谢谢!
【问题讨论】:
-
我不太清楚你的意思。我不确定我是否遵循:“因为 nu 的值是一个随机数或零,这意味着循环数可能永远持续下去。”我不知道您是否尝试实现某种特定类型的行为,或者您是否遇到了一些您试图阻止的无限循环行为......
-
如果即将进行的编辑有帮助,请告诉我
-
我正在尝试实现某种特定类型的行为来回答您的问题
-
我也很困惑。如果这过于简单,我深表歉意,但这是否可以像“使用 while 循环而不是 for 循环,因为您只想在满足特定条件时结束”一样简单? wiki.python.org/moin/WhileLoop 还是简单的递归——每次调用particle_func,都有特定数量的东西要追加,但每次调用都要处理。
-
我会说后者
标签: python for-loop random while-loop infinite-loop