[python-users] Pydoku

Benjamin Wolters benjaminwolters at benwol.de
Mi Okt 17 14:05:49 CEST 2007


on sorry,

hab vorher die zeile über 
________
tmp = p.getPydoku(22)
________
rausgenommen :( 
________
grade = 22
tmp = p.getPydoku(grade)
________
grüße


On Wed, 2007-10-17 at 13:58 +0200, Rex Turnbull wrote:
> * 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
> >   
> ________________________________________
> Diese Mail erhalten Sie ueber die Mailingliste Python-users der Universitaet zu Koeln
> Python-users at uni-koeln.de
> https://lists.uni-koeln.de/mailman/listinfo/python-users



Mehr Informationen über die Mailingliste python-users