为什么以下使用max()的python代码单向工作而不是另一种?

时间:2015-08-28 19:01:49

标签: python

我正在做exerciseism.io python测试用例,所以我是这种语言的新手。
传递导致整数的函数到max()函数是否存在问题?

Python 3

此代码不起作用:
错误消息是TypeError:' int'对象不可调用,
如果max函数没有恰好两个参数,则会出现错误消息 注意:无论我是否在max函数中包含或排除了(int),代码都会失败。

calculate_single函数返回整数列表的乘积。

数字是数字列表的列表。

    ...
    largest = 0
    for digitlist in digits:
        largest = max((int)(calculate_single(digitlist)),largest)
    return largest

def calculate_single (digitlist):  
    current = 1  
    for digit in digitlist:  
        current *= (int)(digit)  
    return current

此代码确实有效。我只是想知道为什么第一个没有用。

    ...
    largest = 0
    for digitlist in digits:
        largest = calculate_single(digitlist,largest)
    return largest

def calculate_single (digitlist,largest):
    current = 1
    for digit in digitlist:
        current *= (int)(digit)
    return max(current,largest)

2 个答案:

答案 0 :(得分:0)

我尝试了两个版本的代码,似乎两者都很好。 版本1:

def calculate_single(digitlist, largest):
    current = 1
    for digit in digitlist:
    current *= (int)(digit)
    return max(current, largest)

def calculate(digits):
    largest = 0
    for digitlist in digits:
        #print (largest)
        largest = calculate_single(digitlist, largest)
        #print (largest)
    return largest

if __name__ == '__main__':
    lst = [[2, 5, 7, 4.2, 3], [3.6, 6, 4, 2, 1], [5, 5, 5, 10,10]]
    big = calculate(lst)
    print(big)

版本2:

def calculate_single(digitlist):
    current = 1
    for digit in digitlist:
        current *= (int)(digit)
    return current

def calculate(digits):
    largest = 0
    for digitlist in digits:
        #print (largest)
        largest = max((calculate_single(digitlist)), largest)
        #print (largest)
    return largest

if __name__ == '__main__':
    lst = [[2, 5, 7, 4.2, 3], [3.6, 6, 4, 2, 1], [5, 5, 5, 10,10]]
    #lst = [2, 3, 5, 8]
    big = calculate(lst)
    print(big)

我认为主要的是数字列表是一个数字和数字列表是一个列表列表。因此,应将列表传递给calculate_single(),并将列表列表传递给calculate()。如果将列表传递给calculate(),则会引发TypeError。在两个版本中,无论使用/ out int()

,max()似乎都很好

答案 1 :(得分:-2)

在python中投射到int的方式是:int( )而不是(int)