【问题标题】:Issue adding all the elements from one row in a list and getting the sum问题添加列表中一行中的所有元素并获得总和
【发布时间】:2018-06-30 06:35:54
【问题描述】:

我遇到的问题似乎很简单,但我一直在寻找适合我情况的解决方案,但找不到任何东西。基本上我想看看给定的网格是否是一个有效/可解决的数独游戏。我相信我的解决方法是正确的,我已经能够得到一列中所有数字的总和并检查它是否!= 45。我遇到的问题是当我尝试将每个数字相加时,它给了我错误:

TypeError: 'int' 对象不可迭代

我对为什么会收到此错误感到困惑。我还在学习python,但我对java很熟悉。我在java中用来做这件事的代码有些相关,所以这可能是问题所在。让我知道你们看到了什么:

for b in range(0,9):
    for x in range(0,9):
        numHolder+=grid[b][x]
        if sum(numHolder) != 45:
            return False
    numHolder=[]

【问题讨论】:

  • 只是提醒一下,检查行和是否等于 45 是不够的。您还必须检查列总和和 3x3 块总和,以及每个中的值是否是唯一的并且在 [1..9] 中)。
  • @jedwards 是的,你说得对。这只是我的代码的一部分,我正在展示。我实际上已经在我的代码中实现了这些部分,我一直在寻找 3x3 的总和。如果你想查看的话,我又发了一篇关于它的帖子。 stackoverflow.com/questions/51114445/…

标签: python


【解决方案1】:

当您在列表上使用+= 时,它会尝试将运算符右侧列表中的所有项目添加到左侧列表中。但是,int 不是列表,因此您必须使用 numHolder.append(grid[b][x])

【讨论】:

    【解决方案2】:

    if numHolder != 45: 而不是if sum(numHolder) != 45:sum 函数需要 listtuple 等,但不是单个值。

    更新:如果 numHolder 是 list,那么你应该写:

    for b in range(0,9):
        for x in range(0,9):
            numHolder.append(grid[b][x])
            if sum(numHolder) != 45:
                return False
        numHolder=[]
    

    【讨论】:

    • 我明白了,所以不要使用列表,只需将数字相加即可。它有效,一旦 10 分钟计时器用完,我将接受答案。感谢您的帮助!
    • Welcome :) 另外你在numHolder+=grid[b][x] 中添加了值,所以这里需要下一行吗?我猜numHolderint 变量。
    • numHolder 是一个列表(至少它在最后一行),list + int 没有定义....
    猜你喜欢
    • 2015-04-24
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 1970-01-01
    相关资源
    最近更新 更多