我正在尝试计算整数列表的平均值、中位数和众数。 但是,我得到的错误(根据我的理解)指出我无法返回浮点答案。 我不明白为什么列表会这样。 我所做的只是对平均值和中位数进行基本的算术运算(使用模式的统计框架)。 输出应该只有 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
这里有一些事情...
- 数字
[x]表示数字中的第x个元素,因此像5.5这样的值不指向任何内容。
6.0 仍然是一个十进制数(或浮点数),我们想要一个整数,所以使用 int() 所以现在是 6。
理想情况下,您希望 median 函数在列表传递后返回这些值(因此返回 median_value)
您还必须对 if 语句的其他部分执行相同的操作(在此运行中未执行)。
median_value = (numbers[int((length - 1)/2))] + numbers[int((length + 1)/2)]) / 2
return median_value