2016-05-20 3 views
0

Я тестирую свой код с этими элементами и получил 4.6, но когда я попытался его утвердить, интерпретатор вернет ошибку утверждения.Почему я получаю ошибку утверждения, даже если возвращаемое значение одинаково?

def function(x): 
    a = 0 
    x.remove(min(x)) 
    x.remove(max(x)) 
    for i in x: 
     a = a + i 
    return float(1)/len(x)*a 

assert function([3, 1, 2, 5, 9, 11, 4]) == 4.6 
+0

'функция печати ([3, 1, 2, 5, 9, 11, 4]) 'дает' 8.388608e-17'. –

+0

О, извините, я думаю, что допустил ошибку в своем коде, но код все еще g от ошибки утверждения. –

+3

Попробуйте 'assert abs (function (...) - 4.6) <0.001' - это может быть проблема точности поплавка. – jonrsharpe

ответ

0

Извините, что я не могу комментировать, но похоже, что @jonsharpe прав. есть проблема с поплавковой точностью. Я положил print abs(test - 4.6) < 0.001, и это вернулось. Я также импортирован UnitTest и использовал assertEqual (я выложу код ниже:

import unittest 
def function(x): 
    a = 0 
    x.remove(min(x)) 
    x.remove(max(x)) 
    for i in x: 
     a = a + i 
    return float(1)/len(x)*a 

tc = unittest.TestCase('__init__') 
tc.assertEqual(function([3, 1, 2, 5, 9, 11, 4]), 4.6) 

От создания экземпляра теста и запуска этого он показал немного больше того, что основная ошибка Вот что я. получил в результате от запуска этого:

Traceback (most recent call last): 
File "test.py", line 12, in <module> 
    tc.assertEqual(function([3, 1, 2, 5, 9, 11, 4]), 4.6) 
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/case.py", line 515, in assertEqual 
    assertion_func(first, second, msg=msg) 
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/case.py", line 508, in _baseAssertEqual 
    raise self.failureException(msg) 
AssertionError: 4.6000000000000005 != 4.6 

Я надеюсь, что это может помочь вам понять вашу проблему и найти решение этой проблемы

+0

unittest имеет функцию assertAlmostEqual(): https://docs.python.org/2/library/unittest.html#unittest.TestCase.assertAlmostEqual – JETM

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