使用ARGV查找用户输入数字串的中值

你好,
我正在编写一种代码,它从命令行获取用户输入(一串数字)并打印出中位数.我正试图通过以下方式实现这一目标:
从sys导入参数
数字=argv[1:]
对于索引,枚举值(数字):
Nums[索引]=浮点(值)
打印编号[1:]+编号[:1]/2
我一直收到错误:
类型错误:不支持/:'list'和'int'的操作数类型

# 回答1


切片始终返回一个列表,即使该列表只有一个运算符.因此,Nums[1:]是一个列表,Nums[:1]也是.
内置的SUM(LIST,START=0)函数可能会对您有所帮助.
# 回答2


首先,让我们考虑数字序列的中位数的定义.中位数是指一半数字较大,一半较小的数字.因此,必须对列表进行排序.如果列表包含偶数个项目,则取中间值作为中间两个数字之间的平均值.以下函数返回排序后的数字列表中的中位数:

选择 | 换行 | 行号
  1. def median(s):
  2.     i = len(s)
  3.     if not i%2:
  4.         return (s[(i/2)-1]+s[i/2])/2.0
  5.     return s[i/2]

示例:

选择 | 换行 | 行号
  1. >>> s1 = "100 45 89 23 105 220 45 66 8 75"
  2. >>> s2 = "100 45 89 23 105 220 45 66 8 75 7"
  3. >>> sList = [float(num) for num in s1.split()]
  4. >>> sList.sort()
  5. >>> median(sList)
  6. 70.5
  7. >>> sList
  8. [8.0, 23.0, 45.0, 45.0, 66.0, 75.0, 89.0, 100.0, 105.0, 220.0]
  9. >>> sList = [float(num) for num in s2.split()]
  10. >>> sList.sort()
  11. >>> median(sList)
  12. 66.0
  13. >>> sList
  14. [7.0, 8.0, 23.0, 45.0, 45.0, 66.0, 75.0, 89.0, 100.0, 105.0, 220.0]
  15. >>> 

标签: python

添加新评论