首页 > 解决方案 > Python for循环不迭代i = 1,2只输出第一次迭代

问题描述

我正在使用欧拉的微分方程方法构建一个 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 的结果

标签: pythonloops

解决方案


正如评论中提到的 pault ,您的 return 在循环内,这意味着该函数在第一次迭代时退出。

您可能想要的是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

推荐阅读