Sudoku-Checker in Python

Ich versuche zu erstellen, ein sudoku-checker in python:

ill_formed = [[5,3,4,6,7,8,9,1,2],
              [6,7,2,1,9,5,3,4,8],
              [1,9,8,3,4,2,5,6,7],
              [8,5,9,7,6,1,4,2,3],
              [4,2,6,8,5,3,7,9],  # <---
              [7,1,3,9,2,4,8,5,6],
              [9,6,1,5,3,7,2,8,4],
              [2,8,7,4,1,9,6,3,5],
              [3,4,5,2,8,6,1,7,9]]
easy = [[2,9,0,0,0,0,0,7,0],
       [3,0,6,0,0,8,4,0,0],
       [8,0,0,0,4,0,0,0,2],
       [0,2,0,0,3,1,0,0,7],
       [0,0,0,0,8,0,0,0,0],
       [1,0,0,9,5,0,0,6,0],
       [7,0,0,0,9,0,0,0,1],
       [0,0,1,2,0,0,3,0,6],
       [0,3,0,0,0,0,0,5,9]]

Ich erwarte Eingabe - eine Liste von 9 Listen. Die Nullen repräsentieren Zahl, die noch nicht gefüllt sind, in durch den Benutzer. Sie können mehrfach in einer Zeile, Spalte oder 3x3.

def check_sudoku(grid):
if len(grid) == 9:
    numsinrow = 0
    for i in range(9):
        if len(grid[i]) == 9:
            numsinrow += 1
    if numsinrow == 9:
        for i in range(9):
            rowoccurence = [0,0,0,0,0,0,0,0,0,0]
            for j in range(9):
                rowoccurence[grid[i][j]] += 1
                temprow = rowoccurence[1:10]
                if temprow == [1,1,1,1,1,1,1,1,1]:
                    return True
                else:
                    return False
    else:
        return False
else:
    return False

Ich offensichtlich brauche, um zu überprüfen, dass es eine 9x9 Liste von Listen (grid), und dass es keine Duplikate in jeder Reihe, Spalte und 3x3 kleines Quadrat. In den code habe ich zunächst überprüfen, um zu sehen, ob es eine richtige Anzahl von Zeilen (Es sollten 9 sein). Dann überprüfe ich, dass jede Zeile hat 9 Elemente in es (mit dem ill_formed Beispiel sehen Sie, dass dies nicht der Fall ist). Ich habe dann versucht zu überprüfen, Duplikate in jeder Reihe, aber ich bin mit einigen Schwierigkeiten zu tun. Ich dachte, ich könnte-Schleife über jede Zeile und Schleife über jedes element in dieser Zeile, und fügen Sie 1, um eine Liste von int-Werten (rowoccurence). Zum Beispiel, wenn die erste Zahl ist eine 2, dann rowoccurence[2] gleich 1 ist. Die Nullen sind in rowoccurence[0] und werden nicht überprüft(ich habe eine temporäre Liste, die sollten alles nehmen, außer dass das erste element - die Nullen - da könnte es mehr als 1 null in einer Zeile und das Gitter könnte noch echt sein). Probiere ich die temp-Liste (im Grunde rowoccurence) gegen eine Referenz-Liste der richtigen Werte, aber es scheint nicht zu funktionieren. Könnten Sie mir helfen, überprüfen Sie die Zeilen, die Duplikate in diesem sudoku-checker? Vielen Dank im Voraus!

Ich wünschte, ich hatte bei meinem alten Rechner mit meinem code von der CS2, habe ich diese genaue Sache, im ersten Jahr der Finanzierung Ihres Studiums.
Eh, Counter nützlich sein wird.
Was bedeutet "scheint nicht zu funktionieren"? Was schief geht, und wo? Was Beispieldaten sind Sie versuchen, es auf, was Sie erwarten, es zu tun, und was tut Sie stattdessen? Ist easy soll zurück True oder False?
Sollte die überprüfung fehlschlagen, wenn das Gitter nicht vollständig ausgefüllt oder nur, wenn mehr als eine Zahl von 1 bis 9 gefunden wird?

InformationsquelleAutor quagpwn | 2013-07-12

Schreibe einen Kommentar