[gnome-games] gnome-sudoku: Style cleanup in several files
- From: Zhang Sen <zhangsen src gnome org>
- To: svn-commits-list gnome org
- Subject: [gnome-games] gnome-sudoku: Style cleanup in several files
- Date: Wed, 13 May 2009 09:55:34 -0400 (EDT)
commit 78f84b9b18d3cd4e0d6a69ed686387b0eed12afa
Author: Zhang Sen <zh jesse gmail com>
Date: Wed May 13 21:54:08 2009 +0800
gnome-sudoku: Style cleanup in several files
Nothing but adding spaces and newlines. Part of bug 578903.
---
gnome-sudoku/src/lib/colors.py | 83 +++++---
gnome-sudoku/src/lib/defaults.py.in | 8 +-
gnome-sudoku/src/lib/dialog_swallower.py | 10 +-
gnome-sudoku/src/lib/game_selector.py | 2 +-
gnome-sudoku/src/lib/pausable.py | 22 +-
gnome-sudoku/src/lib/simple_debug.py | 33 ++--
gnome-sudoku/src/lib/sudoku_generator_gui.py | 101 +++++----
gnome-sudoku/src/lib/sudoku_maker.py | 287 ++++++++++++++------------
gnome-sudoku/src/lib/sudoku_thumber.py | 44 ++--
9 files changed, 321 insertions(+), 269 deletions(-)
diff --git a/gnome-sudoku/src/lib/colors.py b/gnome-sudoku/src/lib/colors.py
index e1c0b4a..46a0b27 100644
--- a/gnome-sudoku/src/lib/colors.py
+++ b/gnome-sudoku/src/lib/colors.py
@@ -1,12 +1,15 @@
# -*- coding: utf-8 -*-
-def rgb_to_hsv (r,g,b,maxval=255):
- if type(r)==int: r = r/float(maxval)
- if type(g)==int: g = g/float(maxval)
- if type(b)==int: b = b/float(maxval)
+def rgb_to_hsv (r, g, b, maxval = 255):
+ if type(r) == int:
+ r = r/float(maxval)
+ if type(g) == int:
+ g = g/float(maxval)
+ if type(b) == int:
+ b = b/float(maxval)
# Taken from
# http://www.easyrgb.com/math.php?MATH=M20#text20
- var_min = min(r,g,b)
- var_max = max(r,g,b)
+ var_min = min(r, g, b)
+ var_max = max(r, g, b)
delta = var_max - var_min
v = var_max
if delta == 0:
@@ -18,55 +21,65 @@ def rgb_to_hsv (r,g,b,maxval=255):
delta_r = ( ( (var_max - r) / 6) + (delta/2) ) / delta
delta_g = ( ( (var_max - g) / 6) + (delta/2) ) / delta
delta_b = ( ( (var_max - b) / 6) + (delta/2) ) / delta
- if (r==var_max):
+ if (r == var_max):
h = delta_b - delta_g
- elif g==var_max:
+ elif g == var_max:
h = (1.0/3)+delta_r-delta_b
- elif b==var_max:
+ elif b == var_max:
h = (2.0/3)+delta_g-delta_r
- if (h < 0): h+=1
- if (h > 1): h -= 1
- return h,s,v
+ if (h < 0):
+ h += 1
+ if (h > 1):
+ h -= 1
+ return h, s, v
-def hsv_to_rgb (h,s,v):
- if s==0:
- return v,v,v
+def hsv_to_rgb (h, s, v):
+ if s == 0:
+ return v, v, v
else:
h = h*6
- if h == 6: h = 0
+ if h == 6:
+ h = 0
i = int(h)
c1 = v*(1 - s)
c2 = v*(1 - s * ( h-i ) )
c3 = v *(1 - s * (1 - (h - i) ) )
- if i==0: r=v;g=c3;b=c1
- elif i==1: r=c2; g=v; b=c1
- elif i==2: r=c1; g=v; b=c3
- elif i==3: r=c1; g=c2; b=v
- elif i==4: r=c3; g=c1; b=v
- else: r=v; g=c1; b=c2
- return r,g,b
+ if i == 0:
+ r, g, b = v, c3, c1
+ elif i == 1:
+ r, g, b = c2, v, c1
+ elif i == 2:
+ r, g, b = c1, v, c3
+ elif i == 3:
+ r, g, b = c1, c2, v
+ elif i == 4:
+ r, g, b = c3, c1, v
+ else:
+ r, g, b = v, c1, c2
+ return r, g, b
-def rotate_hue (h,s,v, rotate_by=.25):
+def rotate_hue (h, s, v, rotate_by = .25):
h += rotate_by
- if h > 1.0: h = h-1.0
- return h,s,v
+ if h > 1.0:
+ h = h-1.0
+ return h, s, v
-def rotate_hue_rgb (r,g,b, rotate_by=0.25, maxval=255):
- h,s,v = rgb_to_hsv(r,g,b,maxval=maxval)
- h,s,v = rotate_hue (h,s,v,rotate_by=rotate_by)
- return hsv_to_rgb(h,s,v)
+def rotate_hue_rgb (r, g, b, rotate_by = 0.25, maxval = 255):
+ h, s, v = rgb_to_hsv(r, g, b, maxval = maxval)
+ h, s, v = rotate_hue (h, s, v, rotate_by = rotate_by)
+ return hsv_to_rgb(h, s, v)
def color_hex_to_float (hstr):
hstr = hstr.strip('#')
- if len(hstr)==6:
+ if len(hstr) == 6:
r = hstr[:2]
g = hstr[2:4]
b = hstr[4:]
maxval = 255
- elif len(hstr)==3:
- r,g,b = hstr
+ elif len(hstr) == 3:
+ r, g, b = hstr
maxval = 15
else:
raise ValueError('%s is not a 6 or 3 digit color string'%hstr)
- r,g,b = int(r,16),int(g,16),int(b,16)
- return r/float(maxval),g/float(maxval),b/float(maxval)
+ r, g, b = int(r, 16), int(g, 16), int(b, 16)
+ return r/float(maxval), g/float(maxval), b/float(maxval)
diff --git a/gnome-sudoku/src/lib/defaults.py.in b/gnome-sudoku/src/lib/defaults.py.in
index 62fc9c1..6842ba7 100644
--- a/gnome-sudoku/src/lib/defaults.py.in
+++ b/gnome-sudoku/src/lib/defaults.py.in
@@ -15,9 +15,9 @@ if not os.path.exists(os.path.join(root_dir, "Makefile.am")):
APP_DATA_DIR = os.path.join('@prefix@', 'share')
IMAGE_DIR = os.path.join(APP_DATA_DIR, 'pixmaps', 'gnome-sudoku')
LOCALEDIR = os.path.join(APP_DATA_DIR, 'locale')
- UI_DIR = os.path.join(APP_DATA_DIR,'gnome-sudoku')
- BASE_DIR = os.path.join(APP_DATA_DIR,'gnome-sudoku')
- PUZZLE_DIR = os.path.join(APP_DATA_DIR,'gnome-sudoku','puzzles')
+ UI_DIR = os.path.join(APP_DATA_DIR, 'gnome-sudoku')
+ BASE_DIR = os.path.join(APP_DATA_DIR, 'gnome-sudoku')
+ PUZZLE_DIR = os.path.join(APP_DATA_DIR, 'gnome-sudoku', 'puzzles')
else:
# Running in uninstalled mode
sys.path.insert(0, os.path.abspath(root_dir))
@@ -41,7 +41,7 @@ DESCRIPTION = _('GNOME Sudoku is a simple sudoku generator and player. Sudoku is
AUTHORS = ["Thomas M. Hinkle"]
WEBSITE = 'http://www.gnome.org/projects/gnome-games/'
WEBSITE_LABEL = _('GNOME Games web site')
-AUTO_SAVE= True
+AUTO_SAVE = True
MIN_NEW_PUZZLES = 90
# The GPL license string will be translated, and the game name inserted.
diff --git a/gnome-sudoku/src/lib/dialog_swallower.py b/gnome-sudoku/src/lib/dialog_swallower.py
index 0009292..ed103ec 100644
--- a/gnome-sudoku/src/lib/dialog_swallower.py
+++ b/gnome-sudoku/src/lib/dialog_swallower.py
@@ -14,7 +14,7 @@ class SwappableArea (gtk.Notebook):
running = False
- def __init__ (self,main_area):
+ def __init__ (self, main_area):
gtk.Notebook.__init__(self)
self.set_show_tabs(False)
self.set_show_border(False)
@@ -48,7 +48,8 @@ class SwappableArea (gtk.Notebook):
gtk.main()
except:
print 'Error in dialog!'
- import traceback; traceback.print_exc()
+ import traceback
+ traceback.print_exc()
print 'forge on fearlessly...'
self.set_current_page(self.main_page)
self.running = None
@@ -63,9 +64,10 @@ if __name__ == '__main__':
d = gtk.Dialog()
d.vbox.add(gtk.Label('Foo, bar, baz'))
d.vbox.show_all()
- d.add_button(gtk.STOCK_CLOSE,gtk.RESPONSE_CLOSE)
+ d.add_button(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE)
w = gtk.Window()
- b = gtk.Button('show d'); b.show()
+ b = gtk.Button('show d')
+ b.show()
sa = SwappableArea(b)
sa.show()
w.add(sa)
diff --git a/gnome-sudoku/src/lib/game_selector.py b/gnome-sudoku/src/lib/game_selector.py
index a5ecb95..2b10742 100644
--- a/gnome-sudoku/src/lib/game_selector.py
+++ b/gnome-sudoku/src/lib/game_selector.py
@@ -114,7 +114,7 @@ class NewOrSavedGameSelector (gconf_wrapper.GConfWrapper):
if puzzles:
puzzle, diff_val = puzzles[0]
else:
- print 'WARNING: Repeating puzzle for difficulty %s -- generate more puzzles to avoid this.'%cat
+ print 'WARNING: Repeating puzzle for difficulty %s -- generate more puzzles to avoid this.' % cat
puzzles = self.sudoku_maker.get_puzzles(1, [cat], new = False)
if puzzles:
puzzle, diff_val = puzzles[0]
diff --git a/gnome-sudoku/src/lib/pausable.py b/gnome-sudoku/src/lib/pausable.py
index 11e7448..c8853c7 100644
--- a/gnome-sudoku/src/lib/pausable.py
+++ b/gnome-sudoku/src/lib/pausable.py
@@ -5,22 +5,22 @@ class MethodWrapper:
def __call__ (self, cls):
for attr in dir(cls):
- attrobj = getattr(cls,attr)
+ attrobj = getattr(cls, attr)
if callable(attrobj) and attr.find('__')!=0:
- setattr(cls,attr,self.wrap(attrobj))
+ setattr(cls, attr, self.wrap(attrobj))
- def wrap (self,f):
+ def wrap (self, f):
def _(*args, **kwargs):
- self.wrapper(*args,**kwargs)
- return f(*args,**kwargs)
+ self.wrapper(*args, **kwargs)
+ return f(*args, **kwargs)
return _
def wrapper (self, *args, **kwargs):
- print args,kwargs
+ print args, kwargs
class PausableWrapper (MethodWrapper):
- def __init__ (self,sleep_for=1):
+ def __init__ (self, sleep_for=1):
self.sleep_for = sleep_for
def __call__ (self, cls):
@@ -38,7 +38,7 @@ class PausableWrapper (MethodWrapper):
def _(cls, *args, **kwargs):
cls.paused = False
cls.terminated = False
- return f(cls,*args,**kwargs)
+ return f(cls, *args, **kwargs)
return _
def pause (self, cls):
@@ -54,9 +54,11 @@ class PausableWrapper (MethodWrapper):
cls.terminated = False
def wrapper (self, cls, *args, **kwargs):
- if cls.terminated: raise "Terminated!"
+ if cls.terminated:
+ raise "Terminated!"
while cls.paused:
- if cls.terminated: raise "Terminated!"
+ if cls.terminated:
+ raise "Terminated!"
time.sleep(self.sleep_for)
diff --git a/gnome-sudoku/src/lib/simple_debug.py b/gnome-sudoku/src/lib/simple_debug.py
index 4885baf..d5573a6 100644
--- a/gnome-sudoku/src/lib/simple_debug.py
+++ b/gnome-sudoku/src/lib/simple_debug.py
@@ -5,40 +5,41 @@ import defaults
parser = optparse.OptionParser(
version=defaults.VERSION,
option_list=[
- optparse.make_option("-v",const=True,action="store_const",
- dest="debug",help="Print debug information",
+ optparse.make_option("-v", const=True, action="store_const",
+ dest="debug", help="Print debug information",
default=False),
- optparse.make_option("-p",const=True,action="store_const",
- dest="profile",help="Profile gnome-sudoku",
+ optparse.make_option("-p", const=True, action="store_const",
+ dest="profile", help="Profile gnome-sudoku",
default=False),
- optparse.make_option("-w",const=True,action="store_const",
- dest="walk",help="Step through program",
+ optparse.make_option("-w", const=True, action="store_const",
+ dest="walk", help="Step through program",
default=False),
]
)
-options,args = parser.parse_args()
+options, args = parser.parse_args()
# Make a lovely wrapper
if options.debug:
def simple_debug (f):
- def _ (self, *args,**kwargs):
- print self.__class__,f.__name__,args,kwargs
- return f(self,*args,**kwargs)
+ def _ (self, *args, **kwargs):
+ print self.__class__, f.__name__, args, kwargs
+ return f(self, *args, **kwargs)
return _
elif options.walk:
ff = []
def simple_debug (f):
- def _ (self, *args,**kwargs):
- if (self.__class__,f.__name__) not in ff:
- print self.__class__,f.__name__,args,kwargs
+ def _ (self, *args, **kwargs):
+ if (self.__class__, f.__name__) not in ff:
+ print self.__class__, f.__name__, args, kwargs
if raw_input('Hit return to step forward (hit i to ignore this function): ')=='i':
- ff.append((self.__class__,f.__name__))
- return f(self,*args,**kwargs)
+ ff.append((self.__class__, f.__name__))
+ return f(self, *args, **kwargs)
return _
else:
- def simple_debug (f): return f
+ def simple_debug (f):
+ return f
diff --git a/gnome-sudoku/src/lib/sudoku_generator_gui.py b/gnome-sudoku/src/lib/sudoku_generator_gui.py
index 5420fe7..6c72046 100644
--- a/gnome-sudoku/src/lib/sudoku_generator_gui.py
+++ b/gnome-sudoku/src/lib/sudoku_generator_gui.py
@@ -25,7 +25,7 @@ class GameGenerator (gconf_wrapper.GConfWrapper):
self.sudoku_maker = self.ui.sudoku_maker
# Don't work in background...
self.ui.stop_worker_thread()
- gconf_wrapper.GConfWrapper.__init__(self,gconf)
+ gconf_wrapper.GConfWrapper.__init__(self, gconf)
self.builder = gtk.Builder()
self.builder.add_from_file(self.ui_file)
self.generate_for_target_widgets = []
@@ -34,43 +34,43 @@ class GameGenerator (gconf_wrapper.GConfWrapper):
'medium',
'hard',
'veryHard']:
- widget_name = '%sCheckButton'%d
+ widget_name = '%sCheckButton' % d
widget = self.builder.get_object(widget_name)
- label_widget_name = '%sLabel'%d
- setattr(self,label_widget_name,self.builder.get_object(label_widget_name))
- setattr(self,widget_name,widget)
- gconf_setting = 'generate_target_%s'%d
- self.gconf_wrap_toggle(gconf_setting,widget)
+ label_widget_name = '%sLabel' % d
+ setattr(self, label_widget_name, self.builder.get_object(label_widget_name))
+ setattr(self, widget_name, widget)
+ gconf_setting = 'generate_target_%s' % d
+ self.gconf_wrap_toggle(gconf_setting, widget)
self.generate_for_target_widgets.append(widget)
- self.cat_to_label[d] = getattr(self,label_widget_name)
+ self.cat_to_label[d] = getattr(self, label_widget_name)
self.cat_to_label['very hard'] = self.cat_to_label['veryHard']
self.generateEndlesslyRadio = self.builder.get_object('generateEndlesslyRadio')
self.generateForTargetRadio = self.builder.get_object('generateForTargetRadio')
- self.gconf_wrap_toggle('generate_endlessly',self.generateEndlesslyRadio)
- self.gconf_wrap_toggle('generate_for_target',self.generateForTargetRadio)
- self.generateEndlesslyRadio.connect('toggled',self.generate_method_changed_cb)
+ self.gconf_wrap_toggle('generate_endlessly', self.generateEndlesslyRadio)
+ self.gconf_wrap_toggle('generate_for_target', self.generateForTargetRadio)
+ self.generateEndlesslyRadio.connect('toggled', self.generate_method_changed_cb)
self.newSudokusSpinButton = self.builder.get_object('newSudokusSpinButton')
self.gconf_wrap_adjustment('number_of_sudokus_to_generate',
self.newSudokusSpinButton.get_adjustment()
)
self.generate_for_target_widgets.append(self.newSudokusSpinButton)
self.generateButton = self.builder.get_object('generateButton')
- self.generateButton.connect('clicked',self.generate_cb)
+ self.generateButton.connect('clicked', self.generate_cb)
self.closeButton = self.builder.get_object('closeButton')
- self.closeButton.connect('clicked',self.close_cb)
+ self.closeButton.connect('clicked', self.close_cb)
self.pauseButton = self.builder.get_object('pauseButton')
- self.pauseButton.connect('clicked',self.pause_cb)
+ self.pauseButton.connect('clicked', self.pause_cb)
self.stopButton = self.builder.get_object('stopButton')
- self.stopButton.connect('clicked',self.stop_cb)
+ self.stopButton.connect('clicked', self.stop_cb)
self.pauseButton.set_sensitive(False)
self.stopButton.set_sensitive(False)
self.prog = self.builder.get_object('progressbar1')
self.prog.set_text('0 %')
self.working = False
- self.easyCheckButton.connect('clicked',self.criteria_cb)
- self.mediumCheckButton.connect('clicked',self.criteria_cb)
- self.hardCheckButton.connect('clicked',self.criteria_cb)
- self.veryHardCheckButton.connect('clicked',self.criteria_cb)
+ self.easyCheckButton.connect('clicked', self.criteria_cb)
+ self.mediumCheckButton.connect('clicked', self.criteria_cb)
+ self.hardCheckButton.connect('clicked', self.criteria_cb)
+ self.veryHardCheckButton.connect('clicked', self.criteria_cb)
self.generate_method_changed_cb()
self.dialog = self.builder.get_object('PuzzleGenerator')
self.dialog.show_all()
@@ -111,8 +111,8 @@ class GameGenerator (gconf_wrapper.GConfWrapper):
self.working = True
self.paused = False
self.prog.set_text(_('Working...'))
- gobject.timeout_add(100,self.update_status)
- self.worker = threading.Thread(target=lambda *args: self.sudoku_maker.work(limit=None,diff_min=self.get_diff_min(),diff_max=self.get_diff_max()))
+ gobject.timeout_add(100, self.update_status)
+ self.worker = threading.Thread(target=lambda *args: self.sudoku_maker.work(limit=None, diff_min=self.get_diff_min(), diff_max=self.get_diff_max()))
self.worker.start()
def pause_cb (self, widg):
@@ -146,12 +146,12 @@ class GameGenerator (gconf_wrapper.GConfWrapper):
def update_available (self):
"""Setup basic status.
"""
- for diff,lab in [('easy',self.easyLabel),
- ('medium',self.mediumLabel),
- ('hard',self.hardLabel),
- ('very hard',self.veryHardLabel)]:
+ for diff, lab in [('easy', self.easyLabel),
+ ('medium', self.mediumLabel),
+ ('hard', self.hardLabel),
+ ('very hard', self.veryHardLabel)]:
num = self.sudoku_maker.n_puzzles(diff)
- lab.set_text(ngettext("%(n)s puzzle","%(n)s puzzles",num)%{'n':num})
+ lab.set_text(ngettext("%(n)s puzzle", "%(n)s puzzles", num) % {'n':num})
def generated (self):
return self.sudoku_maker.n_puzzles() - self.initally_generated
@@ -169,11 +169,13 @@ class GameGenerator (gconf_wrapper.GConfWrapper):
print 'Done!'
self.stop_cb()
return False
- if self.paused: self.prog.set_text(_('Paused'))
+ if self.paused:
+ self.prog.set_text(_('Paused'))
elif self.generateEndlesslyRadio.get_active():
self.prog.pulse()
- if not self.working: return False
- if hasattr(self.sudoku_maker,'new_generator') and self.sudoku_maker.new_generator.terminated:
+ if not self.working:
+ return False
+ if hasattr(self.sudoku_maker, 'new_generator') and self.sudoku_maker.new_generator.terminated:
self.prog.set_text(_('Stopped'))
self.stopButton.set_sensitive(False)
self.pauseButton.set_sensitive(False)
@@ -191,7 +193,7 @@ class GameGenerator (gconf_wrapper.GConfWrapper):
try:
txt = ngettext('Generated %(n)s out of %(total)s puzzle',
'Generated %(n)s out of %(total)s puzzles',
- tot)%{'n':self.generated(),'total':tot}
+ tot) % {'n':self.generated(), 'total':tot}
except TypeError:
# Allow for fuzzy translation badness caused by a
# previous version having this done the wrong way
@@ -201,26 +203,37 @@ class GameGenerator (gconf_wrapper.GConfWrapper):
try:
txt = ngettext('Generated %(n)s out of %(total)s puzzle',
'Generated %(n)s out of %(total)s puzzles',
- tot)%(self.generated(),tot)
+ tot) % (self.generated(), tot)
except:
# Fallback to English
- txt = 'Generated %s out of %s puzzles'%(self.generated(),tot)
+ txt = 'Generated %s out of %s puzzles' % (self.generated(), tot)
else:
self.prog.pulse()
- txt = ngettext('Generated %(n)s puzzle','Generated %(n)s puzzles',self.generated())%{'n':self.generated()}
- if self.paused: txt = txt + ' (' + _('Paused') + ')'
+ txt = ngettext('Generated %(n)s puzzle', 'Generated %(n)s puzzles', self.generated()) % {'n':self.generated()}
+ if self.paused:
+ txt = txt + ' (' + _('Paused') + ')'
self.prog.set_text(txt)
def get_diff_min (self):
- if self.generateEndlesslyRadio.get_active(): return None
- if self.easyCheckButton.get_active(): return None
- if self.mediumCheckButton.get_active(): return sudoku.DifficultyRating.medium_range[0]
- if self.hardCheckButton.get_active(): return sudoku.DifficultyRating.hard_range[0]
- if self.veryHardCheckButton.get_active(): return sudoku.DifficultyRating.very_hard_range[0]
+ if self.generateEndlesslyRadio.get_active():
+ return None
+ if self.easyCheckButton.get_active():
+ return None
+ if self.mediumCheckButton.get_active():
+ return sudoku.DifficultyRating.medium_range[0]
+ if self.hardCheckButton.get_active():
+ return sudoku.DifficultyRating.hard_range[0]
+ if self.veryHardCheckButton.get_active():
+ return sudoku.DifficultyRating.very_hard_range[0]
def get_diff_max (self):
- if self.generateEndlesslyRadio.get_active(): return None
- if self.veryHardCheckButton.get_active(): return None
- if self.hardCheckButton.get_active(): return sudoku.DifficultyRating.hard_range[1]
- if self.mediumCheckButton.get_active(): return sudoku.DifficultyRating.medium_range[1]
- if self.easyCheckButton.get_active(): return sudoku.DifficultyRating.easy_range[1]
+ if self.generateEndlesslyRadio.get_active():
+ return None
+ if self.veryHardCheckButton.get_active():
+ return None
+ if self.hardCheckButton.get_active():
+ return sudoku.DifficultyRating.hard_range[1]
+ if self.mediumCheckButton.get_active():
+ return sudoku.DifficultyRating.medium_range[1]
+ if self.easyCheckButton.get_active():
+ return sudoku.DifficultyRating.easy_range[1]
diff --git a/gnome-sudoku/src/lib/sudoku_maker.py b/gnome-sudoku/src/lib/sudoku_maker.py
index 52fafe4..167b436 100644
--- a/gnome-sudoku/src/lib/sudoku_maker.py
+++ b/gnome-sudoku/src/lib/sudoku_maker.py
@@ -12,14 +12,14 @@ class SudokuGenerator:
"""A class to generate new Sudoku Puzzles."""
- def __init__ (self, start_grid=None, clues=2, group_size=9):
+ def __init__ (self, start_grid = None, clues = 2, group_size = 9):
self.generated = []
self.clues = clues
self.all_coords = []
self.group_size = group_size
for x in range(self.group_size):
for y in range(self.group_size):
- self.all_coords.append((x,y))
+ self.all_coords.append((x, y))
if start_grid:
self.start_grid = sudoku.SudokuGrid(start_grid)
else:
@@ -36,32 +36,32 @@ class SudokuGenerator:
return sum(difficulties)/len(difficulties)
def generate_grid (self):
- self.start_grid = sudoku.SudokuSolver(verbose=False,group_size=self.group_size)
+ self.start_grid = sudoku.SudokuSolver(verbose = False, group_size = self.group_size)
self.start_grid.solve()
return self.start_grid
- def reflect (self, x, y, axis=1):
+ def reflect (self, x, y, axis = 1):
#downward sloping
upper = self.group_size - 1
# reflect once...
- x,y = upper - y,upper-x
+ x, y = upper - y, upper-x
# reflect twice...
return y, x
def make_symmetric_puzzle (self):
nclues = self.clues/2
- buckshot = set(random.sample(self.all_coords,nclues))
- new_puzzle = sudoku.SudokuGrid(verbose=False,group_size=self.group_size)
+ buckshot = set(random.sample(self.all_coords, nclues))
+ new_puzzle = sudoku.SudokuGrid(verbose = False, group_size = self.group_size)
reflections = set()
- for x,y in buckshot:
- reflection = self.reflect(x,y)
+ for x, y in buckshot:
+ reflection = self.reflect(x, y)
if reflection:
nclues += 1
reflections.add(reflection)
buckshot = buckshot | reflections # unite our sets
remaining_coords = set(self.all_coords) - set(buckshot)
while len(buckshot) < self.clues:
- coord = random.sample(remaining_coords,1)[0]
+ coord = random.sample(remaining_coords, 1)[0]
buckshot.add(coord)
reflection = self.reflect(*coord)
if reflection:
@@ -70,22 +70,22 @@ class SudokuGenerator:
return self.make_puzzle_from_coords(buckshot)
def make_puzzle (self):
- buckshot = random.sample(self.all_coords,self.clues)
+ buckshot = random.sample(self.all_coords, self.clues)
while buckshot in self.generated:
- buckshot = random.sample(self.all_coords,self.clues)
+ buckshot = random.sample(self.all_coords, self.clues)
return self.make_puzzle_from_coords(buckshot)
def make_puzzle_from_coords (self, buckshot):
- new_puzzle = sudoku.SudokuGrid(verbose=False,group_size=self.group_size)
+ new_puzzle = sudoku.SudokuGrid(verbose = False, group_size = self.group_size)
self.generated.append(set(buckshot))
- for x,y in buckshot:
- new_puzzle.add(x,y,self.start_grid._get_(x,y))
+ for x, y in buckshot:
+ new_puzzle.add(x, y, self.start_grid._get_(x, y))
self.puzzles.append(new_puzzle)
return new_puzzle
def make_puzzle_by_boxes (self,
- skew_by=0.0,
- max_squares=None,):
+ skew_by = 0.0,
+ max_squares = None):
"""Make a puzzle paying attention to evenness of clue
distribution.
@@ -144,9 +144,9 @@ class SudokuGenerator:
def assess_difficulty (self, sudoku_grid):
try:
- solver = sudoku.SudokuRater(sudoku_grid,verbose=False,group_size=self.group_size)
+ solver = sudoku.SudokuRater(sudoku_grid, verbose = False, group_size = self.group_size)
d = solver.difficulty()
- self.rated_puzzles.append((sudoku_grid,d))
+ self.rated_puzzles.append((sudoku_grid, d))
return d
except:
print 'Impossible!'
@@ -162,18 +162,18 @@ class SudokuGenerator:
"""If puzzle is unique, return its difficulty.
Otherwise, return None."""
- solver = sudoku.SudokuRater(sudoku_grid,verbose=False,group_size=self.group_size)
+ solver = sudoku.SudokuRater(sudoku_grid, verbose = False, group_size = self.group_size)
if solver.has_unique_solution():
return solver.difficulty()
else:
return None
def generate_puzzle_for_difficulty (self,
- lower_target=0.3,
- upper_target=0.5,
+ lower_target = 0.3,
+ upper_target = 0.5,
max_tries = 100,
- by_box=False,
- by_box_kwargs={}):
+ by_box = False,
+ by_box_kwargs = {}):
for i in range(max_tries):
if by_box:
puz = self.make_puzzle_by_boxes(**by_box_kwargs)
@@ -183,10 +183,11 @@ class SudokuGenerator:
if (d and (not lower_target or d.value > lower_target) and\
(not upper_target or
d.value < upper_target)):
- return puz,d
- else: return None,None
+ return puz, d
+ else:
+ return None, None
- def make_unique_puzzle (self, symmetrical=True, strict_number_of_clues=False):
+ def make_unique_puzzle (self, symmetrical = True, strict_number_of_clues = False):
if symmetrical:
puz = self.make_symmetric_puzzle()
else:
@@ -197,43 +198,47 @@ class SudokuGenerator:
else:
clues = 2
while 1:
- solver = sudoku.SudokuRater(puz.grid,verbose=False,group_size=self.group_size)
+ solver = sudoku.SudokuRater(puz.grid, verbose = False, group_size = self.group_size)
if solver.has_unique_solution():
diff = solver.difficulty()
#raw_input('Unique puzzle!')
break
# Otherwise...
crumb = solver.breadcrumbs[-1]
- fill_in = [(crumb.x,crumb.y)]
- reflection = self.reflect(crumb.x,crumb.y)
- if reflection: fill_in.append(reflection)
- for x,y in fill_in:
- solver.virgin._set_(x,y,self.start_grid._get_(x,y))
- puz = sudoku.SudokuGrid(solver.virgin.grid, verbose=False)
+ fill_in = [(crumb.x, crumb.y)]
+ reflection = self.reflect(crumb.x, crumb.y)
+ if reflection:
+ fill_in.append(reflection)
+ for x, y in fill_in:
+ solver.virgin._set_(x, y, self.start_grid._get_(x, y))
+ puz = sudoku.SudokuGrid(solver.virgin.grid, verbose = False)
#print 'Not unique, adding ',fill_in
clues += len(fill_in)
- if strict_number_of_clues==True and clues > self.clues: return None
+ if strict_number_of_clues == True and clues > self.clues:
+ return None
#print clues, "clues..."
#raw_input('Continue: ')
# make sure we have the proper number of clues
if strict_number_of_clues:
- changed=False
+ changed = False
while clues < self.clues:
- x,y=random.randint(0,8),random.randint(0,8)
- while puz._get_(x,y): x,y=random.randint(0,8),random.randint(0,8)
- puz._set_(x,y,self.start_grid._get_(x,y))
+ x, y = random.randint(0, 8), random.randint(0, 8)
+ while puz._get_(x, y):
+ x, y = random.randint(0, 8), random.randint(0, 8)
+ puz._set_(x, y, self.start_grid._get_(x, y))
clues += 1
- reflection = self.reflect(x,y)
+ reflection = self.reflect(x, y)
if reflection:
- puz._set_(x,y,self.start_grid._get_(x,y))
+ puz._set_(x, y, self.start_grid._get_(x, y))
clues += 1
- changed=True
- if changed: diff = sudoku.SudokuRater(puz.grid,
- verbose=False,
- group_size=self.group_size).difficulty()
- return puz,diff
-
- def make_unique_puzzles (self, n=10, ugargs={}):
+ changed = True
+ if changed:
+ diff = sudoku.SudokuRater(puz.grid,
+ verbose = False,
+ group_size = self.group_size).difficulty()
+ return puz, diff
+
+ def make_unique_puzzles (self, n = 10, ugargs = {}):
ug = self.unique_generator(**ugargs)
ret = []
for i in range(n):
@@ -243,20 +248,21 @@ class SudokuGenerator:
return ret
def unique_generator (self,
- symmetrical=True,
- strict_number_of_clues=False,
- by_box=False,
- by_box_kwargs={}):
+ symmetrical = True,
+ strict_number_of_clues = False,
+ by_box = False,
+ by_box_kwargs = {}):
while 1:
result = self.make_unique_puzzle(
- symmetrical=symmetrical,
- strict_number_of_clues=strict_number_of_clues)
- if result: yield result
-
- def generate_puzzles (self, n=10,
- symmetrical=True,
- by_box=False,
- by_box_kwargs={}):
+ symmetrical = symmetrical,
+ strict_number_of_clues = strict_number_of_clues)
+ if result:
+ yield result
+
+ def generate_puzzles (self, n = 10,
+ symmetrical = True,
+ by_box = False,
+ by_box_kwargs = {}):
ret = []
for i in range(n):
#print 'Generating puzzle ',i
@@ -268,23 +274,23 @@ class SudokuGenerator:
puz = self.make_puzzle()
#print 'Assessing puzzle ',puz
try:
- d=self.assess_difficulty(puz.grid)
+ d = self.assess_difficulty(puz.grid)
except:
raise
if d:
- ret.append((puz,d))
- ret.sort(lambda a,b: a[1].value>b[1].value and 1 or a[1].value<b[1].value and -1 or 0)
+ ret.append((puz, d))
+ ret.sort(lambda a, b: a[1].value>b[1].value and 1 or a[1].value<b[1].value and -1 or 0)
return ret
class InterruptibleSudokuGenerator (SudokuGenerator):
- def __init__ (self,*args,**kwargs):
+ def __init__ (self, *args, **kwargs):
self.paused = False
self.terminated = False
- SudokuGenerator.__init__(self,*args,**kwargs)
- def work (self,*args,**kwargs):
+ SudokuGenerator.__init__(self, *args, **kwargs)
+ def work (self, *args, **kwargs):
self.unterminate()
- SudokuGenerator(self,*args,**kwargs)
+ SudokuGenerator(self, *args, **kwargs)
pausable.make_pausable(InterruptibleSudokuGenerator)
@@ -294,9 +300,9 @@ class SudokuMaker:
"""A class to create unique, symmetrical sudoku puzzles."""
def __init__ (self,
- generator_args={'clues':27,
+ generator_args = {'clues':27,
'group_size':9},
- puzzle_maker_args={'symmetrical':True},
+ puzzle_maker_args = {'symmetrical':True},
batch_size = 5,
pickle_to = os.path.join(defaults.DATA_DIR, 'puzzles')):
self.pickle_to = pickle_to
@@ -308,7 +314,7 @@ class SudokuMaker:
self.load()
self.all_puzzles = {}
self.played = self.get_pregenerated('finished')
- self.n_available_sudokus = {'easy':None,'medium':None,'hard':None,'very hard':None}
+ self.n_available_sudokus = {'easy':None, 'medium':None, 'hard':None, 'very hard':None}
def load (self):
try:
@@ -318,7 +324,7 @@ class SudokuMaker:
return
for cat in sudoku.DifficultyRating.categories:
source = os.path.join(os.path.join(defaults.PUZZLE_DIR), cat.replace(' ', '_'))
- target = os.path.join(self.pickle_to, cat.replace(' ','_'))
+ target = os.path.join(self.pickle_to, cat.replace(' ', '_'))
if not os.path.exists(target):
try:
shutil.copy(source, target)
@@ -327,7 +333,7 @@ class SudokuMaker:
print 'Attempted to copy from %s to %s' % (source, target)
def get_pregenerated (self, difficulty):
- fname = os.path.join(self.pickle_to, difficulty.replace(' ','_'))
+ fname = os.path.join(self.pickle_to, difficulty.replace(' ', '_'))
try:
lines = file(fname).readlines()
except IOError, e:
@@ -337,7 +343,7 @@ class SudokuMaker:
else:
return [line.strip() for line in lines]
- def get_new_puzzle (self, difficulty, new=True):
+ def get_new_puzzle (self, difficulty, new = True):
"""Return puzzle with difficulty near difficulty.
If new is True, we return only unplayed puzzles.
@@ -345,36 +351,39 @@ class SudokuMaker:
"""
val_cat = sudoku.get_difficulty_category(difficulty)
if not val_cat:
- print 'WARNING, no val cat for difficulty:',difficulty
- if val_cat > 1: val_cat = 'very hard'
- else: val_cat = 'easy'
+ print 'WARNING, no val cat for difficulty:', difficulty
+ if val_cat > 1:
+ val_cat = 'very hard'
+ else:
+ val_cat = 'easy'
puzzles = []
lines = self.get_pregenerated(val_cat)
- closest = 10000000000000,None
+ closest = 10000000000000, None
for l in lines:
if len(l) == 0:
- print 'Warning: file %s contains an empty line'%fname
+ print 'Warning: file %s contains an empty line' % fname
continue
if not l.find('\t')>=0:
- print 'Warning: line "%s" of file %s has no tab character.'%(l,fname)
+ print 'Warning: line "%s" of file %s has no tab character.' % (l, fname)
+ continue
+ puzzle, diff = l.split('\t')
+ if new and (puzzle in self.played):
continue
- puzzle,diff = l.split('\t')
- if new and (puzzle in self.played): continue
if not sudoku.is_valid_puzzle(puzzle):
- print 'WARNING: invalid puzzle %s in file %s'%(puzzle,fname)
+ print 'WARNING: invalid puzzle %s in file %s' % (puzzle, fname)
continue
diff = float(diff)
closeness_to_target = abs(diff - difficulty)
if closest[0] > closeness_to_target:
- closest = diff,puzzle
- return closest[1],sudoku.SudokuRater(
+ closest = diff, puzzle
+ return closest[1], sudoku.SudokuRater(
sudoku.sudoku_grid_from_string(closest[1]).grid
).difficulty()
- def n_puzzles (self, difficulty_category=None, new=True):
+ def n_puzzles (self, difficulty_category = None, new = True):
if not difficulty_category:
- return sum([self.n_puzzles(c,new=new) for c in sudoku.DifficultyRating.categories])
+ return sum([self.n_puzzles(c, new = new) for c in sudoku.DifficultyRating.categories])
else:
if self.n_available_sudokus[difficulty_category]:
return self.n_available_sudokus[difficulty_category]
@@ -382,17 +391,17 @@ class SudokuMaker:
count = 0
for line in lines:
if (not new) or line.split('\t')[0] not in self.played:
- count+=1
+ count += 1
self.n_available_sudokus[difficulty_category] = count
return self.n_available_sudokus[difficulty_category]
- def list_puzzles (self, difficulty_category=None, new=True):
+ def list_puzzles (self, difficulty_category = None, new = True):
"""Return a list of all puzzles we have generated.
"""
puzzle_list = []
if not difficulty_category:
for c in sudoku.DifficultyRating.categories:
- puzzle_list.extend(self.list_puzzles(c,new=new))
+ puzzle_list.extend(self.list_puzzles(c, new = new))
else:
lines = self.get_pregenerated(difficulty_category)
for l in lines:
@@ -401,25 +410,29 @@ class SudokuMaker:
puzzle_list.append(puzzle)
return puzzle_list
- def get_puzzles_random (self, n, levels, new=True, exclude=[]):
+ def get_puzzles_random (self, n, levels, new = True, exclude = []):
"""Return a list of n puzzles and difficulty values (as floats).
The puzzles will correspond as closely as possible to levels.
If new, we only return puzzles not yet played.
"""
- if not n: return []
+ if not n:
+ return []
assert(levels)
puzzles = []
# Open files to read puzzles...
- puzzles_by_level = {}; files = {}
+ puzzles_by_level = {}
+ files = {}
for l in levels:
puzzles_by_level[l] = self.get_pregenerated(l)
random.shuffle(puzzles_by_level[l])
- i = 0; il = 0
+ i = 0
+ il = 0
n_per_level = {}
finished = []
while i < n and len(finished) < len(levels):
- if il >= len(levels): il = 0
+ if il >= len(levels):
+ il = 0
lev = levels[il]
# skip any levels that we've exhausted
if lev in finished:
@@ -431,31 +444,33 @@ class SudokuMaker:
finished.append(lev)
else:
try:
- p,d = line.split('\t')
+ p, d = line.split('\t')
except ValueError:
- print 'WARNING: invalid line %s in file %s'%(line,files[lev])
+ print 'WARNING: invalid line %s in file %s' % (line, files[lev])
continue
if sudoku.is_valid_puzzle(p):
if (p not in exclude) and (not new or p not in self.played):
- puzzles.append((p,float(d)))
+ puzzles.append((p, float(d)))
i += 1
else:
- print 'WARNING: invalid puzzle %s in file %s'%(p,files[lev])
+ print 'WARNING: invalid puzzle %s in file %s' % (p, files[lev])
il += 1
if i < n:
- print 'WARNING: Not able to provide %s puzzles in levels %s'%(n,levels)
+ print 'WARNING: Not able to provide %s puzzles in levels %s' % (n, levels)
print 'WARNING: Generate more puzzles if you really need this many puzzles!'
return puzzles
- def get_puzzles (self, n, levels, new=True, randomize=True,
- exclude=[]):
+ def get_puzzles (self, n, levels, new = True, randomize = True,
+ exclude = []):
"""Return a list of n puzzles and difficulty values (as floats).
The puzzles will correspond as closely as possible to levels.
If new, we only return puzzles not yet played.
"""
- if randomize: return self.get_puzzles_random(n,levels,new=new,exclude=exclude)
- if not n: return []
+ if randomize:
+ return self.get_puzzles_random(n, levels, new = new, exclude = exclude)
+ if not n:
+ return []
assert(levels)
puzzles = []
@@ -464,11 +479,13 @@ class SudokuMaker:
for l in levels:
files[l] = self.get_pregenerated(l)
- i = 0; il = 0
+ i = 0
+ il = 0
n_per_level = {}
finished = []
while i < n and len(finished) < len(levels):
- if il >= len(levels): il = 0
+ if il >= len(levels):
+ il = 0
lev = levels[il]
# skip any levels that we've exhausted
if lev in finished:
@@ -481,19 +498,19 @@ class SudokuMaker:
line = files[lev][0]
files[lev] = files[lev][1:]
try:
- p,d = line.split('\t')
+ p, d = line.split('\t')
except ValueError:
- print 'WARNING: invalid line %s in file %s'%(line,files[lev])
+ print 'WARNING: invalid line %s in file %s' % (line, files[lev])
continue
if sudoku.is_valid_puzzle(p):
if (p not in exclude) and (not new or p not in self.played):
- puzzles.append((p,float(d)))
+ puzzles.append((p, float(d)))
i += 1
else:
- print 'WARNING: invalid puzzle %s in file %s'%(p,files[lev])
+ print 'WARNING: invalid puzzle %s in file %s' % (p, files[lev])
il += 1
if i < n:
- print 'WARNING: Not able to provide %s puzzles in levels %s'%(n,levels)
+ print 'WARNING: Not able to provide %s puzzles in levels %s' % (n, levels)
print 'WARNING: Generate more puzzles if you really need this many puzzles!'
return puzzles
@@ -502,7 +519,7 @@ class SudokuMaker:
# Methods for creating new puzzles
- def make_batch (self, diff_min=None, diff_max=None):
+ def make_batch (self, diff_min = None, diff_max = None):
self.new_generator = InterruptibleSudokuGenerator(**self.generator_args)
key = self.new_generator.start_grid.to_string()
#while
@@ -514,7 +531,7 @@ class SudokuMaker:
open_files = {}
for n in range(self.batch_size):
#print 'start next item...',n
- puz,diff = ug.next()
+ puz, diff = ug.next()
#print "GENERATED ",puz,diff
if ((not diff_min or diff.value >= diff_min)
and
@@ -525,13 +542,13 @@ class SudokuMaker:
# self.all_puzzles[puzstring] = diff
# self.names[puzstring] = self.get_puzzle_name(_('Puzzle'))
outpath = os.path.join(self.pickle_to,
- diff.value_category().replace(' ','_'))
+ diff.value_category().replace(' ', '_'))
# Read through the existing file and make sure we're
# not a duplicate puzzle
existing = self.get_pregenerated(diff.value_category())
if not puzstring in existing:
try:
- outfi = file(outpath,'a')
+ outfi = file(outpath, 'a')
outfi.write(puzstring+'\t'+str(diff.value)+'\n')
outfi.close()
self.n_available_sudokus[diff.value_category()]+=1
@@ -539,26 +556,31 @@ class SudokuMaker:
print 'Error appending pregenerated puzzle: %s' % e.strerror
def pause (self, *args):
- if hasattr(self,'new_generator'): self.new_generator.pause()
+ if hasattr(self, 'new_generator'):
+ self.new_generator.pause()
self.paused = True
def resume (self, *args):
- if hasattr(self,'new_generator'): self.new_generator.resume()
+ if hasattr(self, 'new_generator'):
+ self.new_generator.resume()
self.paused = False
def stop (self, *args):
- if hasattr(self,'new_generator'): self.new_generator.terminate()
+ if hasattr(self, 'new_generator'):
+ self.new_generator.terminate()
self.terminated = True
def hesitate (self):
while self.paused:
- if self.terminated: break
+ if self.terminated:
+ break
time.sleep(1)
- def work (self, limit = None, diff_min=None, diff_max=None):
+ def work (self, limit = None, diff_min = None, diff_max = None):
"""Intended to be called as a worker thread, make puzzles!"""
self.terminated = False
- if hasattr(self,'new_generator'): self.new_generator.termintaed = False
+ if hasattr(self, 'new_generator'):
+ self.new_generator.termintaed = False
self.paused = False
generated = 0
while not limit or generated < limit:
@@ -567,8 +589,8 @@ class SudokuMaker:
if self.paused:
self.hesitate()
try:
- self.make_batch(diff_min=diff_min,
- diff_max=diff_max)
+ self.make_batch(diff_min = diff_min,
+ diff_max = diff_max)
except:
raise
else:
@@ -579,7 +601,6 @@ class SudokuMaker:
if __name__ == '__main__':
- import time
#puzzles=sg.generate_puzzles(30)
#
#print sg.make_symmetric_puzzle()
@@ -592,7 +613,7 @@ if __name__ == '__main__':
sm = SudokuMaker()
#st = SudokuTracker(sm)
elif False:
- usage="""Commands are:
+ usage = """Commands are:
run: Run sudoku-maker
len: \# of puzzles generated
pause: pause
@@ -603,25 +624,25 @@ elif False:
print usage
while 1:
inp = raw_input('choose:')
- if inp=='run':
- t=threading.Thread(target=sm.make_batch)
+ if inp == 'run':
+ t = threading.Thread(target = sm.make_batch)
t.start()
- elif inp=='show':
+ elif inp == 'show':
print sm.puzzles
- elif inp=='len':
+ elif inp == 'len':
print len(sm.puzzles)
- elif inp=='pause':
+ elif inp == 'pause':
sm.new_generator.pause()
- elif inp=='resume':
+ elif inp == 'resume':
sm.new_generator.resume()
- elif inp=='terminate':
+ elif inp == 'terminate':
sm.new_generator.terminate()
- elif inp=='quit':
+ elif inp == 'quit':
sm.new_generator.terminate()
break
else:
try:
- getattr(sm,inp)()
+ getattr(sm, inp)()
except:
print usage
diff --git a/gnome-sudoku/src/lib/sudoku_thumber.py b/gnome-sudoku/src/lib/sudoku_thumber.py
index 46c92d3..8b493d6 100644
--- a/gnome-sudoku/src/lib/sudoku_thumber.py
+++ b/gnome-sudoku/src/lib/sudoku_thumber.py
@@ -4,10 +4,10 @@ import gtk, cairo
SUDOKU_SIZE = 9
N_BOXES = 3
-PENCIL_GREY = (0.3,0.3,0.3)
-BACKGROUND_COLOR = (1.,1.,1.)
+PENCIL_GREY = (0.3, 0.3, 0.3)
+BACKGROUND_COLOR = (1., 1., 1.)
-def draw_sudoku (cr, sudoku, played, size, offset_x=0, offset_y=0, border_color=(1.0,1.0,1.0), line_color=(0.0,0.0,0.0)):
+def draw_sudoku (cr, sudoku, played, size, offset_x = 0, offset_y = 0, border_color = (1.0, 1.0, 1.0), line_color = (0.0, 0.0, 0.0)):
THIN = size / 100.
THICK = THIN * 2.
@@ -30,7 +30,7 @@ def draw_sudoku (cr, sudoku, played, size, offset_x=0, offset_y=0, border_color=
outer["bottom"] = offset_y + size
# Entire background
- cr.set_source_rgb(1.,1.,1.)
+ cr.set_source_rgb(1., 1., 1.)
cr.rectangle(outer["left"],
outer["top"],
size,
@@ -57,8 +57,8 @@ def draw_sudoku (cr, sudoku, played, size, offset_x=0, offset_y=0, border_color=
cr.set_line_width(THICK)
cr.rectangle(outer["left"] + BORDER + THICK/2.0,
outer["top"] + BORDER + THICK/2.0,
- size - BORDER*2 - THICK,
- size - BORDER*2 - THICK)
+ size - BORDER * 2 - THICK,
+ size - BORDER * 2 - THICK)
cr.set_source_rgb(*line_color)
cr.stroke()
@@ -73,7 +73,7 @@ def draw_sudoku (cr, sudoku, played, size, offset_x=0, offset_y=0, border_color=
position = BORDER + THICK
pos[0] = position + SQUARE_SIZE/2.
last_line = 0
- for n in range(1,SUDOKU_SIZE):
+ for n in range(1, SUDOKU_SIZE):
if n % N_BOXES == 0:
cr.set_line_width(THICK)
position += SQUARE_SIZE + last_line/2.0 + THICK/2.0
@@ -83,23 +83,23 @@ def draw_sudoku (cr, sudoku, played, size, offset_x=0, offset_y=0, border_color=
position += SQUARE_SIZE + last_line/2.0 + THIN/2.0
last_line = THIN
pos[n] = position + last_line/2. + SQUARE_SIZE/2.0
- cr.move_to(BORDER+THICK/2.+offset_x, position+offset_y)
- cr.line_to(size-BORDER-THICK/2.+offset_x, position+offset_y)
- cr.move_to(position+offset_x, BORDER+THICK/2.+offset_y)
- cr.line_to(position+offset_x, size-BORDER-THICK/2.+offset_y)
+ cr.move_to(BORDER + THICK/2. + offset_x, position + offset_y)
+ cr.line_to(size - BORDER - THICK/2. + offset_x, position + offset_y)
+ cr.move_to(position + offset_x, BORDER + THICK/2. + offset_y)
+ cr.line_to(position + offset_x, size - BORDER - THICK/2. + offset_y)
cr.stroke()
cr.set_font_size(FONT_SIZE)
for x in range(SUDOKU_SIZE):
for y in range(SUDOKU_SIZE):
- cr.move_to(pos[x]+offset_x,pos[y]+offset_y)
+ cr.move_to(pos[x] + offset_x, pos[y] + offset_y)
letter = None
if sudoku and sudoku[y][x]:
letter = str(sudoku[y][x])
cr.select_font_face("",
cairo.FONT_SLANT_NORMAL,
cairo.FONT_WEIGHT_BOLD)
- cr.set_source_rgb(0,0,0)
- xbearing,ybearing,width,height,xadvance,yadvance = (
+ cr.set_source_rgb(0, 0, 0)
+ xbearing, ybearing, width, height, xadvance, yadvance = (
cr.text_extents(letter)
)
@@ -109,15 +109,15 @@ def draw_sudoku (cr, sudoku, played, size, offset_x=0, offset_y=0, border_color=
cairo.FONT_WEIGHT_NORMAL)
cr.set_source_rgb(*PENCIL_GREY)
letter = str(played[y][x])
- xbearing,ybearing,width,height,xadvance,yadvance = (
+ xbearing, ybearing, width, height, xadvance, yadvance = (
cr.text_extents(letter)
)
if letter:
- cr.move_to(pos[x]+offset_x-(xadvance/2.0),
- pos[y]+offset_y+(height/2.0))
+ cr.move_to(pos[x] + offset_x - (xadvance/2.0),
+ pos[y] + offset_y + (height/2.0))
cr.show_text(letter)
-def make_pixbuf (sudoku, played, border_color, line_color=(0.4,0.4,0.4)):
+def make_pixbuf (sudoku, played, border_color, line_color = (0.4, 0.4, 0.4)):
size = 120
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, size, size)
cr = cairo.Context(surface)
@@ -128,13 +128,13 @@ def make_pixbuf (sudoku, played, border_color, line_color=(0.4,0.4,0.4)):
return pixbuf
if __name__ == "__main__":
- sudoku = [[0, 0, 2, 3, 4, 5, 6, 0, 0]]*SUDOKU_SIZE
- played = [[1,2,0,0,0,0,0,0,0,0]]+[[0,0,0,0,0,0,0,0,0,0]]*8
+ sudoku = [[0, 0, 2, 3, 4, 5, 6, 0, 0]] * SUDOKU_SIZE
+ played = [[1, 2, 0, 0, 0, 0, 0, 0, 0, 0]] + [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]] * 8
size = 250
- line_color=(0.0,0.0,0.0)
- border_color=(1.0,0.0,0.0)
+ line_color = (0.0, 0.0, 0.0)
+ border_color = (1.0, 0.0, 0.0)
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 750, 750)
cr = cairo.Context(surface)
draw_sudoku(cr, sudoku, played, size, 100, 250, border_color, line_color)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]