【问题标题】:Same code in Python 3.x and Python 2.x gives different resultsPython 3.x 和 Python 2.x 中的相同代码给出不同的结果
【发布时间】:2018-12-24 11:02:41
【问题描述】:

我已经构建了一个计算中位数的函数(如名称所示)。

该函数接收一个整数列表,例如 [4,5,5,4] 并且应该输出 4,5。

代码:

def median(lst):
    lst.sort()
    a=int(len(lst)/2)
    if len(lst) % 2 == 0:
        med=float((lst[a]+lst[a-1])/2)
    else:
        med=lst[a]
    return med
print(median([4,5,5,4]))

这在使用 Python 3.x 时可以正常工作,但在 Python 2.x 中则不行。我做错了什么?

【问题讨论】:

标签: python python-3.x python-2.x division


【解决方案1】:

问题是您假设除法运算符在 Python 2 和 3 中是相同的。相反(改编自 mhlester):

  • 在 Python 2 中,/ 是整数除法(int 输入);

  • 在 Python 3 中,/ 是浮点除法;

  • 在 Python 2 和 3 中,// 是整数除法。

为了实现您的目标,有不同的解决方法。例如:

  1. 您可以确保您的除法中至少有一个操作数是浮点数。例如:

    def median(lst):
        lst.sort()
        a=int(len(lst)/float(2))
        if len(lst) % 2 == 0:
            med=float((lst[a]+lst[a-1])/float(2))
        else:
            med=lst[a]
        return med
    print(median([4,5,5,4])) 
    
  2. 您可以使用导入from __future__ import division(这需要在任何其他导入之前完成)。例如:

    from __future__ import division
    
    def median(lst):
        lst.sort()
        a=int(len(lst)/2)
        if len(lst) % 2 == 0:
            med=float((lst[a]+lst[a-1])/2)
        else:
            med=lst[a]
        return med
    print(median([4,5,5,4]))
    

【讨论】:

  • 谢谢,我 4 天前才开始编程,细微差别对我来说非常模糊。你的回答真的让事情变得清晰了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-23
  • 2021-05-03
  • 2011-04-18
  • 1970-01-01
相关资源
最近更新 更多