new to python - trouble calling a function from another function
Ulrich Eckhardt
eckhardt at satorlaser.com
Thu Aug 5 06:35:50 EDT 2010
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), 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:
# 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()
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.
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.
Cheers and good luck!
Uli
--
Sator Laser GmbH
Geschäftsführer: Thorsten Föcking, Amtsgericht Hamburg HR B62 932
More information about the Python-list
mailing list