如何调用方法?

时间:2017-06-01 23:55:18

标签: python class random methods uniform-distribution

我在调用班级aleatorio()时遇到问题。我需要使用p类的aleatorio()方法创建一个随机点ponto,然后我可以在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或者意味着我没有生成随机点,或者我没有计算它正确落入内部的次数,但我不确定原因是什么

1 个答案:

答案 0 :(得分:0)

也许你的麻烦就是循环,而不是滚动。 @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

这看起来更好吗?