Как вызвать метод?
У меня проблемы с вызовом метода 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
Это выглядит лучше?