From: Brandon McCombs on 5 Aug 2010 11:20 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.
From: Tommy Grav on 5 Aug 2010 11:40 On Aug 5, 2010, at 11:20 AM, Brandon McCombs wrote: > so I missed a few lines, so sue me. The problem is that when you don't post a self contained example there is no proper way to answer your question, since the problem could be outside the part you posted. > already aware. I reformatted tabs to reduce the line wrap so it was easier for readers to read it. Never format code after you copy-paste it to your browser. This may change the behavior of your example making it impossible for people to help you. > either one of those should still execute self.goUp(). I'm not getting anything though no matter where I place the function call. Like someone said before. Try to create the smallest subset of your code that shows this behavior and copy-paste it to the list and people will try to help. Right now there is no clear answer from what you posted. Tommy
From: Neil Cerutti on 5 Aug 2010 11:42 On 2010-08-05, Brandon McCombs <none(a)none.com> wrote: > 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() Does your program call checkQueue? -- Neil Cerutti
From: Daniel Urban on 5 Aug 2010 14:01 > 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? I think the self.goUp() call is executed, the goUp function gets called, returns a generator object (because goUp is a generator function), then you don't use that generator object for anything. Daniel
From: nn on 6 Aug 2010 10:51 On Aug 5, 2:01 pm, Daniel Urban <urban.d...(a)gmail.com> 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. 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? > > I think the self.goUp() call is executed, the goUp function gets > called, returns a generator object (because goUp is a generator > function), then you don't use that generator object for anything. > > Daniel Brandon, this example might help you understand the problem: >>> def g(): print('p1') yield 2 print('p3') >>> g() <generator object g at 0x00F04DC8> >>> b=g() >>> next(b) p1 2 >>> next(b) p3 Traceback (most recent call last): File "<pyshell#24>", line 1, in <module> next(b) StopIteration >>>
First
|
Prev
|
Next
|
Last
Pages: 1 2 3 Prev: ██▓▒░░ *** CREDIT CARD *** ░▒░▒▓██ Next: subprocess escaping POpen?! |