函数不返回布尔值,总是返回None

时间:2013-10-05 21:36:16

标签: python

以下代码返回None而不是True,当输入显示它应该明确返回True时,这里的错误是什么?

def checkminus(j):
    linp = []
    for a in j:
        if a == '-':
            if len(linp) > 0:
                linp = []
                return False
                quit()
            else:
                linp.append(a)
        else:
            linp.append(a)
    checklen(linp)
def checklen(k):
    l = len(k)
    print(l)
    if l>0:
        return True
    else:
        return False

print(checkminus(['-','5','5','8','2']))

1 个答案:

答案 0 :(得分:4)

您在调用时忘记返回checklen()返回值:

checklen(linp)

在那里添加return

return checklen(linp)

请注意,>已经为您提供了TrueFalse,因此您可以直接将其返回:

def checklen(k):
    l = len(k)
    return l > 0

另一种方法是使用bool(l);列表为空False,否则为True

简化checkminus()

def checkminus(j):
    linp = []
    for a in j:
        if a == '-':
            if linp:
                return False
        linp.append(a)
    return bool(linp)

这听起来好像你想确保-仅在列表的开头,或根本不存在。

如果是这样,这更容易:

def checkminus(j):
    return len(j) > 0 and '-' not in j[1:]