练习7-2 将循环封装到一个函数square_root中,接收一个形参a。选择一个合理的值x,利用牛顿方法返回a的平方根的估计值。
代码如下:
from math import *
def square_root(a):
epsilon = 0.0000001
x = a / 2
while True:
print x
y = (x+a/x)/2
if(abs(y-x)<epsilon):
break
x = y
square_root(100000)
运行结果如下:
练习7-4
内置函数eval接收一个字符串并使用Python解释器对它进行求值。
编写一个函数eval_loop,迭代地提示用户,接收他们的输入并使用eval求值,并打印出结果。
它应当一直继续,直到用户输入‘done’,并返回最后一个求值的表达式的结果。
from math import *
def eval_loop():
while True:
info = raw_input('> ')
if info=='done':
break
else:
print eval(info)
eval_loop()
输出如下:
练习7-5 数学家拉马努金(Srinivasa Ramanujan)找到了一个无限序列,可以用来生成pi 的数值近似值。编写一个函数 estimate_pi,使用公式计算并返回pi的近似估计。
import math
def factorial(n):
"""Computes factorial of n."""
if n == 0:
return 1
else:
recurse = factorial(n-1)
result = n * recurse
return result
def estimate_pi():
total = 0
k = 0
factor = 2 * math.sqrt(2) / 9801
while True:
num = factorial(4*k) * (1103 + 26390*k)
den = factorial(k)**4 * 396**(4*k)
term = factor * num / den
total += term
if abs(term) < 1e-15: break
k += 1
return 1 / total
print estimate_pi()
运行结果如下: