Как вызвать метод?

У меня проблемы с вызовом метода aleatorio() моего класса. Мне нужно создать случайную точку p с использованием aleatorio() метод моего ponto класс, так что я могу использовать его в моем retangulo класс с interior() метод, чтобы в основном проверить, попадает ли случайная точка внутри каждого из моих двух прямоугольников, r1 а также r2, Тем не менее, кажется, что я не могу генерировать случайную точку 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 0, d1 а также d2 должно быть, сколько раз моя случайная точка попадает внутрь r1 а также r2соответственно. Похоже 0 либо означает, что я не генерирую случайную точку, либо просто не рассчитываю, сколько раз она попала внутрь, но я не уверен, в чем причина.

1 ответ

Решение

Возможно, ваша проблема в петле, а не в движении. @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

Это выглядит лучше?

Другие вопросы по тегам