1.
修改正文中递归定义的fib函数,使之能借助一个全局变量(或非局部变量)统计出在计算fib(n)的过程中函数调用的总次数。请写另一个函数,它用一些正整数值调用修改后的fib,输出相应的斐波那契项的值和相应的函数递归调用次数。你看到了什么情况?请解释。
2.
请定义一个函数,计算用年月日参数给定的日期是该年的第几天。
3.
请找出在前一章里完成的两个程序,其中定义了辅助函数:
a)
把其中的辅助函数修改为主要函数的内部函数;
b)
根据作用域规则,尽可能地减少辅助函数的参数;
c)
比较上面得到的两种实现。
4.
请设法找到辛普森(数值)积分公式,并定义一个基于辛普森公式做数值积分的函数,其中采用课堂提出的逐步加细划分的方法,通过多次求数值积分逼近函数的实际积分值。请写出几个用你的函数完成积分的实例。
5.
蒙特卡罗积分是利用随机试验求函数的数值积分的方法。请考虑定义一个蒙特卡罗积分函数mt_int,通过生成平面上区域
[x1,x2] × [y1,y2] 里的随机点数据,检查其位于被积函数f的值之下的比率,得到函数积分的近似值。
6.
定义函数判断一个点与原点的距离是否小于1,即,是否在单位圆内。利用该函数写一个通过蒙特卡罗方法计算圆周率值的程序:随机生成两个0与1间的实数,看它们表示的点是否在单位圆内。请生成一些数据点做试验。
7.
1777年法国科学家布丰提出的一种计算圆周率的方法,即著名的布丰投针问题。请检索有关这个问题的信息,并用蒙特卡罗模拟方法检验布丰的结论。
8.
任一自然数数没有重复质因子的概率为,请写程序检验这个结论。
9.
有一种赌博游戏称为“幸运七”,说你丢两个骰子,如果其点数之和为7你就赢4元,如果不是7你输1元。请定义一个函数模拟这种游戏,检查赌场的规则是否公平。另外,请定义一个函数lucky7(a,b),其中a表示你的初始赌资,b是你准备见好就收的款额。函数模拟“幸运七”游戏,直至输光赌资或者手中的钱超过b。函数结束之前打印出过程中的投骰子次数,曾经达到的最高和最低款额。
10.
请定义函数find_root(x,n,e)用二分法求出值y,使得y**n与x的误差不超过某个e。请仔细写出测试这个函数的代码(或者函数和代码),使人通过这些代码产生的输出能方便地看出测试结果。你采用的是黑箱测试还是白箱测试?为什么?
11.
选择前面写过的两个比较复杂的函数的文件,在文件最后加入一段测试代码,采用Python程序习惯的写法。这些代码应能充分测试你的函数,并给出合适的输出。分析你的测试代码对函数的语句覆盖和路径覆盖情况。