2017-06-01 12 views
-1

私のクラスのメソッドaleatorio()を呼び出す際に問題があります。私はランダムなポイントが私のpontoクラスのメソッドを使用してランダムなポイントpを作成する必要があるので、私はクラスのinterior()メソッドでそれを使用することができます、 r1およびr2。しかし、それは私が必要とするランダムな点pを生成することができないようです。 0 0は:メソッドを呼び出す方法は?

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のプリントを追加提案しました。 d1d2は、私のランダムなポイントがr1r2にそれぞれ入る回数であると考えられます。私は0だと思いますが、私がランダムな点を生成していないこと、または正しく内部に入っている回数を数えていないことを意味していますが、理由は分かりません。

+0

問題の徴候を示してください。たとえば、いくつかのprint文を挿入して問題の出力を表示します。 – Prune

+0

私は電話から番号を取得するのに問題はありません。まさに、ランダムな点がないことをあなたに教えてくれるものは何ですか? – Prune

+0

このコードで見つけることができる唯一の問題は、r in range(10000)ではまったく役に立たないことです。 –

答えて

0

おそらく、あなたの問題はループであり、ダイスの回転ではありません。 @AlanLeuthardは非常に正しいです。このコードは単一の点を生成し、次に同じ点が2つの矩形のそれぞれにあるかどうかを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 

これはよく見えるのか?

+0

はい!ちょうど私の間違いを理解した、あなたは両方の権利を実際に常に同じ点をチェックしていた、ありがとうございます:) –

関連する問題