Having trouble with the following question:
在几何形状中,圆周长与其直径的比率称为π . π的值可以从无限系列的形式估计:
π/ 4 = 1 - (1/3)(1/5) - (1/7)(1/9) - (1/11)......还有另一种计算π的新方法 . 想象一下,你有一个2平方的飞镖板 . 它刻有一个单位半径圆 . 圆的中心与正方形的中心重合 . 现在想象你随机地在飞镖板上投掷飞镖 . 然后,落入圆内的飞镖的数量与投掷的总飞镖的数量的比率与圆的面积与方形飞镖的面积的比率相同 . 单位半径的圆的面积仅为π平方单位 . 飞镖盘面积为4平方单位 . 圆的面积与正方形的面积之比为π/ 4 .
为了模拟投掷飞镖我们将使用随机数发生器 . Random模块具有几个可以使用的随机数生成函数 . 例如,函数uniform(a,b)返回a(包括)和b(不包括)范围内的浮点随机数 .
想象一下,方形飞镖盘上有一个坐标系 . 右上角有坐标(1.0,1.0),左下角有坐标(-1.0,-1.0) . 它的边长为2个单位,其中心(以及内切圆的中心)位于原点 .
飞镖板内的随机点可以通过其x和y坐标指定 . 使用随机数生成器生成这些值 . 我们实现这一目标的方式是:
xPos = random.uniform (-1.0, 1.0)
yPos = random.uniform (-1.0, 1.0)
要确定一个点是否在圆内,它与圆心的距离必须严格小于圆的半径 . 坐标(xPos,yPos)与中心的距离是math.hypot(xPos,yPos) . 圆的半径是1个单位 .
您将要编写的程序将被称为CalculatePI . 它将具有以下结构:
import math
import random
def computePI ( numThrows ):
...
def main ():
...
main()
函数main()将为给定数量的throws调用函数computePI() . 函数computePI()将通过为x和y坐标生成随机数来模拟dart的投掷 . 您将确定该随机生成的点是否在圆圈内 . 您将按照投掷次数指定的次数执行此操作 . 您将记录飞镖在圆圈内落地的次数 . 该计数除以总投掷数是比率π/ 4 . 然后函数computePI()将返回PI的计算值 . 在您的函数main()中,您想要进行实验,看看PI的准确性是否随着飞镖的投掷次数而增加 . 您将比较结果与math.pi给出的值 . 输出中的数量差异是PI的计算值减去math.pi.使用以下数量的投掷来运行您的实验 - 100,1000,10,000,100,000,1,000,000和10,000,000 . 您将使用这些数字作为输入参数调用函数computePI() . 您的输出将类似于以下内容,即您的计算PI和差异的实际值将不同,但接近显示的值:
Computation of PI using Random Numbers
num = 100 Calculated PI = 3.320000 Difference = +0.178407
num = 1000 Calculated PI = 3.080000 Difference = -0.061593
num = 10000 Calculated PI = 3.120400 Difference = -0.021193
num = 100000 Calculated PI = 3.144720 Difference = +0.003127
num = 1000000 Calculated PI = 3.142588 Difference = +0.000995
num = 10000000 Calculated PI = 3.141796 Difference = +0.000204
Difference = Calculated PI - math.pi
您的输出必须采用上述格式 . 投掷次数必须左对齐 . 计算出的π值和差值必须正确表示为六位小数 . 差异应该有加号或减号 . 阅读书中有关格式化的相关章节 .
Till now I have done:
import math
import random
def computePI (numThrows):
xPos = random.uniform (-1.0, 1.0)
yPos = random.uniform (-1.0, 1.0)
in_circle = 0
throws = 0
while (throws < numThrows):
if math.hypot (xPos, yPos) <= 1:
in_circle += 1
throws += 1
pi = (4 * in_circle) / numThrows
return pi
def main ():
throws = (100, 1000, 10000, 100000, 1000000, 10000000)
for numThrows in throws[0:7]:
main ()
I am having trouble calling the ComputePI function in the Main function. Also how do I print num with left indentation and ensure that all numbers have the required decimal space? Thank you!