这必须是一个非常简单的解决方案,这在最后一小时没有找到我。我试图构建这个测试函数,其中test_cases列表的返回值应该与test_case_answers列表中的值匹配,但由于某种原因,测试用例1和测试用例2失败。当我打印测试用例的返回值时,它们返回正确的答案,但由于某种原因,测试用例1和测试用例2返回False。
import math
test_cases = [1, 9, -3]
test_case_answers = [1, 3, 0]
def custom_sqrt(num):
for i in range(len(test_cases)):
if test_cases[i] >= 0:
return math.sqrt(test_cases[i])
else:
return 0
for i in range(len(test_cases)):
if custom_sqrt(test_cases[i]) != test_case_answers[i]:
print "Test Case #", i, "failed!"
custom_sqrt(test_cases)
答案 0 :(得分:2)
你循环次数太多了。在custom_sqrt
中,您尝试遍历所有测试用例,但是您返回第一个测试用例的值,因此您永远不会完成其余的测试用例。从custom_sqrt
移除你的循环所以它只是:
def custom_sqrt(num):
if num >= 0:
return math.sqrt(num)
else:
return 0
答案 1 :(得分:0)
您的custom_sqrt
函数需要一个整数列表,并且您给它一个整数。
答案 2 :(得分:0)
将测试放在你的功能中可能不是一个好主意;你必须在完成后删除它,然后该功能不再与你测试的相同!
import math
def test_fn(fn, data):
for inp, exp in data:
outp = fn(inp)
if outp == exp:
print(" passed")
else:
print("*** FAILED: {}({}) returned {}, should be {}".format(fn.__name__, inp, outp, exp))
def custom_sqrt_a(num):
try:
return math.sqrt(num)
except ValueError:
return 0.
def custom_sqrt_b(num):
if num < 0.:
return 0.
else:
return math.sqrt(num)
custom_sqrt_test_data = [
( 1., 1.),
( 9., 3.),
(-3., 0.)
]
test_fn(custom_sqrt_a, custom_sqrt_test_data)
test_fn(custom_sqrt_b, custom_sqrt_test_data)