为了账号安全,请及时绑定邮箱和手机立即绑定

请问这段代码为什么执行不了

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 "传入变量为文本,无法计算平均值,请重新上传"


正在回答

4 回答

你输入  

print(average("a", "b"))
它会当作数组类型,而不是字符串,变成一个字符串应该就对了。


1 回复 有任何疑惑可以回复我~

通过循环次数来判断是否有字符,还可以只计算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


0 回复 有任何疑惑可以回复我~
elif isinstance(args, str):
        return "传入变量为文本,无法计算平均值,请重新上传"

这里的args 是tuple类型, for item in args:   中的 item 才是 str 类型。

for item in args:
    if isinstance(item, str):
        return "传入变量为文本,无法计算平均值,请重新上传"

在for循环里加入 if 就可以了。

1 回复 有任何疑惑可以回复我~

# -*- 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了

0 回复 有任何疑惑可以回复我~
#1

廖玉文_给力印

else: return"传入变量为文本,无法计算平均值,请重新上传" break 建议加上break,如在可变参数中发现一个str,立刻跳出for循环。 要不可变参数如果是两个str,那会在输出中出现两次"传入变量为文本,无法计算平均值,请重新上传"。
2021-01-12 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

请问这段代码为什么执行不了

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信