我正在学习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等等。
提前谢谢!
答案 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)
似乎你只需要将结果从函数增加到变量。祝你好运!