python codeacademy 上的数学在除以 int 与 float 时表现得很奇怪。动态 typed/cast 个问题

python math on codeacademy acting weird when dividing by int vs float. dynamically typed/cast issues

好的,所以问题要求在数字列表中找到中位数(中间数)。如果列表中的数字数量为偶数 return 中间两个数字的平均值。

我发现有些代码在网站上不起作用,但在 PyCharm 中却有效。我想这是因为代码学院学习python上的一些代码是旧的(例如它们的打印功能和raw_input()现在已被弃用)

以下不适用于 CodeAcademy

def median(ls):
    ls = sorted(ls)
    length = len(ls)
    median = 0.0
    temp = 0

    if length % 2 == 0:
        temp = int(length / 2)
        median = float (ls[temp-1] + ls[temp]) / 2 #why is this a problem?
        return median
    else:
        temp=int((length-1) / 2)
        median = ls[temp]
        return median

注:上面returns 4.0 而不是4.5 传[4,5,5,4]

然而,当我像下面那样将 /2 更改为 /2.0 时,它会起作用。

def median(ls):
    ls = sorted(ls)
    length = len(ls)
    median = 0.0
    temp = 0

    if length % 2 == 0:
        temp = int(length / 2)
        median = float (ls[temp-1] + ls[temp]) / 2.0 #here
        return median
    else:
        temp=int((length-1) / 2)
        median = ls[temp]
        return median

注意:以上正确 returns 4.5 当通过 [4,5,5,4]

所以即使我已经找到了解决问题的方法,我还是想知道为什么会发生这种情况,即使两个代码示例都可以在 python 的较新版本中工作,但一个就是更多正确或 'cleaner' 为什么?

好的,所以我认为第一个返回奇怪结果的代码示例中发生的是 Python 将前两个数字转换为整数以便除以整数(传递 [4,4 时产生 4 ,5,5](排序后))然后投出那个答案 (4) 给一个浮点数 4.0。但是当我除以 2.0 时,它首先将这些数字转换为浮点数,给出正确的 4.5。这也允许我删除显式转换为 float 并且在测试时在代码学院工作