我正在编写一个程序,用于创建,更改和解决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)
答案 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将对拥有函数实例的对象的引用发送到函数的范围。