首页 > 解决方案 > 获取 ZeroDivisionError:尝试找到中心平均值时除以零错误

问题描述

我被要求:返回整数数组的“居中”平均值,我们会说这是值的平均平均值,除了忽略数组中的最大值和最小值。如果最小值有多个副本,则只忽略一个副本,最大值也是如此。使用 int 除法产生最终平均值。您可以假设数组的长度为 3 或更多。

我让大多数用例正确返回,但我得到:Getting ZeroDivisionError:在少数情况下除以零错误。任何帮助,将不胜感激。

注意:我不允许使用任何导入的库。

我的代码:

def centered_average(nums):
    mx = max(nums)
    #print(mx)


    mn = min(nums)
    #print(mx)

    n_lst = []

    for n in nums:
        if n != mx and n != mn:
            n_lst.append(n)

    #print(n_lst)        
    return int(sum(n_lst) / len(n_lst))

用例我收到错误:

centered_average([1, 1, 100])
centered_average([7, 7, 7])
centered_average([1, 1, 99, 99])
centered_average([4, 4, 4, 4, 5])

错误:

ZeroDivisionError: division by zero

标签: python

解决方案


您的代码的问题是,如果多次出现 min 或 max 您会忽略所有这些,这与您的要求不同:

只忽略一份

用这个:

def centered_average(nums):
    n_lst = sorted(nums)[1:-1]
    return sum(n_lst)// len(n_lst)

代码简短而简单。对列表进行排序,忽略第一个和最后一个值,即minmax。返回获得列表的平均值。注意:该//符号指的是整数除法,可以避免以后进行类型转换。


推荐阅读