9x9 Matrix mit Randomzahlen füllen (Endlos-Schleife)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Back2basic
User
Beiträge: 23
Registriert: Montag 23. April 2012, 09:53

Moinsen,

ich komme gerade nicht auf den Fehler wieso ich bei einem Sudokufeld in eine Endlosschleife komme...

Ich Überprüfe nur ob die gewählte Zahl bereits in Zeile und Spalte vorhanden ist... Trotzdem scheint es nicht zu funktionieren

Code: Alles auswählen

  def isInRow(self, row, value):

        hlp = False
        for i in range(self.__maxLength__):
            if ( self.m[row][i] == value ):
                hlp =  True

        return hlp


    def isInColumn(self, column, value):

        hlp = False
        for i in range(9):
            if ( self.m[i][column] == value ):
                hlp =  True

        return hlp


    def isIn3x3Matrix(self, value):

        count = 3
        hlp = False

        while(count <= self.__maxLength__):

            for i in range(count):
                for j in range(count):
                    if (self.m[i][j] == value):
                        hlp = True
            count += 3

        return hlp

    def createField(self):

        for i in range(self.__maxLength__):
            for j in range(self.__maxLength__):
                randInt = random.randint(1,9)
                while(self.isInRow(i,randInt) == True | self.isInColumn(j,randInt == True)):
                    randInt = random.randint(1,9)
                    self.setAttribut(i,j,0)
                self.setAttribut(i,j, randInt)
Wäre super wenn mir jemand helfen könnte...
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@Back2basic: schau Dir den Unterschied zwischen | und or an.
"for-i-in-range" ist ein Anti-Pattern. In Python iteriert man direkt über Listen. Die Funktion any könnte dabei auch nützlich sein.
Klammern um Bedingungen sind überflüssig. '__maxLength__' ist ein seltsamer Attributname, Du meinst wohl 'max_length'. Ansonsten halten sich Deine Namen auch nicht an PEP8.
Zum Problem: nicht jedes 9x9-Feld aus zufälligen Zahlen läßt sich in ein korrektes Sudoku umwandeln. Du mußt Dir dafür einen anderen Algorithmus überlegen. Die Methode 'setAttribute' setzt höchst wahrscheinlich kein Attribut.
Antworten