2009-05-21 3 views
2

Учитывая следующий код:Урок Python не работает 0.0! = -0.0 - что дает?

def slope(x1, y1, x2, y2): 
    """ 
     >>> slope(5, 3, 4, 2) 
     1.0 
     >>> slope(1, 2, 3, 2) 
     0.0 
     >>> slope(1, 2, 3, 3) 
     0.5 
     >>> slope(2, 4, 1, 2) 
     2.0 
    """ 
    xa = float (x1) 
    xb = float (x2) 
    ya = float (y1) 
    yb = float (y2) 
    return (ya-yb)/(xa-xb) 

if name_ == '__main__': 
    import doctest 
    doctest.testmod() 

Второй doctest терпит неудачу:

Failed example: 
    slope(1, 2, 3, 2) 
Expected: 
    0.0 
Got: 
    -0.0 

Однако, все мы знаем, что -0.0 == 0.0. Является ли doctest проводящим сравнение строк для проверки результатов здесь? Почему второй тест не прошел?

ответ

9

Это не удается, потому что doctest делает сравнение строк. Он просто проверяет, совпадает ли вывод, что был бы выведен, если код был выполнен на Python интерактивного интерпретатора:

>>> 0/-2 
-0.0 

Edit:: Ссылка referenced по Daniel Lew ниже дает еще несколько советов о том, как это работает и как вы можете влиять на это поведение.

+2

Ссылка ссылки: http://docs.python.org/library/doctest.html#doctest.OutputChecker.check_output –

Смежные вопросы