我已经在这个问题上挣扎了很长一段时间:我已经开始创建一个解决数独的代码,到目前为止,我已经成功地解决了大部分问题。我创建了一个名为" Sudoku“的类,它包含一个实例变量:带有所有插入数字的数独网格。
我还创建了一些方法,允许我访问或修改部分数独,目前还没有问题。但现在我必须引入一个新的实例变量,即带有数字注释的数独网格。问题出在我之前写的方法上。
代码是:
def get_line(self, line):
if 0 < line < 10:
return self.sudoku[9*(line-1):9*line]
return None
正如您在我刚刚编写的方法中所看到的那样
self.sudoku
(" Sudoku“是包含带有插入数字的网格的实例变量,它是一个包含81个元素的列表,这些元素是逐行插入的数独的数字),我直接修改了sudoku变量。但是现在我不能使用同样的方法访问带有注释的网格,因为它将返回数独的行。
我在想我能不能做这样的事
self.sudoku.get_line()
或
self.annotations.get_line()
其中我使用了一个方法,该方法将我在调用方法本身之前编写的变量作为参数。有没有可能写出这样的方法呢?
我知道有一些其他的方法可以解决这个特定的问题,但我想知道在Python中是否可以实现这样的事情。
感谢所有试图帮助我的人,我在其他地方找不到解决这个问题的方法。
发布于 2021-10-24 09:32:05
好吧..。如果网格中的每个方块都包含一个数字和一个注释,那么每个方块都应该是一个类的实例,例如:
class SudokuSquare():
def __init__(self, number=None, annotation=None):
super().__init__(self)
self.number, self.annotation = number, annotation
def __str__(self):
return '%s' % (self.number or '')
如果您使用这些类的实例填充列表,而不是纯整数,那么当您获取行时,您将立即获取所有内容。不需要有两个平行的网格。
然后,我的另一个建议是使用列表列表来表示行和列,如下所示:
类Sodoku():
def __init__(self):
self.rows = []
for _ in range(9):
self.rows.append([ SukokuSquare() for _ in range(9) ])
def get_line(self, num):
if num < 1 or num > 9:
return None
return self.rows[num-1]
实例化类Sudoku
将为您提供一个数独对象,其中包含9行的列表,每行包含9个SudokuSquare
的列表,每行都有一个用于存储number
和annotation
的位置。
现在,如果我想将第9行位置9的数字设置为值6,我会这样做:
字谜=数独() puzzle.get_line(9)8.number =6
但是,我仍然直接访问包含行(行)的列表,也许我不想这样做。然后您可能需要另一个名为SudukoRow的类,它有一个get_square
方法……
我会把那部分留给你来试着弄清楚...
发布于 2021-10-24 09:09:33
如果我没理解错的话,你想
self.foo.getline(fie)
self.bar.getline(fum)
等同于
self.getline(foo, fie)
self.getline(bar, fum)
(有点像让getline
拥有不同的“自我”)?
这就是Python,可能有一些可怕的技巧可以使用,但让foo和bar成为实现getline()的单独类的实例不是最明显的解决方案吗,Sudoku类可以委托给它们?
https://stackoverflow.com/questions/69696874
复制