1 Sep 2003 04:27
WAIDW - copying list within a recursive function
Ole Jensen <learning.python <at> dbmail.dk>
2003-09-01 02:27:04 GMT
2003-09-01 02:27:04 GMT
WAIDW == (W)hat (A)m (I) (D)oing
(W)rong
(Question put short:
Why does this function return; None?
###
def shuffle(i=24, deck=[]):
a = [ace, 2, 3, 4, 5, 6, 7, 8,
9, 10, jack, queen, king]
deck.append(a[:])
print deck
if i > 0:
deck.append(a[:])
print deck
if i > 0:
print "if i
> 0"
shuffle(i-1, deck)
shuffle(i-1, deck)
elif i == 0:
print "elif i
== 0"
print deck
print deck
return deck
else: print "failsafe"
else: print "failsafe"
###
Read below for more detailed describtion of my wrong doings ;)
)
I'm trying to create a list representing
a stack of cards containing six card decks, I do not really care much of
the about colour so my stack would come to look like this:
###
stack = [[ace, 2, 3,....., king], [ace, 2, 3,.....,
king],........,[ace, 2, 3,...., king]
###
The above should symbolise a list (stack) with 24
lists of different colours (allthough the colours e.g. clubs or hearts, are not
shown as such).
Now call me lazy but I would prefer not to type all
those those identical lists manually (both easthatically and labour wise),
so I saw this as a good time to try to play around with recursive
functions (easily done in a forloop with two lines, but now I'm stubborn).
The best bit of code I have come up with untill now
is this:
###
def shuffle(i=24, deck=[]):
a = [ace, 2, 3, 4, 5, 6, 7, 8,
9, 10, jack, queen, king]
deck.append(a[:])
print deck
if i > 0:
deck.append(a[:])
print deck
if i > 0:
print "if i
> 0"
shuffle(i-1, deck)
shuffle(i-1, deck)
elif i == 0:
print "elif i
== 0"
print deck
print deck
return deck
else: print "failsafe"
else: print "failsafe"
###
(The print statements are for testing)
Which of course doesn't work (Otherwise I
wouldn't be writing this mail)!
The the output ends up like this:
[[11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10,
10]]
if i > 0
[[11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10], [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]]
if i > 0
[[11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10], [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]]
if i > 0
etc. etc.
These few lines above shows me that everything
shaping about nicely, the list is looking the way it's supposed to.
In the end of the output i finally equals 0, and
the list is printed a final time looking complete (len(deck) == 24). When the
next command in the sourcecode reads: return deck.
###
elif i == 0:
print "elif i ==
0"
print deck
print deck
return deck
###
###
My question is this:
If the list "deck" is as it is supposed to (and it looks to be), then why
does the function return; None?
In advance thanks for any enlightment.
_______________________________________________ Tutor maillist - Tutor <at> python.org http://mail.python.org/mailman/listinfo/tutor
RSS Feed