很棒的网站,我非常感谢我从这里得到的所有答案和提示。我试图计算一系列INCREMENTALLY分数的总和,但似乎无法获得正确的循环功能。我已经能够编写程序来计算总和,并计算系列中的各个分数,但我需要它来显示字符串中每一步的运行总和。该系列是1 / 2,2 / 3,3 / 4,4 / 5,......,20/21。这样它显示: 0.5000 1.1667 ... 16.4023 17.3546
这是我到目前为止所做的:
def frac(n, d):
a = n / d
return a
def main():
count = 1
while count <= 20:
num = count
den = count +1
ans = frac(num, den)
print(num, " ", format(ans, ".4f"))
count += 1
main()
但它只给了我这个:
1 0.5000
2 0.6667
3 0.7500
4 0.8000
5 0.8333
6 0.8571
7 0.8750
8 0.8889
9 0.9000
10 0.9091
11 0.9167
12 0.9231
13 0.9286
14 0.9333
15 0.9375
16 0.9412
17 0.9444
18 0.9474
19 0.9500
20 0.9524
答案 0 :(得分:3)
我根本不了解python,但似乎你错过的步骤是在每次迭代中考虑前一个答案。所以你可以这样做:
def main():
count = 1
ans = 0
while count <= 20:
num = count
den = count +1
ans = ans + frac(num, den) #add previous ans here
print(num, " ", format(ans, ".4f"))
count += 1
答案 1 :(得分:2)
您还可以使用itertools.accumulate
生成以下值:
from itertools import accumulate
for i, ans in enumerate(accumulate(n/(n+1) for n in range(1, 21)), start=1):
print(str(i).ljust(4), format(ans, '.4f'))
输出:
1 0.5000
2 1.1667
3 1.9167
4 2.7167
5 3.5500
6 4.4071
7 5.2821
8 6.1710
9 7.0710
10 7.9801
11 8.8968
12 9.8199
13 10.7484
14 11.6818
15 12.6193
16 13.5604
17 14.5049
18 15.4523
19 16.4023
20 17.3546
答案 2 :(得分:1)
正如许多人已经指出的那样,你错过了循环中部分和的累积。现在,稍微调整一下,并使用列表推导,可以这样实现:
fractions = [ float(x)/(x+1) for x in range(1,21) ]
cumulatives = [sum(fractions[0:i+1]) for i,j in enumerate(fractions)]
for i,item in enumerate(cumulatives):
print '{} {:.4f}'.format(i+1, item)
这是在python 2.7中。 Python 3.x itertools
具有函数accumulate
。
在此处查看此操作:https://eval.in/658781
1 0.5000
2 1.1667
3 1.9167
4 2.7167
5 3.5500
6 4.4071
7 5.2821
8 6.1710
9 7.0710
10 7.9801
11 8.8968
12 9.8199
13 10.7484
14 11.6818
15 12.6193
16 13.5604
17 14.5049
18 15.4523
19 16.4023
20 17.3546
答案 3 :(得分:0)
从我可以看到你没有在任何地方跟踪你的总和,所以只需在循环之前添加一个total
变量并添加到那个(当for循环执行时,我也避免使用while循环)特技):
def frac(n, d):
a = n / d
return a
def main():
total = 0
for num in range(1, 21):
ans = frac(num, num+1)
total += ans
print(num, " ", format(ans, ".4f"), 'total=', format(total, ".4f"))
main()
输出如下:
1 0.5000 total= 0.5000
2 0.6667 total= 1.1667
3 0.7500 total= 1.9167
4 0.8000 total= 2.7167
5 0.8333 total= 3.5500
6 0.8571 total= 4.4071
7 0.8750 total= 5.2821
8 0.8889 total= 6.1710
9 0.9000 total= 7.0710
10 0.9091 total= 7.9801
11 0.9167 total= 8.8968
12 0.9231 total= 9.8199
13 0.9286 total= 10.7484
14 0.9333 total= 11.6818
15 0.9375 total= 12.6193
16 0.9412 total= 13.5604
17 0.9444 total= 14.5049
18 0.9474 total= 15.4523
19 0.9500 total= 16.4023
20 0.9524 total= 17.3546