Python错误太多争论

时间:2016-01-26 03:54:38

标签: python

我正在编写一个程序,用于创建,更改和解决15个谜题,并且我坚持我认为容易的部分。所以我有一个Board类,默认创建一个解决的15-puzzle。然后我有一个set_board函数,它接受16个整数并将它们放入拼图而不是默认值。但是,当我运行该函数时,它表示我提供了太多参数(set_board()只需要16个参数(17个给定)),即使我输入了0到16的整数(*这里取代零,所以很容易看到)。我要么盯着屏幕看太长时间,要么我误解了一些东西。有人可以帮忙吗?

    def set_board(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p):
        self.board = [[a, b, c, d], [e, f, g, h], [i, j, k, l], [m, n, o, p]]

在shell中:

    board.set_board('*', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)

    Traceback (most recent call last):
      File "<pyshell#20>", line 1, in <module>
        board.set_board('*', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
    TypeError: set_board() takes exactly 16 arguments (17 given)

4 个答案:

答案 0 :(得分:1)

当你在Python中定义一个类的方法时,第一个参数应该是&#34; self&#34;。 Python正在为你传递这个,因此给出了17个args。

使用:

def set_board(self, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p):
        self.board = [[a, b, c, d], [e, f, g, h], [i, j, k, l], [m, n, o, p]]

答案 1 :(得分:1)

你必须要对待

board.set_board('*', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)

作为

set_board(board, '*', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)

所以你有17个参数。这就是我们将方法定义为set_board(self, ....)

的原因

答案 2 :(得分:1)

没关系,我看到了我的简单错误。我忘了在函数声明中包含self。傻我。

答案 3 :(得分:0)

打电话的时候 board.set_board('*', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)

python实际上发送了一个额外的&#34;参数&#34;到函数 - 对象board。所以,你的16个显式参数加上隐式参数board使得17.为了解决这个问题,你可能想要将函数声明更改为:

def set_board(self, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p):
    self.board = [[a, b, c, d], [e, f, g, h], [i, j, k, l], [m, n, o, p]]

使第一个参数self允许python将对拥有函数实例的对象的引用发送到函数的范围。