сравнение int float с проблемой python

У меня есть этот код:

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.y оценивается как true, а затем в исключении оно оценивается как false

Я использую питон 2.6.6


person titus    schedule 11.04.2011    source источник
comment
Потому что вы изменили p1.y (через p.y) здесь? p.y=w.y1 if m&0x10 else w.y2-1   -  person Amber    schedule 11.04.2011
comment
спасибо Эмбер, полностью пропустил это :|   -  person titus    schedule 11.04.2011


Ответы (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 integer, а не ZeroDivisionError: integer division or modulo by zero

Ее действительно легко решить. изменить if p1.y!=p2.y: строку 4 на If p1.y-p2.y != 0:

person KilledKenny    schedule 11.04.2011