刚学python不久,要做蒙特卡洛法解π值这个问题,然后我发现我的输出把最后一个参数第一个输出了。
就比如:我输入顺序是2^10,2^15,2^20,但是输出会先输出2^20的结果之后,再依次输出其他的。想请教各位这是什么问题,可以怎样修改。
以下是代码:
# 蒙特卡洛法解π值
'''
输入:抛点数
处理:计算每个点到圆心的距离,统计在圆内点的数量
输出:π值
'''
#蒙特卡洛法解π
#搞一个半径为1的1/4圆
from random import random #random函数随机返回一个在(0,1)间的浮点数
from math import sqrt #sqrt 是math库中用来开平方的
from time import perf_counter # time.clock()在3.3版本后已移除,可使用perf_counter()或者process_time()代替
import sys
import importlib
from prettytable import PrettyTable
importlib.reload(sys)
Temp = [2 ** 10, 2 ** 15, 2 ** 20, 2 ** 25, 2 ** 26, 2 ** 27]
table = PrettyTable(['num','PI','time'])
for j in range(len(Temp)):
darts=Temp[j-1] #设定"飞镖"数
hits=0.0 #初始击中个数
t = perf_counter()
for i in range (1,darts+1):
x,y = random(), random() #用两个随机抛点(x,y)的坐标
dist = sqrt(x ** 2 + y ** 2) #"飞镖"到靶心的距离, **代表求平方
if dist <= 1.0:
hits = hits + 1 #假如飞镖飞到的地方恰在离圆1或1以内,个数+1
pi = 4 * (hits / darts) #循环结束后,在离圆心1以内的点数/所有飞镖数,
#因为设定的时候是1/4圆,所以还要乘四。
print("Pi的值是:{}.".format(pi))
print("运行时间是:{:5.5}s".format(t))
table.add_row([darts, pi, t])
print(table)
以下是运行结果: