Ulrich Eckhardt wrote:
Brandon McCombs wrote:
I'm building an elevator simulator for a class assignment. I recently
ran into a roadblock and don't know how to fix it. For some reason, in
my checkQueue function below, the call to self.goUp() is never executed.
[...]
sorry about the formatting
While I can certainly forgive you the formatting (my problem is rather that
you didn't reduce the code to the smallest possible example
so I missed a few lines, so sue me.

), Python wont.
Python is a language where whitespace is significant and can subtly change
the meaning of your code.

Example:

for i in range(0,self.newPassengers):
self.passengerList.append(self.passengerWaitQ.pop())
self.goUp()
The formatting here is completely removed, but there are two conceivable
ways this could be formatted:
already aware. I reformatted tabs to reduce the line wrap so it was 
easier for readers to read it.
# variant 1
for i in range(0,self.newPassengers):
    self.passengerList.append(self.passengerWaitQ.pop())
    self.goUp()

#variant 2
for i in range(0,self.newPassengers):
    self.passengerList.append(self.passengerWaitQ.pop())
self.goUp()
either one of those should still execute self.goUp(). I'm not getting 
anything though no matter where I place the function call.
Someone already mentioned PEP 8 (search the web!). These PEPs could be
called the standards governing Python behaviour, and PEP 8 actually defines
several things concerning the formatting of sourcecode. Apply it unless you
have a good reason not to.


Further, you should run Python with "-t" as argument on the commandline.
This will give you warnings when it encounters inconsistent tab/spaces
usage. This can make a difference.
Yeah I already tried that using 'tabnanny' I think it was called to 
diagnose one function that I decided to create and the -t option gave me 
false information. I determined that I had a tab in front of the 
function name (just like many others) however the actual fix was to put 
in spaces until it lined up with all the other 'def' lines.
Example:

    #variant 3
    for i in range(0,self.newPassengers):
        self.passengerList.append(self.passengerWaitQ.pop())
<TAB>self.goUp()

If your editor is set to four spaces per tab, this will look like variant 2,
with 8 spaces it will look like variant 1. I don't know (and don't care,
since PEP-8 mandates four spaces) which interpretation Python actually
uses.


Lastly, you can simplify your check_queue() function. First, determine the
number of free places inside the elevator. Then, you simply append that
many passengers from the waiting list to the passenger list:

  free = MAX_CAPACITY - len(self.passengers)
  new_passengers = self.passenger_wait_queue[:free]
  self.passenger_wait_queue = self.passenger_wait_queue[free:]
  self.passengers += new_passengers

This uses the fact that list indices are automatically truncated to a valid
range, so requesting the elements 0 to 10 from a 5-element list will only
yield those five elements, not raise an exception. It's up to you though
which version is clearer to you. I would perhaps bail out if "free == 0"
and then also not call go_up() lateron.


so you made other recommendations but didn't address my original 
question unless I missed it somewhere.
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to