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