Seite 1 von 1

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

Verfasst: Montag 14. Oktober 2013, 15:02
von Back2basic
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...

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

Verfasst: Montag 14. Oktober 2013, 15:13
von Sirius3
@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.