2017-06-12 35 views
1

蟒蛇2.7:简单平均收益 “不正确” 与否,价值

def median(lista): 
    lista.sort() 
    print(lista) 
    x = len(lista) 
    if x == 1: 
     return lista[0] 
    elif len(lista) % 2 != 0: 
     return lista[((x-1)/2)] 
    else: 
     y = lista[(x/2) - 1] 
     z = lista[(x/2)] 
     print (y,z) 
     return (y + z)/2 

print(median([1,6,3,4,2,5])) 

显示:

[1, 2, 3, 4, 5, 6] 
(3, 4) 
3 
None 

何乐而不为3.5?

谢谢!

回答

5

只是做回总和/ 2.0,而不是总和/ 2

默认情况下,答案是一个整数,除非明确说明。

+1

非常感谢你! – costinv

1

@Nick M的答案为您提供了解决方案,但我想补充一些解释。

在Python有不同的变量类型的数字,最重要的是intfloat

type(1) 
>>> int 
type(1.0) 
>>> float 

当你与整数操作(int类型的变量),你得到的结果也是类型int

5/2 
>>> 2 

你可以将整数和浮点数混合在一起,发生类型强制转换,整数内部转换为浮点数,得到浮点数SULT:

int(1.0) 
>>> 1 
float(1) 
>>> 1.0 

我希望这有助于你更好地理解:

5/2.0 
>>> 2.5 

您还可以使用方法int()float()显式转换变量类型。

编辑:在Python 2.7数字类型的官方文件: https://docs.python.org/2/library/stdtypes.html#numeric-types-int-float-long-complex

+1

Python 2只是为了冗长,python 3没有地板分隔。 – Rosh

+0

@rosh谢谢你的评论。这个问题明确地说明了Python 2.7,我的答案中的所有内容都只与这个版本有关。 – cezar

+0

这不是对抗性的,你把'在python',我没有阅读页面上的所有内容。不要穿衬衫。 – Rosh