Codeboademy上的python数学在划分int vs float时表现得很奇怪。动态输入/转换问题

时间:2017-07-14 07:33:22

标签: python casting deprecated

好的,问题是要求在数字列表中找到中位数(中间数)。如果列表具有偶数数字,则返回两个中间数的平均值。

我发现一些代码在网站上不起作用,但在PyCharm中起作用。我想这是因为代码学院的学习python的一些代码是旧的(例如他们的print函数和raw_input()现在已被弃用)

以下内容不适用于CodeAcademy

var types = {};

for(var i=1; i<=3; i++){
types["ashish"+i] = 'The value of dynamic variable, val';
}

注意:传递[4,5,5,4]

时,上面返回4.0而不是4.5

然而,当我将/ 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 #why is this a problem?
        return median
    else:
        temp=int((length-1) / 2)
        median = ls[temp]
        return median

注意:传递[4,5,5,4]

时,上面正确返回4.5

所以,即使我已经想出如何解决这个问题,我想知道为什么它发生在即使两个代码示例都在较新版本的python中工作,一个更正确或'更清洁'和为什么?

1 个答案:

答案 0 :(得分:0)

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