具有函数的Sum系列 - 不断添加以前的答案?

时间:2016-09-30 02:29:38

标签: python function math sum continuous

我正在学习Python中的函数概念,可以使用一些建议。

我正在尝试编写一个程序,它将使用代数函数m(i) = (i) / (i + 1)作为输入1到20.到目前为止,我已经有了这个工作,但现在我想将所有先前的输出加在一起新产出。可能我只是没有理解这个数学概念,这就是我在我的代码中没有把它弄好的原因。

理想情况下,这将是我想要得到的结果表:

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)?就像我发布的“理想”示例一样,它需要0.5 + 0.67给出1.17等等。

提前谢谢!

5 个答案:

答案 0 :(得分:0)

试试这个:

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

答案 1 :(得分:0)

您只需要一个累加器来保存等式(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'))

答案 2 :(得分:0)

你可以这样做。

#!/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()

答案 3 :(得分:0)

你可以用发电机做到这一点:

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'))

答案 4 :(得分:0)

def function(i):
    return i/(i+1)

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

似乎你只需要将结果从函数增加到变量。祝你好运!