[英]Why does the following python code using max() work one way but not another?
我正在做 exercism.io python 测试用例,所以我是这门语言的新手。
将导致整数的函数传递给 max() 函数是否存在问题?
蟒蛇 3
此代码不起作用:
错误消息是 TypeError: 'int' object is not callable,
如果 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)
我尝试了你的代码的两个版本,似乎都很好。 版本 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)
我认为最重要的是 digitlist 是一个数字列表,digits 是一个列表列表。 所以一个列表应该传递给calculate_single(),一个列表应该传递给calculate()。 如果一个列表被传递给calculate(),它会引发TypeError。 在两个版本中 max() 似乎都不错,无论是否使用 int()
在 python 中转换为int
是通过以下方式完成的: int( )而不是(int)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.