迭代部分习题

练习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()
    运行结果如下:

   

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值