慕UI0571221
2020-08-31 16:30
def average(*args): sum = 0 if len(args) == 0: return 0 elif isinstance(args, str): return "传入变量为文本,无法计算平均值,请重新上传" else: for item in args: sum += item avg = sum / len(args) return avg print(average()) print(average("a", "b")) print(average(1, 21)) print(average(1.5, 3.5, 5, 5)) 执行这段代码的时候为什么没有进行这段的校验呢?
elif isinstance(args, str): return "传入变量为文本,无法计算平均值,请重新上传"
你输入
print(average("a", "b"))
它会当作数组类型,而不是字符串,变成一个字符串应该就对了。
通过循环次数来判断是否有字符,还可以只计算tuple里数字元素的平均值
def average(*args):
if len(args) > 0:
sum = 0
i = 0
for item in args:
if isinstance(item,int) or isinstance(item,float):
sum += item
i += 1
if i > 0 :
avg = sum / i
return avg
else:
print('传参中没有数字型元素')
else:
print('传参为空')
return None
elif isinstance(args, str): return "传入变量为文本,无法计算平均值,请重新上传"
这里的args 是tuple类型, for item in args: 中的 item 才是 str 类型。
for item in args: if isinstance(item, str): return "传入变量为文本,无法计算平均值,请重新上传"
在for循环里加入 if 就可以了。
# -*- coding: UTF-8 -*-
def average(*args):
sum = 0
if len(args) == 0:
return 0
else:
for i in args:
if isinstance(i,(int,float)):
sum += i
avg = sum / len(args)
else:
return"传入变量为文本,无法计算平均值,请重新上传"
return avg
我是根据你的这样改的,就OK了
Python3 入门教程(新版)
154153 学习 · 1075 问题
相似问题