Python 练习册:练习 69 - 近似圆周率
The Python Workbook: Exercise 69 - Approximate pi
我是 Python 的新手,目前正在学习 Ben Stephenson 的 Python 练习册。我被练习 69 困住了,我的 pi 值在发散……有人能帮忙吗?我的代码有什么错误吗?
我在这里也附上了练习题。 Exercise Question
#Exercise 69: Approximate pi
maxrun = 15
denominator1 = 2
denominator2 = 3
denominator3 = 4
fractionpos = (4/(denominator1*denominator2*denominator3))
denominatora = 4
denominatorb = 5
denominatorc = 6
fractionneg = -4/(denominatora*denominatorb*denominatorc)
pi = 3
count = 1
while maxrun != 0:
if count %2 != 0: #odd runs are positive
pi = pi+fractionpos
print('Approximation',count,'pi value is',pi)
count = count+1
denominator1 = denominator1+4
denominator2 = denominator2+4
denominator3 = denominator3+4
maxrun = maxrun-1
elif count %2 ==0: #even runs are negative
pi = pi+fractionneg
print('Approximation',count,'pi value',pi)
count = count+1
denominatora = denominator1+4
denominatorb = denominator2+4
denominatorc = denominator3+4
maxrun = maxrun-1
这段代码有两个问题。
首先,当你计算分数的负数部分时,你应该将 4 加到分母 a,b,c 而不是 1,2,3。
其次,fractionpos
和fractionneg
只计算一次。您需要在每次迭代时重新计算它们。
此外,如果每个循环只添加两个,则可以去掉分母 a、b、c 并只对两者使用 1、2、3。如果你想要更多的挑战,你可以用一个分母变量而不是三个
由于您正在学习 Python 并且这是对您的练习,我建议您不要只是复制下面的代码,而是自己进行更改。玩得开心Python!
if count %2 != 0: #odd runs are positive
pi = pi+(4/(denominator1*denominator2*denominator3))
print('Approximation',count,'pi value is',pi)
count = count+1
denominator1 = denominator1+4
denominator2 = denominator2+4
denominator3 = denominator3+4
maxrun = maxrun-1
elif count %2 ==0: #even runs are negative
pi = pi+-4/(denominatora*denominatorb*denominatorc)
print('Approximation',count,'pi value',pi)
count = count+1
denominatora = denominatora+4
denominatorb = denominatora+4
denominatorc = denominatora+4
maxrun = maxrun-1
每次更新分母时,您也需要更新分数。
现在你的 fractionpos
和 fractioneg
没有改变,所以每次迭代,你都在添加原始条款。这就是你的 pi 近似值发散的原因。
我们可以通过在更新分母后更新 fractionpos
和 fractionneg
来修正这一点。
if count %2 != 0: #odd runs are positive
pi = pi+fractionpos
print('Approximation',count,'pi value is',pi)
count = count+1
denominator1 = denominator1+4
denominator2 = denominator2+4
denominator3 = denominator3+4
fractionpos = (4/(denominator1*denominator2*denominator3))
maxrun = maxrun-1
else: #even runs are negative
pi = pi+fractionneg
print('Approximation',count,'pi value',pi)
count = count+1
denominatora = denominator1+4
denominatorb = denominator2+4
denominatorc = denominator3+4
fractionneg = -4/(denominatora*denominatorb*denominatorc)
maxrun = maxrun-1
您的代码有两个问题:
pi = pi+fractionpos # This does not work because its value stays the same.
每次更改分母时,fractionpos
和 fractionneg
都应更新。您可以通过在 while 循环中为它们重新分配一个值来实现。
在你的 elif
语句中,你应该将 4 添加到 denominatora
而不是 denominator1
和其他的。
elif count %2 ==0: #even runs are negative
pi = pi+fractionneg
print('Approximation',count,'pi value',pi)
count = count+1
denominatora = denominator1+4 # This goes wrong and the following as well
denominatorb = denominator2+4
denominatorc = denominator3+4
maxrun = maxrun-1
我是 Python 的新手,目前正在学习 Ben Stephenson 的 Python 练习册。我被练习 69 困住了,我的 pi 值在发散……有人能帮忙吗?我的代码有什么错误吗?
我在这里也附上了练习题。 Exercise Question
#Exercise 69: Approximate pi
maxrun = 15
denominator1 = 2
denominator2 = 3
denominator3 = 4
fractionpos = (4/(denominator1*denominator2*denominator3))
denominatora = 4
denominatorb = 5
denominatorc = 6
fractionneg = -4/(denominatora*denominatorb*denominatorc)
pi = 3
count = 1
while maxrun != 0:
if count %2 != 0: #odd runs are positive
pi = pi+fractionpos
print('Approximation',count,'pi value is',pi)
count = count+1
denominator1 = denominator1+4
denominator2 = denominator2+4
denominator3 = denominator3+4
maxrun = maxrun-1
elif count %2 ==0: #even runs are negative
pi = pi+fractionneg
print('Approximation',count,'pi value',pi)
count = count+1
denominatora = denominator1+4
denominatorb = denominator2+4
denominatorc = denominator3+4
maxrun = maxrun-1
这段代码有两个问题。
首先,当你计算分数的负数部分时,你应该将 4 加到分母 a,b,c 而不是 1,2,3。
其次,fractionpos
和fractionneg
只计算一次。您需要在每次迭代时重新计算它们。
此外,如果每个循环只添加两个,则可以去掉分母 a、b、c 并只对两者使用 1、2、3。如果你想要更多的挑战,你可以用一个分母变量而不是三个
由于您正在学习 Python 并且这是对您的练习,我建议您不要只是复制下面的代码,而是自己进行更改。玩得开心Python!
if count %2 != 0: #odd runs are positive
pi = pi+(4/(denominator1*denominator2*denominator3))
print('Approximation',count,'pi value is',pi)
count = count+1
denominator1 = denominator1+4
denominator2 = denominator2+4
denominator3 = denominator3+4
maxrun = maxrun-1
elif count %2 ==0: #even runs are negative
pi = pi+-4/(denominatora*denominatorb*denominatorc)
print('Approximation',count,'pi value',pi)
count = count+1
denominatora = denominatora+4
denominatorb = denominatora+4
denominatorc = denominatora+4
maxrun = maxrun-1
每次更新分母时,您也需要更新分数。
现在你的 fractionpos
和 fractioneg
没有改变,所以每次迭代,你都在添加原始条款。这就是你的 pi 近似值发散的原因。
我们可以通过在更新分母后更新 fractionpos
和 fractionneg
来修正这一点。
if count %2 != 0: #odd runs are positive
pi = pi+fractionpos
print('Approximation',count,'pi value is',pi)
count = count+1
denominator1 = denominator1+4
denominator2 = denominator2+4
denominator3 = denominator3+4
fractionpos = (4/(denominator1*denominator2*denominator3))
maxrun = maxrun-1
else: #even runs are negative
pi = pi+fractionneg
print('Approximation',count,'pi value',pi)
count = count+1
denominatora = denominator1+4
denominatorb = denominator2+4
denominatorc = denominator3+4
fractionneg = -4/(denominatora*denominatorb*denominatorc)
maxrun = maxrun-1
您的代码有两个问题:
pi = pi+fractionpos # This does not work because its value stays the same.
每次更改分母时,fractionpos
和 fractionneg
都应更新。您可以通过在 while 循环中为它们重新分配一个值来实现。
在你的 elif
语句中,你应该将 4 添加到 denominatora
而不是 denominator1
和其他的。
elif count %2 ==0: #even runs are negative
pi = pi+fractionneg
print('Approximation',count,'pi value',pi)
count = count+1
denominatora = denominator1+4 # This goes wrong and the following as well
denominatorb = denominator2+4
denominatorc = denominator3+4
maxrun = maxrun-1