Sum Series with Functions - 不断添加以前的答案?

Sum Series with Functions - Continously adding previous answers?

我正在学习 Python 中的函数概念,需要一些建议。

我正在尝试编写一个程序,该程序将对输入 1 到 20 使用代数函数 m(i) = (i) / (i + 1)。到目前为止,我已经可以使用它了,但现在我想将所有以前的输出加在一起对于每个新输出。可能是我没有掌握其中的数学概念,这就是为什么我没有在我的代码中正确处理它。

理想情况下,这将是结果 table 我正在尝试获得:

i      m(i)     

1      0.50
2      1.17
...
19    16.40
20    17.35

目前我拥有的是:

def equation(i):
    mi = ((i) / (i + 1))
    return mi

def main():
    for i in range(1,21):
    print(format(i, '2d'),"    ",format(equation(i), '.2f'))

main()

我在 shell 中看到的输出是:

 1      0.50
 2      0.67
 3      0.75
 4      0.80
 5      0.83
 6      0.86
 7      0.88
 8      0.89
 9      0.90
10      0.91
11      0.92
12      0.92
13      0.93
14      0.93
15      0.94
16      0.94
17      0.94
18      0.95
19      0.95
20      0.95

我觉得我有了一个良好的开端,但我如何才能将每行的所有 m(i) 加在一起?就像我发布的 'ideal' 示例一样,它需要 0.5 + 0.67 给出 1.17 等等。

提前致谢!

试试这个:

def equation(i):
    if i <= 0:
        return 0
    mi = ((i) / (i + 1))
    return mi + equation(i - 1)

你只需要一个累加器来保存等式(i)的值

这是我的解决方案:

def equation(i):
    mi = ((i) / (i + 1))
    return mi

acc = 0
for i in range(1,21):
    acc += equation(i)
    print(format(i, '2d'),"    ",format(acc, '.2f'))

你可以这样做。

#!/usr/bin/python

def equation(i):
    mi = (float(i) / (i + 1))
    return mi

def main():
    sumOfMi = 0
    for i in range(1,21):
        sumOfMi+= equation(i)
        print(format(i, '2d'),"    ",format(sumOfMi, '.2f'))

main()

你可以用发电机来做:

def equation(i):
    n = 0
    tot = 0
    while n < i: 
         n += 1
         mi = n/(n+n)
         tot += mi
         yield n, tot

def main():
    for i, mi in equation(21):
        print(format(i, '2d'),"    ",format(mi, '.2f'))
def function(i):
    return i/(i+1)

e = 0
for i in range(1, 21):
    print(i, end=' ')
    e += function(i)
    print(e)

看来您只需要将结果 return 从函数增加到 variable.Good 运气!