我需要帮助处理我的密码。我知道如何启动板,但我不知道如何检查数字是否在行和列中重复,以及如何更改。
列表,矩阵,用于循环
import turtle
import random
import time
board = [ #Initialize board.
["X","X","X","X"],
["X","X","X","X"],
["X","X","X","X"],
["X","X","X","X"]
]
values = ["0","1","2","3"] #Accepted values
def sudoku():
#Start screen
print("SUDOKU".center(50,"-"))
print("Rules") #To be changed later c:
start = int(input("Type 1 to start."))
crearTablero()
checkDuplicates()
def createBoard():
for row in range(len(board)):
if row%2 == 0:
board[row][0] = random.sample(values,1)
board[row][2] = random.sample(values,1)
if row%2 == 1:
board[row][1] = random.sample(values,1)
board[row][3] = random.sample(values,1)
print(board[row])
def checkDuplicates(): #Check for duplicates while creating
for column in range(len(board[0])):
#Tried to check if a number has been used in the column, change it to a new number
val = [x for x in val]
for i in range(4):
while board[columna][0] != board[columna][i]:
celda = board[columna][i]
celda = random.sample(valores,1)
celdastr = "".join(celda)
check = val.index(celdastr) #I'm stuck here. I get ValueError when trying to delete the used number from val.
if check != "-1":
val.remove(check)
#I still have to create functions to enter the answer, check it and check if the board is full
sudoku()当我试图从值列表中删除时,我会得到一个ValueError,并且数字不会改变:
跟踪(最近一次调用):文件"sudoku.py",第54行,在sudoku()文件“sudoku.py”中,第21行,在sudoku checarDuplicado()文件“sudoku.py”中,第52行,在checarDuplicado val.remove(check) ValueError: list.remove(x):X不在列表
中
发布于 2019-10-12 05:16:59
如果将示例简化为最小形式,您会发现如下所示:
val = ["a"]
celdastr = "b"
check = val.index(celdastr)
if check != "-1":
val.remove(celdastr)问题的根本原因是check != "-1"。
list.index(item)函数返回整数索引,而不是字符串--您需要使用check != -1。
发布于 2020-06-09 13:33:19
SIZE = 9
SUB_SIZE = 3
sudoku = [9*[0]]
p = 1
while p != 9:
sudoku.append (9*[0])
p += 1
def printSudoku():
for x in sudoku:
print("-------------------------------------")
for y in x:
print("|", y,end = " ")
print("| ")
print("-------------------------------------")
row = int(input("Enter the row \n"))
while row > 8 or row < 0:
row = int(input("Enter a valid row number(between 0-8) \n"))
col = int(input("Enter the column \n"))
while col > 8 or col < 0:
col = int(input("Enter a valid column number(between 0-8) \n"))
val = int(input("Enter the value \n"))
while val > 9 or val < 1:
val = int(input("Enter a valid value(between 1-9) \n"))
sudoku[row][col] = val
while row != -1:
row = int(input("Enter the row \n"))
while row > 8 or row < -1:
row = int(input("Enter a valid row number(between 0-8) \n"))
col = int(input("Enter the column \n"))
while col > 8 or col < 0:
col = int(input("Enter a valid column number(between 0-8) \n"))
val = int(input("Enter the value \n"))
while val > 9 or val < 0:
val = int(input("Enter a valid value(between 1-9) \n"))
sudoku[row][col] = val
printSudoku()
def isAvailable(row, col, num):
rowStart = int(int(row/3) * 3);
colStart = int(int(col/3) * 3);
i = 0
while(i<9):
if (sudoku[row][i] == num):
return False
if (sudoku[i][col] == num):
return False
if (sudoku[int(rowStart + (i%3))][int(colStart + (i/3))] == num):
return False
i = i+1
return True;
def fillSudoku(row, col):
if(row<9 and col<9):
if(sudoku[row][col] != 0):
if((col+1)<9):
return fillSudoku(row, col+1)
elif((row+1)<9):
return fillSudoku(row+1, 0)
else:
return True
else:
i = 0
while(i<9):
if(isAvailable(row, col, i+1)):
sudoku[row][col] = i+1
if((col+1)<9):
if(fillSudoku(row, col +1)):
return True
else :
sudoku[row][col] = 0
elif((row+1)<9):
if(fillSudoku(row+1, 0)):
return True;
else:
sudoku[row][col] = 0
else :
return True;
i = i+1
return False;
else:
return True;
if (fillSudoku(0, 0)) :
print ("\n\nSolution is \n")
printSudoku()
else :
print("\n\nNO SOLUTION\n\n")输入完值后,输入行为-1
行号和列号从0开始,而不是从1开始。
发布于 2020-06-28 20:19:51
此函数检查作为参数传递的列表是否包含从“1”到“9”的九位数字。
def checkset(digs):
return sorted(list(digs)) == [chr(x + ord('0')) for x in range(1, 10)]这将是表示sudoku的行列表。
rows = [ ]
for r in range(9):
ok = False
while not ok:
row = input("Enter row #" + str(r + 1) + ": ")
ok = len(row) == 9 or row.isdigit()
if not ok:
print("Incorrect row data - 9 digits required")
rows.append(row)
ok = True检查所有行是否良好
for r in range(9):
if not checkset(rows[r]):
ok = False
break检查所有列是否良好
if ok:
for c in range(9):
col = []
for r in range(9):
col.append(rows[r][c])
if not checkset(col):
ok = False
break检查所有子方格(3x3)是否良好。
if ok:
for r in range(0, 9, 3):
for c in range(0, 9, 3):
sqr = ''
# make a string containing all digits from a sub-square
for i in range(3):
sqr += rows[r+i][c:c+3]
if not checkset(list(sqr)):
ok = False
break打印最终裁决
if ok:
print("Yes")
else:
print("No")https://stackoverflow.com/questions/58347736
复制相似问题