Python3.x和Python2.x中的相同代码给出了不同的结果

2024-05-14 07:19:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我构建了一个函数来计算中间值(正如名字所示)。你知道吗

函数接收实例[4,5,5,4]的int列表,并应输出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]))

这在使用python3.x时可以正常工作,但在python2.x中不行。我做错了什么?你知道吗


Tags: 实例函数代码列表lenifdefmed
1条回答
网友
1楼 · 发布于 2024-05-14 07:19:25

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

  • 在python2中,/是整数除法(intinputs);

  • 在python3中,/是浮点除法;

  • 在python2和python3中,//是整数除法。

为了实现你想要的,有不同的解决方法。例如:

  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. 您可以使用importfrom __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]))
    

相关问题 更多 >

    热门问题