On 9/20/07, Alan Gauld <[EMAIL PROTECTED]> wrote:
> "bhaaluu" <[EMAIL PROTECTED]> wrote
>
> > of it. But the search worked even when stackB
> > and stackC were empty. Interesting.
>
> You never checked stackB or stackC when they were
> empty because it always found something in a prior
> stack first.
>
> > I could see, all three conditionals in popNum(num)
> > were the same, just checking different lists.
>
> They were, and all had the same problem,
> you only hit it on stackA.
>
> If you had started your sequence with 1c instead
> of 1b and then tried 1b you would have hit the problem
> on the second move.
That's right! =) After Michael suggested a fix, I went back
and started the game with the list at stackC filled, and
worked from C to A and the same thing happened.
So Michael's fix worked fine for *that* problem.
Now I'm working on checking if a move is "legal" or not.
Rules: Only one number may be moved at a time.
A larger number may not be put on top of a smaller number.
Tonight, I'm giving a presentation ("Introduction to Python")
to my local Linux Users Group (LUG). I will be telling everyone
about the great Tutors on this fantastic mailing list. This list
is surely one of the best 'features' about Python. =)
>
> Alan G.
>
> _______________________________________________
> Tutor maillist - [email protected]
> http://mail.python.org/mailman/listinfo/tutor
>
Anyway, even though I was somewhat braindead by the end of the day...
Here is the current iteration of the funky funcStacks.py proggie:
It still needs a lot of work, but it is a FUN way to learn stuff.
# funcStacks.py
# passing parameters, returning values, pushing and popping
# 2007-09-19
# b h a a l u u at g m a i l dot c o m
######################################
"""
Pseudocode
1. Get the number to move and the column to move it to: 1b, 2c, etc.
2. Find the column the number is in: A, B, or C
3. Is it the last number (ie. can it be popped?) num == stackA[-1]
4. If the number can be popped, pop it! stackA.pop()
5. Else, number is buried: return an error and try again.
6. Determine if the number can be legally moved to the column requested.
7. If the column is empty, move the number: stackB.append(num)
8. If the column has a number, is it larger? stackB.append(num)
9. Else if number in column is smaller, return an error and try again.
10. Loop.
Test game 1:
1b 2c 1c 3b 1a 2b 1b 4c 1c 2a 1a 3c 1b 2c 1c 5b
1b 2a 1a 3b 1c 2b 1b 4a 1a 2c 1c 3a 1b 2a 1a 5c
1b 2c 1c 3b 1a 2b 1b 4c 1c 2a 1a 3c 1b 2c 1c 0
Test game 2:
1c 2b 1b 3c 1a 2c 1c 4b 1b 2a 1a 3b 1c 2b 1b 5c
1a 2c 1c 3a 1b 2a 1a 4c 1c 2b 1b 3c 1a 2c 1c 0
"""
num = 0
abc = ""
EMPTY = []
stackA = []
stackB = []
stackC = []
def isEmpty(stack):
if stack == EMPTY:
return True
else:
return False
def isLegal(num,abc):
if abc == 'C':
if stackC == EMPTY or num < stackC[-1]:
return True
else:
return False
elif abc == 'B':
if stackB == EMPTY or num < stackB[-1]:
return True
else:
return False
elif abc == 'A':
if stackA == EMPTY or num < stackA[-1]:
return True
else:
return False
def popNum(num):
if len(stackA) > 0 and num == stackA[-1]:
stackA.pop()
elif len(stackB) > 0 and num == stackB[-1]:
stackB.pop()
elif len (stackC) > 0 and num == stackC[-1]:
stackC.pop()
else:
return "Error: number not available."
def pushNum(num,abc):
if abc == 'C' and isLegal(num,abc):
stackC.append(num)
elif abc == 'B' and isLegal(num,abc):
stackB.append(num)
elif abc == 'A' and isLegal(num,abc):
stackA.append(num)
else:
return 'Error'
def moveNum(num,abc):
popNum(num)
pushNum(num,abc)
return stack_status()
def stack_status():
print "A",stackA, isEmpty(stackA)
print "B",stackB, isEmpty(stackB)
print "C",stackC, isEmpty(stackC)
return
# main
print '='*25
stackA=[5,4,3,2,1]
stack_status()
print '='*25
myMove = raw_input('Enter number and stack to move it to: ')
while myMove != '0':
num = int(myMove[0])
abc = str.upper(myMove[1])
print num, abc, isLegal(num,abc)
moveNum(num,abc)
print '='*25
myMove = raw_input('Enter number and stack to move it to: ')
# end funcStacks.py
Happy Programming!
--
bhaaluu at gmail dot com
_______________________________________________
Tutor maillist - [email protected]
http://mail.python.org/mailman/listinfo/tutor