[python-users] Pydoku

Rex Turnbull RexTurnbull at web.de
Mi Okt 17 13:58:55 CEST 2007


* Ich wurde als erstes am Ende folgendes einfügen, dann den Code, das 
sonst direkt ausgeführt wird in ein main-Funktion
bringen
----
def main():
    p = PydokuCreator()
    p.createPydoku()
    p.printPydoku()

    tmp = p.getPydoku(22)
    print 'Pydoku of grade:', grade
    for row in tmp:
        print row

if __name__ == '__main__':
     main()
----

* Dann auf Funktionsfähigkeit vor der Veröffentlichung prüfen
print 'Pydoku of grade:', grade <-- ist nicht deklariert

* Documentation in Docstrings wie hier:
----
def question(frage):
    """--> the answer

This function does something really great and then returns 42."""
    print frage
    return 42
----

* Vielleicht auch noch auf grundsätzlicher Format achten (google for 
pep8.py).

Das nur zum Aussehen.
Viel Erfolg und Spaß weiterhin mit Python!
Rex


Benjamin Wolters schrieb/wrote:
> Hallo zusammen,
>
> Anfang des Jahres benötigte ich einen Sudoku erzeugendes Programm.
> Damals habe ich mich das erste Mal mit Python auseinander gesetzt und
> somit auch Pydoku geschrieben. Jetzt möchte ich ihm mal gegen lesen
> lassen, ob dieser auch Python konform ist oder ob ihr ihn anders
> geschrieben hättet. Wahrscheinlich bekomme ich es demnächst öfters mit
> Python zu tun, deshalb die späte Mail.
>
> Hier mein Pydoku (auch im Anhang als py):
> _____________________
> import random
> import operator
>
> ##########################################
> #Basic Pydoku Class
> class Pydoku(object):
>     pydoku = [[ 0,0,0,0,0,0,0,0,0 ],
>               [ 0,0,0,0,0,0,0,0,0 ],
>               [ 0,0,0,0,0,0,0,0,0 ],
>               [ 0,0,0,0,0,0,0,0,0 ],
>               [ 0,0,0,0,0,0,0,0,0 ],
>               [ 0,0,0,0,0,0,0,0,0 ],
>               [ 0,0,0,0,0,0,0,0,0 ],
>               [ 0,0,0,0,0,0,0,0,0 ],
>               [ 0,0,0,0,0,0,0,0,0 ]]
>
>     def checkPydokuRules(self, r, c, val):
>         rb = abs(r / 3) * 3
>         cb = abs(c / 3) * 3
>         for row in range(rb, rb+3):
>             for col in range(cb, cb+3):
>                 if self.pydoku[row][col] == val:
>                     return False
>         return self.checkRow(r, val) & self.checkLine(c, val)
>         
>     def checkRow(self,rowNumber,checkNumber):
>         for cell in self.pydoku[rowNumber]:
>             if cell == checkNumber:
>                 return False
>         return True
>         
>     
>     def checkLine(self,lineNumber,checkNumber):
>         for row in self.pydoku:
>             if row[lineNumber] == checkNumber:
>                 return False
>         return True
>
>     def printPydoku(self):
>         i = 0
>         print 'Pydoku:'
>         for row in self.pydoku:
>             print  row
>             
>     def getPydoku(self):
>         return self.pydoku
>
> ##########################################
> # PydokuCreator Class
> class PydokuCreator(Pydoku):
>     
>     def createPydoku(self):
>         for row in range(9):
>             while operator.contains(self.pydoku[row],0):
>                 self.pydoku[row] = [ 0,0,0,0,0,0,0,0,0 ]
>                 for val in range(1,10):
>                     self.addNumber(row,range(9),val)        
>         
>     def addNumber(self,row,cols,val):
>         ok = True
>         col = random.choice( cols )
>         if self.pydoku[row][col] == 0 and
> self.checkPydokuRules(row,col,val):
>                 self.pydoku[row][col] = val
>         else:
>             cols.remove(col)
>             if len(cols) == 0:
>                 return
>             self.addNumber(row,cols,val)
>             
>     def getPydoku(self,grade):
>         tmpPydoku = self.pydoku
>         removed = False
>         for i in range(81-grade):
>             removed = False
>             while not removed:
>                 row = random.randint(0,8)
>                 col = random.randint(0,8)
>                 if tmpPydoku[row][col] != 0:
>                     tmpPydoku[row][col] = 0
>                     removed = True
>         return tmpPydoku
>         
> ##########################################
> # PydokuSolver
> #class PydokuSolver(Pydoku):
> #   
> #    def solvePydoku(self):
> #        self
>
> p = PydokuCreator()
> p.createPydoku()
> p.printPydoku()
>
> tmp = p.getPydoku(22)
> print 'Pydoku of grade:', grade
> for row in tmp:
>     print row
>
> ______________________
>
>
> Die 22 steht für den Schwierigkeitsgrad und der Solver ist in Prolog
> geschrieben, deshalb auch nicht implementiert.
>
> Viele Grüße
> Ben
>   



Mehr Informationen über die Mailingliste python-users