Kent's suggestions are great, but I wanted to add two.

> Hello list.
> 
> I'd really appreciate any comments, particulary regarding style 
> corrections. I'm a newbie...
> 
> Thanks!
> Ismael
> 
> 
> import random
> import tkMessageBox
> from Tkinter import *
> 
> class GUI:
>     def __init__(self):
>         self._crearGUI()
> 
>     def _crearGUI(self):
>         self.root = Tk()
>         self.root.title("Lights")
>         self.botones = [[0,0,0],[0,0,0],[0,0,0]]
>         for i in range(3):
>             for j in range(3):
>                 action = lambda n=i, m=j: self._accion(n,m)
>                 self.botones[i][j] = Button(self.root, height=5, 
> width=10, command=action)
>                 self.botones[i][j].grid(row=i, column=j, padx= 4, pady=4)
> 
>         self._updateBotones()
>         self.root.mainloop()
> 
>     def _accion(self, i, j):
>         self._click(i, j)
>         try:
>             self._checkWin()
>         except ValueError:
>             tkMessageBox.showinfo(title = "You won!", message = "You 
> rock, kid!")
> 
>             if True == tkMessageBox.askyesno(title="What shall we do?", 
> message="Play another?"):
>                 self.root.destroy()
>                 lights.__init__() ## Is this... too ugly? Is there a 
> beter way?
>                 self.__init__()
>             else:
>                 self.root.destroy()
>     def _updateBotones(self):
>         for i in range(3):
>             for j in range(3):
>                 if lights.tablero[i][j] == True:
>                     self.botones[i][j].configure(bg="red")
>                 else:
>                     self.botones[i][j].configure(bg="grey")
> 
>     def _click(self, i, j):
>         lights.click(i,j)
>         self._updateBotones()
> 
>     def _checkWin(self):
>         conteo = 0
>         for i in range(3):
>             for j in range(3):
>                 if lights.tablero[i][j] == True: conteo +=1


if lights.tablero[i][j] == True:
can be simplified to
if lights.tablero[i][j]:

>         if conteo == 9:
>             print "GANO"
>             raise ValueError
>            
>         return
> 
> class Luces:
>     def __init__(self):
>         self.tablero = [[0,0,0],[0,0,0],[0,0,0]]
>         self._hacerTablero()
>  
>     def _hacerTablero(self):
>         for i in range(3):
>             for j in range(3):
>                 self.tablero[i][j] = not random.randint(0,1)

Why use
not random.randint(0,1)?
If it's random, wouldn't just
random.randint(0,1)
give the same result?

Why get a random number and then immediately return the opposite?
It's like resolving to write down heads if you flip tails, and tails if you
flip heads when you flip a coin! Why bother?
 
>     def _cambiarCelda(self, i, j):
>         self.tablero[i][j] = not self.tablero[i][j]
> 
>     def _descartarNegativos(self, n):
>         if n < 0:
>             raise IndexError
>         return n
> 
>     def click(self, i,j):
>         self._cambiarCelda(i,j)
>         try:
>             self._cambiarCelda(self._descartarNegativos(i-1), j)
>         except IndexError:
>             pass
>         try:
>             self._cambiarCelda(self._descartarNegativos(i+1), j)
>         except IndexError:
>             pass
>         try:
>             self._cambiarCelda(i, self._descartarNegativos(j-1))
>         except IndexError:
>             pass
>         try:
>             self._cambiarCelda(i, self._descartarNegativos(j+1))
>         except IndexError:
>             pass
> 
> if __name__ == '__main__':
>     lights = Luces()
>     lightsGUI = GUI()
>    
> _______________________________________________
> Tutor maillist  -  Tutor@python.org
> http://mail.python.org/mailman/listinfo/tutor
> 
> 
_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to