我正在编写一个需要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个整数时它返回列表,我怎样才能让它将输入识别为整数?感谢
答案 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]之类的情况下会爆炸。