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()