这是我的作业问题。我们被要求找出级数的总和-> 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。但这不是必需的结果。
答案 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上进行了测试。
它打印两行。第一个将值打印为小数,第二个将值打印为浮点。