我被要求在序列中添加前100个术语(1 + 1/2 + 1/4 + 1/8 ......等)
我一直在尝试的是喜欢的东西
for x in range(101):
n = ((1)/(2**x))
sum(n)
给了我一个错误,猜你不能把范围放到权力
print(n)
会给我一个所有值的列表,但我需要将它们相加在一起
是谁能帮我一把?如果有任何相关性,请使用qtconsole,如果您还没有猜到,我会对此感到陌生
答案 0 :(得分:2)
您一次只能保留一个值。如果你想要总和,你需要汇总结果,为此你需要一个初始值,你可以每一轮添加当前值术语强>:
n = 0 # initial value
for x in range(100):
n += 1 / 2**x # add current term
print(n)
答案 1 :(得分:1)
将sum_n初始化为零非常重要。每次迭代时,从序列/序列中添加(1/2 ** x)到sum_n,直到达到n_range。
n_range = 101
sum_n = 0 # initialize sum_n to zero
for x in range(n_range):
sum_n += (1/(2**x))
print(sum_n)
答案 2 :(得分:0)
你得到一个错误,因为sum需要一个可迭代的并且你传递一个浮点数:
sum(iterable [,start])
为了解决您的问题,正如其他人所建议的那样,您需要初始化累加器并在每次迭代时添加电源。
如果你绝对必须使用sum函数:
>>> import math
>>> sum(map(lambda x:math.pow(2,-x),range(100)))
2.0
答案 3 :(得分:0)