[英]Python3 sudoku return problems
通過下面的代碼,我可以檢查行和列,以查看Sudoku程序是否設置正確。 該函數為checkIt返回兩個答案(行和列)。 有沒有辦法設置代碼來檢查行和列,然后返回“此Sudoku解決方案是正確的!” 如果兩者都正確(True),並且能夠返回“列/行錯誤(.append(number))”,則行/列檢查中的任何一個函數解決方案都不正確(False)?
import sys
from scanner import *
def createList(size):
if size == 0: return []
else:
return [0] + createList(size -1)
def printGrid(gridlist):
for row in gridlist:
print (str(row)+"\n")
def rows(g):
return len(g)
def cols(g):
return len(g[0])
def printMatrix(g):
for i in range(0,rows(g),1):
for j in range(0,cols(g),1):
print(g[i][j],end=' ')
print('')
print('')
def readinput(filename,grid):
s = Scanner(filename)
r = s.readtoken()
while r != "":
r = int(r)
c = s.readint()
v = s.readint()
grid[r][c]=v
r = s.readtoken()
def checkRows(g):
for rows in g:
numbersInRow = []
for number in rows:
if number != 0 and number in numbersInRow:
return g.index(rows),False
else:
numbersInRow.append(number)
return "This Sudoku solution is correct!"
def checkCols(g):
for cols in g:
numbersInCol = []
for number in cols:
if number != 0 and number in numbersInCol:
return g.index(cols),False
else:
numbersInCol.append(number)
return True
def checkIt(g):
checkRows(g)
rowSuccess = checkRows(g)
print(rowSuccess)
checkCols(g)
colSuccess = checkCols(g)
print(colSuccess)
def main():
grid = createList(9)
for i in range(9):
grid[i] = createList(9)
readinput(sys.argv[1],grid)
printMatrix(grid)
checkIt(grid)
main()
def checkIt(g):
rows = checkRows(g)
cols = checkCols(g)
if rows == "good" and cols == "good":
print(rowSuccess, colSuccess)
elif rows=="good":
print("Error in col: " + cols)
elif cols=="good":
print("Error in row: " + rows)
else: # Both rows and cols have an error
print("Error in row: " + rows)
print("\nError in col: " + cols)
編輯:關於以下評論:如果出現錯誤,請嘗試返回錯誤位置列表(出現錯誤時只需將錯誤附加到列表中)。 最后,如果列表的大小為0(無錯誤),則返回True
只需讓checkRows(g)和checkCols(g)返回“好”(如果一切都很好),如果出現錯誤,則返回錯誤所在的行/列的編號。
首先使checkRows返回沖突列表
rowConflicts = checkRows(g)
colConflicts = checkCols(g)
for conflict in rowConflicts:
print("Error in row: " + conflict)
for conflict in colConflicts:
print("Error in row: " + conflict)
if len(rowConflicts) = 0 and len(colConflicts) = 0:
print("Success!")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.