我想重复计算步骤,直到值在定义的范围内,例如0.2
到0.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)