簡體   English   中英

返回值應該是一個列表,但不會按預期返回?! - Python新手

[英]The return value should be a list but doesn't return as expected?! - Python newbie

這必須是一個非常簡單的解決方案,在最后一小時沒有找到我。 我試圖構建這個測試函數,其中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)

你循環次數太多了。 custom_sqrt ,您嘗試遍歷所有測試用例,但是返回第一個測試用例的值,因此您永遠不會完成其余的測試用例。 custom_sqrt刪除你的循環所以它只是:

def custom_sqrt(num):
    if num >= 0:
        return math.sqrt(num)
    else: 
        return 0

你的custom_sqrt函數需要一個整數列表,你給它一個整數。

將測試放在你的功能中可能不是一個好主意; 一旦完成,你必須刪除它,然后該功能不再與你測試的功能相同!

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM