首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Montecarlo Pi估计代码返回零

Montecarlo Pi估计代码返回零
EN

Stack Overflow用户
提问于 2020-04-21 00:53:09
回答 1查看 38关注 0票数 0

在运行这段代码时遇到了问题。仅打印0.0。我完全是python的初学者,我知道我可能犯了一个非常简单的错误,而且我的代码写得很糟糕。

代码语言:javascript
复制
import math
import random as ran
import numpy as np

nodarts=1000
nhits = 0




def isInTheCircle(nhits,nodarts):
    for i in range(nodarts):
          x = ran.uniform(-1,1) 
          y = ran.uniform(-1,1)
    if np.sqrt(x*x + y*y) >= 1:
        nhits += 1

isInTheCircle(nhits,nodarts)
pi = (4.0*nhits)/(nodarts)
print(pi)
EN

回答 1

Stack Overflow用户

发布于 2020-04-21 00:59:19

nhits的值永远不会从零开始更改。

您定义了一个函数(isInTheCircle),并调用此函数,但它不返回任何内容。您需要重写它以返回nhits,并将该值赋给一个变量(可能也称为nhits)。

代码语言:javascript
复制
def isInTheCircle(nhits,nodarts):
    for i in range(nodarts):
          x = ran.uniform(-1,1) 
          y = ran.uniform(-1,1)
        if np.sqrt(x*x + y*y) <= 1:
            nhits += 1

    return nhits


nhits = isInTheCircle(nhits,nodarts)
pi = (4.0*nhits)/(nodarts)
print(pi)

可能让您感到困惑的是变量nhits的“作用域”。基本上,仅仅因为在函数内部和外部有一个名为nhits的变量并不意味着它们就是同一个变量。函数内部的变量会发生变化,但函数外部的变量不一定会发生变化(它有时会根据type....but而变化,这是另一回事)。阅读“python中的变量作用域”可以更好地理解这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61327799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档