使用while循环找到1 + 1/2 + 1/3 .... + 1 / n的和

时间:2019-09-08 17:03:03

标签: python python-3.x

这是我的作业问题。我们被要求找出级数的总和-> 1 + 1/2 + 1/3 + 1/4 ... + 1 / n(这里n = 20)

下面提供了我尝试的代码。

denominator=1
num=float(1/denominator)
sum=0
while denominator<=20:
    print(num)
    sum+=num
    denominator+=1
print(f'the sum of the above series is {sum}.')

输出结果为20。但这不是必需的结果。

4 个答案:

答案 0 :(得分:5)

1 / denominator已经是浮点数,因此不需要float(...),并且一次将1 / denominator分配给num并不意味着num会随着{ {1}}发生了变化,因此,您应该为循环中的每个denominator计算1 / denominator,并避免使用内置函数denominator(您可能曾经用它来解决):变量名:

sum

输出:

denominator = 1
s = 0
while denominator <= 20:
    num = 1 / denominator
    print(num)
    s += num
    denominator += 1
print(f'the sum of the above series is {s}.')

使用内置1.0 0.5 0.3333333333333333 0.25 0.2 0.16666666666666666 0.14285714285714285 0.125 0.1111111111111111 0.1 0.09090909090909091 0.08333333333333333 0.07692307692307693 0.07142857142857142 0.06666666666666667 0.0625 0.058823529411764705 0.05555555555555555 0.05263157894736842 0.05 the sum of the above series is 3.597739657143682. 和生成器表达式:

sum

答案 1 :(得分:2)

sum = 0
for i in range(1, 21):
    sum += 1.0 / i

print(sum)

输出:

3.59773965714

答案 2 :(得分:2)

float(1 / denominator)不是函数定义,但它返回一个值。 调用此代码时,它的计算结果为当前值1 /分母= 1/1 = 1。

因此,在while循环中,您将1进行20次迭代,这就是得到20的原因。 创建函数或将逻辑移至循环。

def get_num(denominator):
    return float(1/denominator)

denominator=1
sum=0
while denominator<=20:
    sum+=get_num(denominator)
    denominator+=1
print(f'the sum of the above series is {sum}.')


denominator=1
sum=0
while denominator<=20:
    sum+=float(1/denominator)
    denominator+=1
print(f'the sum of the above series is {sum}.')

答案 3 :(得分:0)

您可以使用python的 Fractions 模块进行此计算。 Fractions

#!/usr/bin/python

import fractions

denominator = 1
sum = 0
while denominator<=20:
    num = fractions.Fraction(1, denominator)
    sum += num
    denominator += 1

print('the sum of the above series is :', sum)
print('the sum of the above series is :', float(sum))

输出:

the sum of the above series is : 55835135/15519504                                                                                     
the sum of the above series is : 3.597739657143682

以上代码已在python2.7和python3上进行了测试。

它打印两行。第一个将值打印为小数,第二个将值打印为浮点。