Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何创建元组的元组并将其传递给超类';s构造函数_Python_Python 2.7_Tuples - Fatal编程技术网

Python 如何创建元组的元组并将其传递给超类';s构造函数

Python 如何创建元组的元组并将其传递给超类';s构造函数,python,python-2.7,tuples,Python,Python 2.7,Tuples,假设我们需要一个具有元组的棋盘(如国际象棋棋盘)表示。 我们需要正方形的(x,y)坐标,然后一些额外的信息,例如,如果上面有游戏的角色 所以我创建了元组的元组-一个像这样的空游戏板: n = 4 array = () j = 0 i = 0 for k in range(n*n): array = array + ((i,j, 0),) j += 1 if j%4 == 0: j = 0 i += 1 def empty_board(n)

假设我们需要一个具有元组的棋盘(如国际象棋棋盘)表示。
我们需要正方形的(x,y)坐标,然后一些额外的信息,例如,如果上面有游戏的角色

所以我创建了元组的元组-一个像这样的空游戏板:

n = 4
array = ()
j = 0
i = 0
for k in range(n*n):
    array = array + ((i,j, 0),)
    j += 1
    if j%4 == 0:
        j = 0
        i += 1
def empty_board(n):
    return tuple(
        (i, j, 0) for i in range(n) for j in range(n))
In [7]: def mutable_board(n):
   ...:     return [[0]*n for _ in range(n)]
   ...:

In [8]: mutable_board(3)
Out[8]: [[0, 0, 0], [0, 0, 0], [0, 0, 0]]

In [9]: board = mutable_board(4)

In [10]: board[2][3] = 1
这样做对吗?还是有一条更短的路?
然后我将把数组传递给超类

我也看到了这一点:

super(className, self).__init__(tuple([0 for j in range(n)]), None)
哪个创建元组的元组或列表的元组。。然后将其传递给超类构造函数。

另外,有人能解释一下范围(n)内j的
0吗?(是
0
让我讨厌。如果它是一个列表,可能是列表的初始化吗?

您可以像这样重构代码:

n = 4
array = ()
j = 0
i = 0
for k in range(n*n):
    array = array + ((i,j, 0),)
    j += 1
    if j%4 == 0:
        j = 0
        i += 1
def empty_board(n):
    return tuple(
        (i, j, 0) for i in range(n) for j in range(n))
In [7]: def mutable_board(n):
   ...:     return [[0]*n for _ in range(n)]
   ...:

In [8]: mutable_board(3)
Out[8]: [[0, 0, 0], [0, 0, 0], [0, 0, 0]]

In [9]: board = mutable_board(4)

In [10]: board[2][3] = 1
这是对
tuple
的调用中的一个(),它从任何iterable(包括生成器)中创建一个tuple

请注意,使用元组可能不是一个好主意,因为它们是不可变的。因此,不能将给定元组的第三个元素更改为1:

In [5]: board = empty_board(4)

In [6]: board[5][2] = 1
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-6-506047481a47> in <module>()
----> 1 board[5][2] = 1

TypeError: 'tuple' object does not support item assignment
回答关于超类构造函数参数的问题:它只是一个元组:

In [12]: tuple([0 for j in range(n)])
Out[12]: (0, 0, 0, 0)

为了表示电路板,您是否考虑过一个由n个列表组成的列表,每个列表的长度为n个项目(其中n是电路板的宽度/高度)


您在最后询问的列表理解传递给
\uuuu init\uuu
一个由n个零组成的元组

谢谢您的回答,但不幸的是,我们需要使用元组才能使超类正常工作。因此,它首先创建一个由n+1个零组成的新列表,然后将该列表转换为元组。零后面不应该有逗号吗?或者只有当你有元组的时候才有效?零后面的逗号将是一个语法错误。我建议在shell中玩一玩,了解它是如何工作的,例如,从
tuple([0代表范围内的j(5)])
开始,然后尝试变体。另外,在和上查看这些Python文档。我现在已经尝试过了,并且已经阅读了这两个文档。谢谢你的参考:)谢谢你的回答!我不知道您可以使用以下语法创建对象:
(I,j,0)表示范围内的I(n)表示范围内的j(n)
。不幸的是,我需要使用元组中的元组才能使超类正常工作。@Chris我添加了几个链接来解释语法。这被称为生成器表达式,其工作原理类似于列表理解,但不会生成整个列表,而是在迭代时逐个提供元素。但是,如果您编写的表达式逐个生成元素,那么超类构造函数如何处理此问题?@Chris它位于对
元组的调用中,因此构造函数获取
tuple()
返回的内容,即一个tuple。