无法弄清楚这个卡塔

时间:2017-08-19 00:01:19

标签: python error-handling

我正在CodeWars中使用这个Kata,我通过了除了一个测试之外的所有测试,但它没有说出错误是什么。描述说要检查两个列表的多重性。列表a2是列表a1的正方形列表。我需要检查a1是否为a2中所有项的平方根,如果数组为空,则返回false,None,或者平方根不在a1中。

我希望得到你可能有的任何提示,不仅是功能(使它更多Pythonic),而是错误处理。我错过了什么?为什么不通过?提前谢谢。

def comp(a1, a2):
    if a1 == [] or a2 == []:
        return False
    if a1 == None or a2 == None:
        return False
    pos_count = 0
    neg_count = 0
    for num in set(a2):
        if num**0.5 in set(a1):
            pos_count += 1
        else:
            neg_count += 1
    if neg_count > 0:
        return False
    else:
        return True

1 个答案:

答案 0 :(得分:0)

您可以改进您发布的评论代码:

def comp(a1, a2):
    if a1 is None or a2 is None:
        return False
    num_squared = []
    for num1 in a1:
        num_squared.append(num1**2)
    if set(a2) == set(num_squared):
        return True
    else:
        return False

您可以使用理解表达式构建序列。您可以通过将方块附加到空列表来构建列表,但您可以这样做:

num_squared = [num ** 2 for num in a1]

您创建了一个临时set对象set(num_squared)。但是,您可以使用与列表相同的方式构建集合:

num_squared = {num ** 2 for num in a1}

如果你有一个布尔表达式,然后返回True else False,你可以用表达式本身替换它:

return set(a2) == set(num_squared)

应用所有这些更改,您可以获得:

def comp(a1, a2):
    if a1 is None or a2 is None:
        return False
    else:
        return set(a2) == {num ** 2 for num in a1}

编辑:请注意:

空列表在布尔表达式中计算为False

>>> bool([])
False

此外,None评估False

>>> bool(None)
False