出现错误:
原因:列表索引必须是整数,而不能是浮点数。python中x/y不是整除,只保留整数应该是x//y。/ 除 ,% 取模(取余) ,// 取整。
更改后代码:
Numbers = [1, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 63, 64, 65, 67, 69, 70, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 959]
length=len(Numbers)
if length%2==0:
mie=(Numbers[length//2]+Numbers[(length//2)-1])/2
else:
mie=Numbers[(length-1)//2]
print(f"中位数为{mie}")
参考代码:
# 创建列表Numbers
Numbers = [1, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 63, 64, 65, 67, 69, 70, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 959]
# TODO 使用len()函数获取列表Numbers的长度,并赋值给length
length = len(Numbers)
# 通过取模运算,判断length是奇数还是偶数
# TODO 如果取模运算返回余数为1,则长度是奇数
if (length % 2) == 1:
# TODO 通过整除运算,获取Numbers里中位数所在的索引,并赋值给n
n = len(Numbers)//2
# TODO 通过索引[n],获取Numbers的中位数,并赋值给Median
Median = Numbers[n]
# TODO 格式化输出:收入中位数为{Median}
print(f"收入中位数为{Median}")
# TODO 否则,长度是偶数
else:
# TODO 通过整除运算,获取Numbers里中间第二个数所在的索引,并赋值给n
n = len(Numbers) // 2
# TODO 通过索引[n-1]和[n],获取Numbers里中间两个数,并计算它们的均值
# 即中位数,将结果赋值给Median
Median = (Numbers[n]+Numbers[n-1])/2
# TODO 格式化输出:收入中位数为{Median}
print(f"收入中位数为{Median}")
注意:print(f" ") 主要作用就是格式化字符串,加上f以后,{“变量/表达式”},花括号里的变量和表达式就可以使用了。以 f 开头,包含的{}表达式在程序运行时会被表达式的值代替,如果字符串里面没有表达式,那么前面加不加f输出应该都一样。
pandas函数只能用于series和dataframe的运算,numpy用于数组运算。
方法2:
import numpy as np
Numbers = [1, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 63, 64, 65, 67, 69, 70, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 959]
num=np.array(Numbers)
mie=np.median(num)
print(mie)