2017-06-01 4 views
-1

Je rencontre des problèmes en appelant la méthode aleatorio() de ma classe. Je dois créer un point aléatoire p en utilisant la méthode aleatorio() de ma classe ponto, donc je peux l'utiliser dans ma classe retangulo avec la méthode interior(), pour vérifier si le point aléatoire se trouve à l'intérieur de chacun de mes deux rectangles, r1 et r2. Cependant, il semble que je ne suis pas en mesure de générer le point aléatoire p dont j'ai besoin.Comment appeler la méthode?

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) 

Comme suggéré j'ai ajouté l'impression de d1,d2 qui retourne: 0 0. d1 et d2 sont censés être le nombre de fois que mon point aléatoire tombe à l'intérieur r1 et r2, respectivement. Je suppose que 0 signifie soit que je ne génère pas le point aléatoire, soit que je ne compte simplement pas le nombre de fois où il tombe à l'intérieur correctement, mais je ne suis pas sûr de la raison.

+0

Veuillez fournir la preuve du problème. Par exemple, insérez quelques instructions d'impression pour afficher la sortie du problème. – Prune

+0

Je n'ai aucun problème à obtenir des numéros de l'appel. Qu'est-ce qui vous dit exactement qu'il n'y a pas de point aléatoire? – Prune

+0

Le seul problème que je peux trouver dans ce code est le complètement inutile 'pour r dans la gamme (10000):'. –

Répondre

0

Peut-être votre problème est la boucle, pas le dé de roulement. @AlanLeuthard est tout à fait correct: ce code génère un seul point, puis vérifie 10000 fois si ce même point est dans chacun des deux rectangles. Essayez de faire un nouveau point à chaque fois dans la boucle:

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 

Sortie:

397 1187 

Est-ce une meilleure apparence?

+0

OUI C'EST FAIT! Je me suis juste rendu compte de mon erreur, vous avez tous les deux raison de vérifier en fait toujours le même point, merci beaucoup :) –