问答详情
源自:9-7 Python函数使用可变参数

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

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


提问者:慕UI0571221 2020-08-31 16:30

个回答

  • weibo_N哦7788_0
    2020-09-01 17:11:53
    已采纳

    你输入  

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


  • 禾希禾希
    2021-03-01 17:49:46

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


  • 粉条慕慕
    2021-01-17 19:50:20

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

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

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

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

  • 炎武风曌
    2020-09-08 16:34:01

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