簡體   English   中英

蟒蛇,烏龜,pi和蒙特卡洛

[英]python, turtles, pi and monte carlo

我正在嘗試使用monte carlo和python中的海龜來近似pi。 代碼運行良好,但是我遇到了問題,我的“近似值”全都錯了。 我總是得到小於1的值,所以??? 我的代碼在這里

import turtle
import math
import random

fred = turtle.Turtle()
fred.speed(0)
fred.up()

wn = turtle.Screen()
wn.setworldcoordinates(-1,-1,1,1)

numdarts = int(input("How many darts will you throw"))
for i in range(numdarts):
x = random.random()
y = random.random()
numIncircle = 0

if i == 0 or i == 1:
    fred.up()
    fred.goto(x, y)


    if fred.distance(0, 0) <= 1:
        numIncircle += 1
        fred.color("Indianred")
        fred.stamp()
        fred.up()
    else:
        numIncircle += 0
        fred.color("cyan")
        fred.stamp()
        fred.up()


else:
    fred.goto(x, y)

    if fred.distance(0, 0) <= 1:
        numIncircle += 1
        fred.color("Indianred")
        fred.stamp()
        fred.up()
    else:
        numIncircle += 0
        fred.color("cyan")
        fred.stamp()
        fred.up()

piapproximation = float(float(numIncircle) / float(numdarts)) * 4

print piapproximation

wn.exitonclick()

你設置numIncircle = 0內部 for循環,有效地失去每次計數。

有時它會計數最后一個,因此近似值為1 /飛鏢數*4。這將在頻率pi / 4≈0.78539816339時發生

這是我的建議:

import turtle
import math
import random

fred = turtle.Turtle()
fred.speed(0)
fred.up()

wn = turtle.Screen()
wn.setworldcoordinates(-1,-1,1,1)

numdarts = int(input("How many darts will you throw"))

// this MUST come before the for loop
numIncircle = 0

for i in range(numdarts):
x = random.random() * 2 - 1
y = random.random() * 2 - 1

if i == 0 or i == 1:
    fred.up()
    fred.goto(x, y)

    if fred.distance(0, 0) <= 1:
        numIncircle += 1
        fred.color("Indianred")
        fred.stamp()
        fred.up()
    else:
        numIncircle += 0
        fred.color("cyan")
        fred.stamp()
        fred.up()
else:
    fred.goto(x, y)

    if fred.distance(0, 0) <= 1:
        numIncircle += 1
        fred.color("Indianred")
        fred.stamp()
        fred.up()
    else:
        numIncircle += 0
        fred.color("cyan")
        fred.stamp()
        fred.up()

piapproximation = float(float(numIncircle) / float(numdarts)) * 4

print piapproximation

wn.exitonclick()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM