From: geremy condra on
On Thu, Aug 5, 2010 at 8:15 AM, Brandon McCombs <none(a)none.com> wrote:
> Jon Clements wrote:
>>
>> On 5 Aug, 08:25, Brandon McCombs <n...(a)none.com> wrote:
>>>
>>> Hello,
>>>
>>> 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..
>>> It is on the last line of code I pasted in. I can put print statements
>>> before and after the call and I have a print statement in goUp() itself..
>>>  Only the print statements before and after the call are executed. The
>>> one inside goUp() is never executed because goUp() never seems to be
>>> executed. How can that be? I don't get any errors when the script
>>> executes. Surely this isn't some limitation I'm encountering?
>>>
>>> thanks
>>>
>>> sorry about the formatting
>>>
>>> ---------------------------------------------
>>> class Elevator(Process):
>>> def __init__(self,name):
>>>        Process.__init__(self,name=name)
>>>        self.numPassengers = 0
>>>        self.passengerList = []
>>>        self.passengerWaitQ = []
>>>        self.currentFloor = 1
>>>        self.idle = 1
>>>        self.newPassengers = 0
>>> def goUp(self):
>>>        print "here"
>>>        bubbleSort(self.passengerList, len(self.passengerList))
>>>        self.currentFloor += 1
>>>        if len(self.passengerList) > 0:
>>>           for p in self.passengerList:
>>>              if self.currentFloor == p.destination:
>>>                yield (p.destination - self.currenteFloor) * TRAVELTIME,
>>> self
>>>                reactivate(p)
>>>                p.inBuilding()
>>>              else:
>>>                self.goUp()
>>>
>>> def checkQueue(self):
>>>        if (len(self.passengerWaitQ)) > 0 and len(self.passengerList) <
>>> MAXCAPACITY:
>>>        if len(self.passengerWaitQ) < MAXCAPACITY:
>>>            self.newPassengers = len(self.passengerWaitQ)
>>>        else:
>>>             self.newPassengers = MAXCAPACITY - len(self.passengerList)
>>>        for i in range(0,self.newPassengers):
>>>          self.passengerList.append(self.passengerWaitQ.pop())
>>>        self.goUp()
>>
>> Hi Brandon,
>>
>> Nice one at having a good crack at coding before posting!
>>
>> From your posted code, I'm struggling to see what's trying to be
>> taught to you for this class assignment.
>
> not relevant at this point
>
>>
>> As a note it'll be worth reading PEP 8 regarding naming conventions,
>> because it looks very Java-ish to me!
>
> ok but not relevant
>
>>
>> (I might be taking too much a real-world approach in the following,
>> but do with it as you will...)
>>
>> I'm assuming that MAXCAPACITY and TRAVELTIME are globals somewhere.
>> Although what I'm thinking is that different Elevators will have
>> different capacities and different floors they service. An Elevator is
>> *not* going to know its number of passengers (the most it could do is
>> capacity based on weight restrictions) therefore it's not going to
>> know the number of new passengers on each floor either.
>
> okay but not relevant to the problem at hand
>
>>
>> A couple of things that'd be worthwhile:
>>
>> 1) Post the requirements for your assignment - what's it supposed to
>> output etc...
>
> that isn't relevant for determining at the python level why a function
> simply isn't being called
>
>> 2) Go find an elevator, take a pen and pad with you, and stand in it
>> for 30 mins or so, and see how the real thing deals with situations
>> and make notes. ie, does it queue requests, or decide to take the next
>> nearest floor, when does it stop and open etc...?
>>
>> hth
>>
>> Jon.
>>
>
> actually it doesn't help at all since you decided to focus on everything but
> my actual question of why a function call wasn't working but rather question
> the validity of the program itself

This is too bad. You looked like you were all set to be the poster
child for how to ask a good question here, and now you've blown it.

Geremy Condra
From: Michael Torrie on
On 08/05/2010 01:25 AM, Brandon McCombs wrote:
> How can that be? I don't get any errors when the script
> executes. Surely this isn't some limitation I'm encountering?
>
> <snipped code>
> yield (p.destination - self.currenteFloor) * TRAVELTIME, self
^^^^^^^^^
To be succinct, goUp() is apparently a generator function. "yield"
means the function needs to be iterated over; calling it just sets up
the generator and returns a generator object. So yeah your goUp() call
will appear (and actually does) do nothing at all.