main()接受1个位置参数,但给出了2个位置参数

问题描述 投票:1回答:2

我有这个输入。 [(10,12),(8,15),(20,8),(2,-10)]我必须返回元组对之间的最大差值。所以我写了这段代码。

def main(a, b):
    if a < 0 or b < 0:
        return max(a, b) - min(a, b)
    if a > 0 and b > 0:
        return max(a, b) - min(a, b)
    if a > 0 and b > 0 :
        return max(a, b) - min(a, b)

max(main(10,12),main(8,15), main(20,8), main(2,-10))

并且有效。好。但是main(a,b)必须是1个参数。像main(i)。当我这样做时,我得到这个错误(main()接受1个位置参数,但给出2个)。然后我尝试创建一个类来解决此问题,但它给出了此错误。(在'tuple'和'int'的实例之间不支持'<

Suggest 1:
def main(i):
    a,b = i
    if a < 0 or b < 0:
        return max(a, b) - min(a, b)
    if a > 0 and b > 0:
        return max(a, b) - min(a, b)
max(main(10,12),main(8,15), main(20,8), main(2,-10))
Output
----> 7 max(main(10,12),main(8,15), main(20,8), main(2,-10))

TypeError: main() takes 1 positional argument but 2 were given


Suggest 2:
def main(i):
    if a < 0 or b < 0:
        return max(a, b) - min(a, b)
    if a > 0 and b > 0:
        return max(a, b) - min(a, b)

max(main(*t) for t in [(10,12),(8,15),(20,8),(2,-10)])

Output
----> 7 max(main(*t) for t in [(10,12),(8,15),(20,8),(2,-10)])

TypeError: main() takes 1 positional argument but 2 were given
python function tuples
2个回答
2
投票

您可以将abs()与生成器一起使用以简化此操作:

abs()

0
投票

您可以将其作为元组发送,然后像这样打开它的包装

>>> l = [(10, 12), (8, 15), (20, 8), (2, -10)]
>>> max(abs(a-b) for a, b in l)
12

注意,有更好的方法来实现您想要做的事情(检查其他答案/评论),我只是向您展示如何使当前的实现适应您的需要。

© www.soinside.com 2019 - 2024. All rights reserved.