【问题标题】:Function that admit list with two or three numbers [duplicate]允许具有两个或三个数字的列表的函数[重复]
【发布时间】:2018-05-22 15:08:03
【问题描述】:

该函数定义为使用列表的三个数字,然后当我使用 n2 列表时,它可以完美运行。但它不使用 n1,因为它只有 2 个参数,当它试图找到 n1[2] 时会出错。

如何创建一个允许不同长度列表的函数? (仅接受 2 或 3,我不需要更多

谢谢你:)

def sum (n):

    return n[0] + n[1] + n[2]

n1 = [1, 2]
n2 = [1, 2 ,3]

print( sum(n2))

显然,这只是整个程序的简化。但这是说明性的

【问题讨论】:

  • 顺便说一句,有一个内置的 sum 函数可以对任意长度的列表求和。但我想这是一个练习,你应该编写自己的版本。
  • @Jean-FrançoisFabre 这不是一个很好的欺骗目标,因为 OP 想要一个接受单个列表参数的函数,而不是多个数字参数。
  • 同意。我没有重新打开,因为它是重复的。改变了目标。如果您找到更好的,请成为我的客人并编辑/添加它

标签: python python-3.x


【解决方案1】:

您可以非常明确地说明允许的输入范围:

def my_sum(n):
    if len(n) == 2:
        return n[0] + n[1]
    elif len(n) == 3:
        return n[0] + n[1] + n[2]
    else:
        raise ValueError("The list must be exactly 2 or 3 elements long.")

我将您的函数重命名为 my_sum,因为 sum 是一个 built-in python 函数名称,并且声明与它们同名的函数通常不是一个好主意。

【讨论】:

    【解决方案2】:

    让它摄取 args 和 sum。

    def sum1(val_list):
    
        total = 0
        for x in val_list:
            total += x
    
        return total
    

    简单地说

    def sum1(val_list):
    
        return sum(val_list)
    

    如果你愿意,如果它超过 3,你总是可以引发错误。

    def sum1(val_list):
    
        if len(val_list) > 3:
            raise ValueError()
    
        return sum(val_list)
    

    【讨论】:

    • 也可能是无限递归:)
    • 啊。大声笑我困了。谢谢你抓住那个。现已修复
    • @PM2Ring 谢谢。我在手机上执行此操作,但没有收到列表输入。解决了问题
    猜你喜欢
    • 2022-10-14
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多