[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