【问题标题】:List indexing semantic error列表索引语义错误
【发布时间】:2018-08-29 13:59:39
【问题描述】:

我正在尝试创建一个函数,该函数将列表 (a) 和整数 (x) 作为输入,如果列表包含 3 个元素的总和为 x 的值,则返回 true。执行我编写的代码时遇到语义错误 - 请告知!

def sum_tri(a, x):

    for i in range(len(a) - 1):
        for j in range(i, len(a)):
            for k in range(j, len(a)):
                if a[i] + a[j] + a[k] == x:
                    return True
                else:
                    return False

>>> a = [1, 5, 8, 2, 6, 55, 90]
>>> x = 103
>>> sum_tri(a, x)
False                # However it should return True

【问题讨论】:

    标签: python list sum boolean range


    【解决方案1】:

    您在第一次失败时返回False,但只有在所有选项都失败时才应该这样做:

    def sum_tri(a, x):
        for i in range(len(a) - 1):
            for j in range(i, len(a)):
                for k in range(j, len(a)):
                    if a[i] + a[j] + a[k] == x:
                        return True
        return False
    a = [1, 5, 8, 2, 6, 55, 90]
    x = 103
    print sum_tri(a, x)
    
    >>>True
    

    另外您需要将内部 for 循环的限制从 len(a) 更改为 len(a) - 1,否则您会得到:

    a,x = [1,2,3],8
    print sum_tri(a, x)
    
    >>>True
    

    因为第 2 和第 3 循环将接受最后一个元素(在本例中为 3)...


    最终的函数应该是这样的:

    def sum_tri(a, x):
        for i in range(len(a) - 1):
            for j in range(i, len(a) - 1):
                for k in range(j, len(a) - 1):
                    if a[i] + a[j] + a[k] == x:
                        return True
        return False
    

    【讨论】:

    • @ClsForCookies 哦,我明白了!谢谢! :)
    猜你喜欢
    • 1970-01-01
    • 2020-10-26
    • 2016-06-15
    • 2017-08-30
    • 1970-01-01
    • 2016-05-09
    • 2014-08-11
    • 2023-04-05
    • 1970-01-01
    相关资源
    最近更新 更多