如何使用 Python 中的函数返回带有列表的算术运算结果



我正在尝试计算整数列表的平均值、中位数和众数。 但是,我得到的错误(根据我的理解)指出我无法返回浮点答案。 我不明白为什么列表会这样。 我所做的只是对平均值和中位数进行基本的算术运算(使用模式的统计框架)。 输出应该只有 1 个答案。

这是我的代码:

from statistics import mode
listOfNumbers = [1, 2, 6, 7, 8, 9, 3, 4, 5, 10, 10]
listOfNumbers.sort()
length = len(listOfNumbers)
def median(numbers):
  if((len(list)) % 2 == 0):
    median = (listOfNumbers[(length)/2] + listOfNumbers[(length)/2-1]) / 2
  else:
    median = listOfNumbers[(length-1)/2]
  return
def meanMedianMode(numbers):
    # TODO your code here!
    meanOfNumbers = (sum(numbers))/(len(numbers))
    medianOfNumbers = median(numbers)
    modeOfNumbers = mode(numbers)
    print("The mean of the numbers is: " + str(meanOfNumbers))
    print("The median of the numbers is: " + str(medianOfNumbers))
    print("The mode of the numbers is: " + str(modeOfNumbers))
meanMedianMode(listOfNumbers)

这是我的输出:

TypeError                                 Traceback (most recent call last)
<ipython-input-27-03d94981e27d> in <module>()
     21     print("The mode of the numbers is: " + str(modeOfNumbers))
     22 
---> 23 meanMedianMode(listOfNumbers)
     24 
<ipython-input-27-03d94981e27d> in meanMedianMode(numbers)
     15     # TODO your code here!
     16     meanOfNumbers = (sum(numbers))/(len(numbers))
---> 17     medianOfNumbers = median(numbers)
     18     modeOfNumbers = mode(numbers)
     19     print("The mean of the numbers is: " + str(meanOfNumbers))
<ipython-input-27-03d94981e27d> in median(numbers)
      9     median = (listOfNumbers[(length)/2] + listOfNumbers[(length)/2-1]) / 2
     10   else:
---> 11     median = listOfNumbers[(length-1)/2]
     12   return
     13 
TypeError: list indices must be integers or slices, not float

问题出在这一行:

median = listOfNumbers[(length-1)/2]

在python 3中,(length-1)/2是一个float,而不是一个int,因此错误list indices must be integers or slices, not float

最简单的解决方法是将结果投射回int

...
median = listOfNumbers[int((length - 1) / 2)]
...

事实上,我会像这样重构你的整个median()函数,因为你混合了局部和全局变量,并且不返回任何内容:

def median(numbers):
    length = len(numbers)
    if length % 2 == 0:
        return (listOfNumbers[int(length / 2)] + listOfNumbers[int(length / 2) - 1]) / 2
    else:
        return listOfNumbers[int((length - 1) / 2)]

好的修复:

    median_value = numbers[int((length - 1 )/2)]
    return median_value

这里有一些事情...

    数字
  1. [x]表示数字中的第x个元素,因此像5.5这样的值不指向任何内容。

  2. 6.0 仍然是一个十进制数(或浮点数),我们想要一个整数,所以使用 int() 所以现在是 6。

  3. 理想情况下,您希望 median 函数在列表传递后返回这些值(因此返回 median_value)

您还必须对 if 语句的其他部分执行相同的操作(在此运行中未执行)。

   median_value = (numbers[int((length - 1)/2))] + numbers[int((length + 1)/2)]) / 2
   return median_value

最新更新