这是我的任务,对于我的生活,我似乎无法想办法。这是我到目前为止的代码:
sum = 0
k = 1
while k <= 0.0001:
if k % 2 == 1:
sum = sum + 1.0/k
else:
sum = sum - 1.0/k
k = k + 1
print()
这是我的任务:
创建一个名为sumseries.py的python程序,它执行以下操作: 将评论放在程序的顶部,并附上您的姓名,日期和 该程序的功能描述。
编写一个程序来计算和显示系列的总和:
1 - 1/2 + 1/3 - 1/4 + ......
直到达到小于0.0001的期限。
10,000次迭代的答案似乎是0.6930971830599583
我以1,000,000,000(十亿)次迭代运行该程序,并提出了一些0.6931471810606472。我需要创建一个循环来可编程地创建该系列。
答案 0 :(得分:5)
实际上,你可以写得更短:
Answer = sum(1.0 / k if k % 2 else -1.0 / k for k in range(1, 10001))
1.0 / k if k % 2 else -1.0 / k
为奇数,则1.0 / k
会产生k
,否则会-1.0 / k
a - b
与a + (-b)
相同for k in range(1, 10001)
遍历范围从1(包含)到10001(不包括)的所有k
sum
可以计算任何序列的总和(确切地说是任何iterable),无论是列表,元组还是生成器表达式Answer = 0
for k in range(1, 10001):
if k % 2:
Answer += 1.0 / k
else:
Answer -= 1.0 / k
# or simply:
# Answer += 1.0 / k if k % 2 else -1.0 / k
答案 1 :(得分:2)
你几乎就在那里,你需要做的就是替换
while k <= 0.0001:
使用:
while term <= 0.0001:
术语自然是1 / k
答案 2 :(得分:0)
为了让老师高兴,你必须遵循问题的细节以及问题的精神。问题清楚地表明打印总和,而不是所有部分总和。你会通过提交一个不需要10000行垃圾的解决方案来激怒老师。
有些人建议预先计算10000的循环限制,但这不是所请求的算法。相反,一个是计算连续项(1,-1 / 2,1 / 3,-1 / 4,...),直到达到小于0.0001的项。
指出问题的原因是,最终会得到一个更普遍有用的程序,适用于广泛的术语公式。如果术语公式从(-1)**(k-1)/k
更改为1/k
或1/k^2
,则不会是一个错误的答案。
老师的措辞&#34;术语小于0.0001&#34;是不精确的,并假设一些数学知识。他们希望该项的大小(绝对值)小于0.0001。否则,正如有人指出的那样,迭代将在第二个项-1/2处停止。
所以,如果没有一个跳过一章的浮夸的迂腐解决方案,这个答案就不会是完整的。 ;)请注意,如果没有转换为float,以前的一些答案将无法在Python2.x中使用。
def term(k):
return (-1)**(k - 1) / float(k)
err = 0.0001
def terms():
k = 1
t = term(k)
while abs(t) >= err:
yield t
k += 1
t = term(k)
print(sum(terms()))
答案 3 :(得分:0)
以下是您的老师正在寻找全额学分的答案 直到&lt; .0001表示while> = 0.0001这会对您的代码进行最少的修改,因此会对您所编写的内容进行更正
sum = 0
k = 1
while 1.0/k >= 0.0001:
if k % 2 == 1:
sum = sum + 1.0/k
else:
sum = sum - 1.0/k
k = k + 1
print(sum)
答案 4 :(得分:0)
绝对最简单的方法如下
sum((-1)**(k) / k for k in range(1, 10001))