代码不返回float

时间:2014-03-07 11:24:37

标签: python

代码为输入4.0返回([4 ,5 ,5 ,4]),它应返回4.5并将4/5分开。 我怎样才能解决这个问题? 编辑:我试图找到列表的中位数。

    def median(lis):
    srt_list = lis
    srt_list.sort()
    new_lis = srt_list[0:len(lis)//2]
    new_lis_last = srt_list[len(lis)//2:]
    if len(srt_list) % 2 == 0:
        lst_index = new_lis[len(new_lis)-1]
        frs_index = new_lis_last[0]
        med = (frs_index + lst_index) / 2.0
        print med  
    else:
        frs_index = new_lis_last[0]
print median([7,3,1,4])

4 个答案:

答案 0 :(得分:4)

您在

中使用了分区运算符(//
med = (frs_index) + lst_index) // float(2.0)

将其更改为使用/,就像这样

med = (frs_index) + lst_index) / float(2.0)

示例:

print 5/2.0    # 2.5
print 5//2.0   # 2.0

答案 1 :(得分:4)

即使你应该使用/而不是//,你也永远不会使用你的división:

med = (frs_index) + lst_index) // float(2.0)

因为你的2 for循环里面有一个return语句:

    for i in range(len(new_lis)):
        lst_index = new_lis[len(new_lis)-1]
        return float(lst_index) # If arriving here, you function return new_lis[len(new_lis)-1] and finish
        break
    for i in range(len(new_lis_last)):
        frs_index = new_lis_last[0]
        return float(frs_index) # If arriving here, you function return new_lis_last[0] and finish
        break

答案 2 :(得分:2)

您正在使用//分区。如果您想使用 float 部门,请使用/

med = (frs_index) + lst_index) / 2.0

无需将2.0转换为浮点数,已经是浮点字面值。

请注意,以下内容将对lis进行排序:

srt_list = lis
srt_list.sort()

srt_list是对同一列表对象的另一个引用,不是副本。

代码:

for i in range(len(new_lis)):
    lst_index = new_lis[len(new_lis)-1]
    return float(lst_index)
    break

忽略列表索引,因为它只返回float(new_lis[-1]);你可以在这里放下循环。 return之后的所有内容都不会被执行,因为此时退出了该函数。

这适用于所有3个循环;目前尚不清楚你想用这些循环实现什么目的。

答案 3 :(得分:1)

虽然在

中是正确的
med = (frs_index) + lst_index) // float(2.0)

您应该//替换/,这不是4.0而不是4.5

的原因

编写代码的方式,大多数逻辑都没有被执行。

if len(srt_list) % 2 == 0:
    #print "even"
    for i in range(len(new_lis)):
        lst_index = new_lis[len(new_lis)-1]
        return float(lst_index) #This is hit and returns
        break

大致上你的代码所做的是拆分列表,如果第一个列表甚至被加长,则返回第一个元素的浮点表示。我确信这不是你想要做的。