Python函数无法识别整数

时间:2018-02-28 23:45:01

标签: python list numbers int

我正在编写一个需要3个输入的函数,如果所有3个输入都是浮点数和/或整数,则它返回3的平均值,否则它将它们作为列表返回。

这就是我所拥有的:

def list3(a,b,c):
    """if all inputs are int/float return average"""
    l = [a, b, c]
    for t in l:
        if t is int or t is float:
            s = sum(l)
            y = len(l)
            x = float(s/y)
            return x
        else:
            return(l)

当我输入3个整数时它返回列表,我怎样才能让它将输入识别为整数?感谢

3 个答案:

答案 0 :(得分:1)

这是一种方式:

def list3(a,b,c):
    """if all inputs are int/float return average"""
    l = [a, b, c]

    return sum(l)/len(l) if all(isinstance(t, (int, float)) for t in l) else l

list3(1, 2, 6)    # 3.0
list3('a', 1, 2)  # ['a', 1, 2]

<强>解释

  • all(criteria for t in l)对生成器表达式应用惰性函数all,该表达式检查l中的所有项是整数还是浮点数。
  • isinstance通常首选检查type
  • if / else子句可以替换为ternary statement

答案 1 :(得分:1)

您可以使用异常处理。如果TypeError的所有元素都不是数字,则会引发l异常:

try:
    return float(sum(l)) / len(l) # Just in case it's Python 2.7
except TypeError:
    return l

答案 2 :(得分:1)

进行最小的更改即可使代码在Python 2或3中正常工作。

def list3(a, b, c):
    """if all inputs are int/float return average"""
    l = [a, b, c]
    s = 0
    for t in l:
        if type(t) is int or type(t) is float:
            s += t
        else:
            return l
    y = len(l)
    x = float(s) / y
    return x

您只需要将type(t)与int或float进行比较,并在除法之前将s转换为float。您还必须在返回之前完成所有列表成员的测试,否则s = sum(l)在[1,'str',6]之类的情况下会爆炸。