如何调用方法?

How to call the method?

我在调用 class 的方法 aleatorio() 时遇到问题。我需要使用我的 ponto class 的 aleatorio() 方法创建一个随机点 p,这样我就可以在我的 retangulo class 中使用它] 使用 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 的打印,其中 returns:0 0d1d2 应该是我的随机点分别落在 r1r2 内的次数。我想 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

这样好看吗?