【问题标题】:Function not defined after declaration in python3在python3中声明后未定义函数
【发布时间】:2018-01-30 21:14:42
【问题描述】:

使用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()

【问题讨论】:

  • 为什么isInCircle()定义在montePi()中间?
  • 为什么不在montePi 之外定义isInCircle 然后调用它?
  • 我想我在 montePi 之外的何处定义它以及如何调用它时遇到了麻烦。我想我对如何将两者联系起来感到困惑
  • 你在哪里打电话isInCircle()
  • 对于硬编码半径 1,不需要调用 math.sqrt

标签: python montecarlo


【解决方案1】:

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

不确定您要在这里编程什么,但this question 似乎有可能,关于函数中的函数可以帮助您决定您想要什么。 Here 是一个涵盖范围如何工作的问题。

如果您需要从main 或外部main 调用isInCircle,那么它应该是这样格式化的;

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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-18
    • 1970-01-01
    • 2017-02-16
    • 2018-02-04
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多