Python for循环不针对i = 1,2进行迭代,仅输出第一次迭代

时间:2019-04-10 18:25:41

标签: python loops

我正在使用欧拉微分方程方法建立一个for循环。但是,for循环不会递增,仅显示i = 0的值,而不显示i = 1或i = 2的值。

我尝试手动分配所有参数,并重建了for循环。

import math

def Euler(a,b,N,alpha):
    h=(b-a)/N
    t=a
    w=alpha

    for i in range (0,N):
        w=w+h*(math.exp(t-w))
        t=a+(i*h)
        return t,w    
Euler(0,1,2,1)

我希望函数返回i = 1和i = 2的结果

2 个答案:

答案 0 :(得分:3)

正如评论中提到的保险柜一样,您的返回位于循环内部,这意味着该函数在第一次迭代时退出。

您可能想要的是yield,它将把函数变成生成器:

import math

def Euler(a,b,N,alpha):
    h=(b-a)/N
    t=a
    w=alpha

    for i in range (0,N):
        w=w+h*(math.exp(t-w))
        t=a+(i*h)
        yield t,w

for x, y in Euler(0,1,2,1):
    print(x, y)

>>> 0.0 1.1839397205857212
>>> 0.5 1.3369749844848988

答案 1 :(得分:0)

您的退货在for循环中。取消缩进return一次。