【发布时间】:2019-11-26 03:31:43
【问题描述】:
我有一个现有的多维列表,其中包含预定(最终)值self.origBoard 和另一个相同大小的多维列表self.board,它允许用户填写值。 self.origBoard 以几个空格(空白)和其他整数值开头,而 self.board 以完全空白(空)开头。
向用户显示self.origBoard 和self.board 的组合,目的是让用户为self.origBoard 中以空白开头的所有索引提供一个整数值。我有一些单独的代码可以在用户填写所有空白时运行,但是我无法在代码中确定这个完整事件何时发生。
例如,self.origBoard 定义为:
self.origBoard[0]=' 19374652'
self.origBoard[1]='576182943'
self.origBoard[2]='342596718'
self.origBoard[3]='921753864'
self.origBoard[4]='638419527'
self.origBoard[5]='457628139'
self.origBoard[6]='185237496'
self.origBoard[7]='763941285'
self.origBoard[8]='29486537 '
这个self.origBoard 按预期生成,但我在处理self.board 的生成和全面检查时遇到了麻烦。这是我初始化self.board的代码
self.board = [None] * 9 # Used to mark user-entered numbers
for i in range(9):
self.board[i] = [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' ]
我目前使用这种内部方法检查是否已满:
def fullBoard(self):
for i in range(0,9):
for k in range(0,9):
if self.board[i][k] == ' ':
return False
return True
我使用这种要求用户输入的方法填写这些空白('')。
def nextMove(self):
row = int(input('Enter Row:'))
col = int(input("Enter Column:"))
num = input("Enter Number:")
self.board[row][col] = num
由于只会提示用户填写self.origBoard 中的空白,(即本例中的两个索引),我不确定如何检查整个组合板是否已满。
现在我知道为什么fullBoard() 永远不会返回true,那是因为self.board 中的剩余索引将保持' '。如何检查self.board 和self.origBoard 的组合值是否代表全板?
下面的最小工作代码示例:
class Sudoku():
def __init__(self):
self.board = [None] * 9 # Used to mark user-entered numbers
for i in range(9):
self.board[i] = [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' ]
self.origBoard[0]=' 19374652'
self.origBoard[1]='576182943'
self.origBoard[2]='342596718'
self.origBoard[3]='921753864'
self.origBoard[4]='638419527'
self.origBoard[5]='457628139'
self.origBoard[6]='185237496'
self.origBoard[7]='763941285'
self.origBoard[8]='29486537 '
self.board = self.origBoard
def display(self):
# display stuff
pass
def nextMove(self):
row = int(input('Enter Row:'))
col = int(input("Enter Column:"))
num = input("Enter Number:")
self.board[row][col] = num
def fullBoard(self):
for i in range(0,9):
for k in range(0,9):
if self.board[i][k] == ' ':
return False
return True
def winCheck(self):
# Do some checks
print("Testing ftw!")
if __name__ == '__main__':
game = Sudoku()
game.display()
while(True):
game.nextMove()
if game.fullBoard() == True:
break
if game.winCheck() == True:
game.display()
print("You win!")
break
elif game.winCheck() == False:
game.display()
print("One or more of your numbers are overlapping!")
continue
else:
game.display()
【问题讨论】:
-
如何定义“完整”?每行 9 个整数值?像你的第一行和最后一行这样的空间呢?
self.origBoard[0]=' 19374652'你想让这个 origBoard 被视为已满吗? -
那是一个测试板,当我检查每回合后的板时(我自己填写空格)。对于一个完整的板,每个索引都应该有一个数字(字符串),并且不能有空格。
-
那么对于测试板,您当前对 fullBoard() 的评估返回 True 还是 False?
-
如果板子已满,则返回 True,否则返回 false。它总是错误的,因为我不知道如何将“origBoard”合并到其中。
-
self.board和self.origBoard应该不同吗?即为什么你不只是将这些测试值存储在self.board中?您出于某种原因需要保持原始值?我问,因为在fullBoard()中,您正在检查self.board,而您将值存储在self.origBoard中。换句话说,fullBoard()应该返回 True 如果你用像self.board[0]='019374652'这样的行而不是self.origBoard[0]='019374652'来初始化你的板
标签: python list multidimensional-array