虽然循环不能满足参数值的构造条件



我想重复计算步骤,直到值在定义的范围内,例如0.20.29。 当此代码运行时,我们看到该值超过0.29,在某些情况下,我们有0.01甚至-0.1这是负数。我该如何解决这个问题?

import numpy as np
from math import *
import warnings
warnings.filterwarnings("ignore")
N=1000
Omo  = np.zeros((N,))
Omo[0]=0.24
Omn = np.zeros((N,))
for i in range (1,N):
            R=np.random.uniform()
            num=0
            while True:
                num+=1
                Omn[i]=Omo[i-1]+0.01*np.random.normal()
                L=2*Omn[i]      # Arbitrary equation just for test
                if L>R:
                   Omo[i]=Omn[i]
                else:
                    Omo[i]=Omo[i-1]
                if (Omo[i]<0 and Omo[i]>0.29) or num>100:
                    break
                print(Omo[i],L)

如果" Om大于 0.29 并且如果Om小于 0.2" 在数学上是不可能的。 从你的描述来看,我怀疑你想要or,而不是and.

if Omo[i] > 0.29 or Omo[i] < 0.2:
    break

这解决了直接的逻辑问题,但不能解决整体控制问题。 这表示如果Omo不在那个范围内,则离开循环。 您声明的目的是保持循环,直到它进入该范围。 这应该编码到循环控件中,类似于

while Omo[i] > 0.29 or Omo[i] < 0.2:

你能从那里继续吗?

另外,我强烈建议您仔细查看课堂材料和一两个教程,以便您可以学习推荐的编程实践。 有意义的变量名称,首选使用大写和小写字母,以及各种其他小技巧可以为您省去很多麻烦,并更快地为您提供帮助。

为什么我必须不断回答你的问题?:)(你被误解了。只需转动代码的符号即可。

while True:
            num+=1
            Omn[i]=Omo[i-1]+0.01*np.random.normal()
            L=2*Omn[i]      # Arbitrary equation just for test
            if L>R:
               Omo[i]=Omn[i]
            else:
                Omo[i]=Omo[i-1]
            if (0<Omo[i]<0.29) or num>100:
                break
print(Omo[i],L)

最新更新