0

私はこのコードを持っています:

def fit(self,p1,p2,w):
    p=p1    
    m=self.bit(p,w)
    if p1.y!=p2.y:
        if m&0x30:
            p.y=w.y1 if m&0x10 else w.y2-1
            try:
                p.x=int((p.y-p2.y)*(p1.x-p2.x)/(p1.y-p2.y)+p2.x)
            except Exception,e:
                print e
                print p1.y!=p2.y        
                print p1.y,p2.y

出力は次のとおりです。

cannot convert float NaN to integer  
False  
199 199.0

p1.y!=p2.ytrue と評価され、例外で false と評価される理由がわかりません

私はpython 2.6.6を実行しています

4

1 に答える 1

1

あなたは分割してい0/0ます!

# (p.y-p2.y)*(p1.x-p2.x)
x = p.y - p2.y
x = 199 - 199.0 = 0
x1 = p1.x-p2.x
0 * x1 = 0* p1.x - 0* p2.x

これの意味は

(p.y-p2.y)*(p1.x-p2.x) = 0

今、私たちはこれによって 0 を考案しています:

#(p1.y-p2.y)
p1.y-p2.y
x = p.y - p2.y
x = 199 - 199.0 = 0

したがって、この場合、あなたはやろうとしています0/0

次に、すべての最後に追加しようとすると、エラーが発生しp2.x、エラーが発生するのはそのためだと思いますcannot convert float NaN to integerZeroDivisionError: integer division or modulo by zero

解決するのは本当に簡単です。if p1.y!=p2.y:4行目を次のように変更If p1.y-p2.y != 0:

于 2011-04-11T08:01:44.417 に答える