Thanks, definitely adding this concept into my code. And re-writing. I originally hard coded everything just to get it working... but obviously, it would have been more time efficient to have thought in these terms from the beginning. Hopefully I can learn to write code more like this to begin with, even when I just want to get something working.
Reading the rest of your recommendations now.

On 12/25/2014 12:15 AM, Danny Yoo wrote:
Quick comment: the structure of the code here catches my eye:


         # Each variable below is a link to the head Node in the respective
         # row or column.
         self.row0 = None
         self.row1 = None
         self.row2 = None
         self.row3 = None
         self.row4 = None
         self.row5 = None
         self.row6 = None
         self.row7 = None
         self.row8 = None
         self.row9 = None
It seems highly regular; the code here is maintaining a collection of
row variables.  Because it's so regular, you might consider using a
list to represent this collection.  Concretely:

     self.rows = [None, None, None, None, None, None, None, None, None, None]

We can express this more concisely in Python as:

     self.row = [None] * 10

Once we have this, then we can get at any particular row through its
offset.  So instead of:

     self.row0

we say:

     self.row[0]

The big win with a list representation is that the offset can be
computed.  So if we need to do an operation on each row, we might say:

     for i in range(10):
         ## ... Do something with self.row[i]

And if you see the full power of this, you'll realize that this allows
us to express loops to do something to _all_ the rows, expressing that
action just once.  Or if we need to do something for every other row,
that too is not too difficult to express:

     for i in range(0, 10, 2):
         ## ... Do something with self.row[i]


In contrast, doing the same thing without using an explicit container
representation means that doing container-wide actions is harder to
do.  This is the code smell that we saw at the beginning of this post,
where we see repetitive code.

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to