在运行这段代码时遇到了问题。仅打印0.0。我完全是python的初学者,我知道我可能犯了一个非常简单的错误,而且我的代码写得很糟糕。
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)发布于 2020-04-21 00:59:19
nhits的值永远不会从零开始更改。
您定义了一个函数(isInTheCircle),并调用此函数,但它不返回任何内容。您需要重写它以返回nhits,并将该值赋给一个变量(可能也称为nhits)。
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中的变量作用域”可以更好地理解这一点。
https://stackoverflow.com/questions/61327799
复制相似问题