Python 通过重复循环步骤接受参数的特定值
如果不满足下面的Python 通过重复循环步骤接受参数的特定值,python,while-loop,Python,While Loop,如果不满足下面的条件,Python会重复该步骤的计算吗?我们无法删除包含负值om的输出。我们必须用不同的随机数重复这一步,这导致了负值N是1000,我们必须有1000个输出 条件:如果每个步骤的mo[i]0 #initial values mo = np.zeros((1000,)) mo[0]=0.24 mn = np.zeros((1000,)) Wo = np.zeros((1000,)) Wo[0]=0.2 Wn = np.zeros((1000,)) def F( x, y):
条件
,Python会重复该步骤的计算吗?我们无法删除包含负值om
的输出。我们必须用不同的随机数重复这一步,这导致了负值<代码>N是1000,我们必须有1000个输出
条件:如果每个步骤的mo[i]0
#initial values
mo = np.zeros((1000,))
mo[0]=0.24
mn = np.zeros((1000,))
Wo = np.zeros((1000,))
Wo[0]=0.2
Wn = np.zeros((1000,))
def F( x, y):
return....
N=1001
for i in range (1,N):
R=np.random.uniform(0,1)
mn[i] = mo[i-1] + 0.05 * np.random.normal()
Wn[i] = Wo[i-1] + 0.05 * np.random.normal()
L = exp(-0.5 * ( F(mn[i], Wn[i] ) - F( mo[i-1], Wo[i-1])))
if L>R:
Wo[i]=Wn[i]
mo[i]=mn[i]
else:
Wo[i]=Wo[i-1]
mo[i]=mo[i-1]
print(Wo[i],mo[i])
这个问题在下面的部分中,使用带break语句的while循环
for i in range(1,N):
while True:
mo[i] = get_mo_i()
if mo[i] > 0:
break
其中get\u mo\u i()
应替换为当前循环中的所有内容。我只是不想把它全部打印出来
如果担心代码没有结束,可以设置循环重复频率的限制
for i in range(1,N):
num = 0
while True:
num += 1
mo[i] = get_mo_i()
if mo[i] > 0 or num > 10:
break
只有在连续获得负值10次时,上面的一个才会使mo[i]
保持负值。这表明您可能对初始条件有问题,或者仅仅是mo[i-1]
的值不太可能产生正mo[i]
是否可以更改num>10
的值?例如:>100
。这个值的变化会影响输出吗?当然,10只是我使用的一个任意数字。也就是说,看看代码,如果mo[i-1]为0,而L10为0,则由于随机概率,循环失败的概率约为1/1024。设置num>30,大约为十亿分之一。如果mo[i]在这一点上是负数,那么很可能代码中的其他地方有错误。所以不要设定得太高。如果有一个关键的bugAh,它只会使代码的这一部分运行得更长,所以无论我们选择5还是15都没有关系。一般来说,它保持我们的价值为负。此外,我们还可以添加一些其他条件。如果mo[i]>0和Wo[i]10:
编写它是否正确?这很好,不过我建议添加括号以便更清晰地阅读<代码>例如,如果(mo[i]>0和Wo[i]<0)或num>10:
将帮助其他人阅读您的代码。谢谢您,我知道虽然
但如果您的答案中没有num
,我的示例将无法使用。再加上它,一切都很好。