0

これは、この1時間、私が理解できなかった非常に単純な解決策であるに違いありません。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)
4

3 に答える 3

2

ループ回数が多すぎます。ではcustom_sqrt、すべてのテスト ケースをループしようとしますが、最初のテスト ケースの値を返すため、残りのテスト ケースには到達しません。からループを削除して、custom_sqrt次のようにします。

def custom_sqrt(num):
    if num >= 0:
        return math.sqrt(num)
    else: 
        return 0
于 2012-06-10T22:25:56.277 に答える
0

あなたのcustom_sqrt関数は整数のリストを期待しており、それに単一の整数を与えています。

于 2012-06-10T22:26:16.733 に答える
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)
于 2012-06-10T22:36:35.350 に答える