而loop不能满足构造参数值的条件

2024-09-28 01:26:04 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: importforif定义npzeros情况步骤
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)

如果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:

你能从那里继续吗

另外,我强烈建议您仔细阅读课堂资料和一两个教程,这样您就可以学习推荐的编程实践。有意义的变量名、首选的大写和小写字母以及其他各种小技巧可以为您省去很多麻烦,并更快地获得帮助

相关问题 更多 >

    热门问题