Python 当我在类内部调用一个方法时,它不工作,但在外部工作?

Python 当我在类内部调用一个方法时,它不工作,但在外部工作?,python,Python,在这里,代码正常工作并正确打印拼图的列: def lookup_cell(self, column, row): return(self.puzzle[row-1][column-1]) def lookup_column(self, column): output = [] for i in range(9): output.append(self.lookup_cell(column, i+1)) return output def che

在这里,代码正常工作并正确打印拼图的列:

def lookup_cell(self, column, row):
    return(self.puzzle[row-1][column-1])

def lookup_column(self, column):
    output = []
    for i in range(9):
        output.append(self.lookup_cell(column, i+1))
    return output

def check_puzzle(self):
    valid = True
    #check all the rows
    for i in range(1,10):
        row = self.lookup_row(i)
        while 0 in row: row.remove(0)
        for i in range(1,10):
            if row.count(i) > 1:
                valid = False

    #check all the columns
    for i in range(1,10):
        print(i)
        print(easy.lookup_column(i))

puzzle = '''0,9,0,7,5,1,0,2,3 /n
       2,1,8,6,0,3,7,5,4 /n
       0,0,0,4,0,2,0,0,0 /n
       1,0,0,0,0,0,0,9,2 /n
       0,0,0,5,0,0,3,8,0 /n
       3,0,0,8,2,0,5,0,6 /n
       0,0,0,0,7,0,0,4,8 /n
       0,4,9,0,0,0,0,7,0 /n
       0,2,0,0,0,5,6,3,1 '''

easy = Sudoku(puzzle)
运行此操作时,我会得到一个错误,我将在下面添加该错误:

for i in range(1,10):
    print(easy.lookup_column(i))
1[9,2,4,1,5,3,7,4,2]2[7,1,2,9,3,8,4,9,5]3
回溯(最近一次呼叫最后一次):
文件“/Users/ellis/Desktop/Sudoku.py”,第121行,在
简单。检查拼图()
文件“/Users/ellis/Desktop/Sudoku.py”,第81行,检查拼图
打印(简单。查找_列(i))
文件“/Users/ellis/Desktop/Sudoku.py”,第65行,在lookup\u列中
output.append(self.lookup_单元格(列,i+1))
文件“/Users/ellis/Desktop/Sudoku.py”,第19行,在查找单元中
返回(self.puzzle[第1行][第1列])
索引器:列表索引超出范围

您的代码在类方法之外工作,因为

1 [9, 2, 4, 1, 5, 3, 7, 4, 2] 2 [7, 1, 2, 9, 3, 8, 4, 9, 5] 3 
Traceback (most recent call last):   
File "/Users/ellis/Desktop/Sudoku.py", line 121, in <module>
    easy.check_puzzle()   
File "/Users/ellis/Desktop/Sudoku.py", line 81, in check_puzzle
    print(easy.lookup_column(i))   
File "/Users/ellis/Desktop/Sudoku.py", line 65, in lookup_column
    output.append(self.lookup_cell(column, i+1))   
File "/Users/ellis/Desktop/Sudoku.py", line 19, in lookup_cell
    return(self.puzzle[row-1][column-1]) 
IndexError: list index out of range
他没有打电话

for i in range(1,10):
    print(easy.lookup_column(i))

您发布的回溯显示,上面的代码导致了这个问题,您访问的对象中的值超出了它的边界

我不确定您想要完成什么,但是为什么不使用谜题列表而不是字符串呢

试试这个:

def lookup_cell(self, column, row):
    return(self.puzzle[row-1][column-1]
尝试将
print(easy.lookup\u column(i))
替换为
print(self.lookup\u column(i))
。请参阅中的部分。代码中有很多部分缺失,因此我们可以测试您的代码并正确地帮助您。仅举几个例子:代码中没有类;未实现
lookup\u row
方法
def lookup_cell(self, column, row):
    return(self.puzzle[row-1][column-1]
class Sudoku(object):
    def __init__(self,puzzle):
        self.puzzle = puzzle
        print("Inside class; column lookup")
        for i in range(1,10):
            print('Column {0} ='.format(i),self.lookup_column(i))
        self.check_puzzle()

    def lookup_cell(self, column, row):
        return self.puzzle[row-1][column-1]

    def lookup_row(self,row):
        output = []
        for i in range(9):
            output.append(self.lookup_cell(i+1, row))
        return output

    def lookup_column(self, column):
        output = []
        for i in range(9):
            output.append(self.lookup_cell(column, i+1))
        return output

    def check_puzzle(self):
        valid = True
        #check all the rows
        for i in range(1,10):
            row = self.lookup_row(i)
            while 0 in row: row.remove(0)
            for i in range(1,10):
                if row.count(i) > 1:
                    valid = False

puzzle = [
        [0,9,0,7,5,1,0,2,3],
        [2,1,8,6,0,3,7,5,4],
        [0,0,0,4,0,2,0,0,0],
        [1,0,0,0,0,0,0,9,2],
        [0,0,0,5,0,0,3,8,0],
        [3,0,0,8,2,0,5,0,6],
        [0,0,0,0,7,0,0,4,8],
        [0,4,9,0,0,0,0,7,0],
        [0,2,0,0,0,5,6,3,1]]

easy = Sudoku(puzzle)
print("Outside class; column lookup")
for i in range(1,10):
    print('Column {0} ='.format(i),easy.lookup_column(i))
easy.check_puzzle()