函数在python3中声明后未定义

时间:2018-01-30 21:14:42

标签: python montecarlo

使用python 3:我有三个函数:montePi,isInCircle和main。 我需要montePi调用isInCircle。该函数将起作用,它只是说没有定义isInCircle。我该如何定义它?

import random
import math

def montePi(numDarts):

    inCircle = 0

    def isInCircle(x, y, r):
        r = 1
        d = math.sqrt(x**2 + y**2)
        if d <= r:
            return True
        else:
            return False

    for i in range(numDarts):
        x = random.random()
        y = random.random()
        d = math.sqrt(x**2 + y**2)
        if d <= 1:
            inCircle = inCircle +1
        pi = inCircle / numDarts * 4
    return pi

def main():
    print(montePi(100))
    print(montePi(1000))
    print(montePi(10000))
    print(montePi(100000))
main()

1 个答案:

答案 0 :(得分:2)

因为isInCircle中定义了函数montePi,所以可以在montePi内调用它,但不能在本地调用其他函数。如果您在isInCircle之外定义montePi,那么您就可以从main调用它。

不确定你在这里尝试编程的是什么,但this question似乎有可能帮助你在这里确定你想要的东西。 Here是一个涵盖范围如何工作的问题。

如果您需要从isInCirclemain之外拨打main,那么这就应该如何格式化;

import random
import math

def isInCircle(x, y, r):
    r = 1
    d = math.sqrt(x**2 + y**2)
    if d <= r:
        return True
    else:
        return False

def montePi(numDarts):

    inCircle = 0

    for i in range(numDarts):
        x = random.random()
        y = random.random()
        d = math.sqrt(x**2 + y**2)
        if d <= 1:
            inCircle = inCircle +1
        pi = inCircle / numDarts * 4
    return pi

def main():
    print(montePi(100))
    print(montePi(1000))
    print(montePi(10000))
    print(montePi(100000))
main()