如何调用该方法?

2024-09-28 19:27:21 发布

您现在位置:Python中文网/ 问答频道 /正文

调用类的方法aleatorio()时遇到问题。我需要使用我的ponto类的aleatorio()方法创建一个随机点p,这样我就可以在我的retangulo类中使用interior()方法,基本上检查随机点是否落在两个矩形的内部,r1r2。但是,我似乎无法生成所需的随机点p

from random import uniform
class ponto:
    def __init__(self,x,y):
        self.x=float(x)
        self.y=float(y)

    def aleatorio(self):
        ''' Ponto aleatorio com coordenadas 0.0 a 10.0 '''
        self.x=uniform(0.0,10.0)
        self.y=uniform(0.0,10.0)

class retangulo():
    def __init__(self,a,b):
        self.a=a
        self.b=b

    def interior(self,p):
        ''' Verifica se ponto no interior do retangulo '''
        if p.x >= self.a.x and p.x <=self.b.x and p.y >=self.a.y and p.y<=self.b.y:
            return True
        return False

    def area(self):
        return self.a*self.b

a1=ponto(0.0,0.0)
b1=ponto(2.0,2.0)
r1=retangulo(a1,b1)
b2=ponto(4.0,4.0)
r2=retangulo(a1,b2)

p=ponto(0.4,0.9)
p.aleatorio()

d1=0
d2=0
for r in range(10000):
    if r1.interior(p)==True:
        d1+=1
    elif r2.interior(p)==True:
        d2+=1
print(d1,d2)

根据建议,我添加了d1,d2的打印,它返回:0 0d1d2分别是我的随机点落入r1r2的次数。我猜0要么意味着我没有生成随机点,要么就是我没有正确计算它落在里面的次数,但我不确定原因是什么


Tags: and方法selftruereturndefuniformd2
1条回答
网友
1楼 · 发布于 2024-09-28 19:27:21

也许你的麻烦在于循环,而不是模具滚动。 @AlanLeuthard是非常正确的:此代码生成一个点,然后检查10000次该点是否位于两个矩形中。尝试每次通过循环创建一个新点:

d1=0
d2=0
for r in range(10000):
    p.aleatorio()
    if r1.interior(p)==True:
        d1+=1
    elif r2.interior(p)==True:
        d2+=1

print d1, d2

输出:

397 1187

这个好看吗

相关问题 更多 >