[Tutor] List append method: St Petersburg Game

AG computing.account at googlemail.com
Sat Feb 20 13:43:14 CET 2010


Hi Pythonistas

I am having difficulty with applying the list.append(x) method to 
produce a list that will contain outputs which will become coordinates 
for a later call to Matplotlib.  Perhaps someone here can help me figure 
this out?

The basic program is below:

# St Petersburg Game: v. 2:
# Toss a coin.  If it is heads, win $2, if not keep
#   tossing it until it falls heads.
#   Heads first toss = H = $2
#   Heads third toss = TTH = $8
#   Heads fifth toss = TTTTH = $32

# The game is to win more by not scoring Heads

print """St Petersburg Game: win multiples of $2 the
more you land Tails"""

# Required libraries
import random
import matplotlib.pyplot as plt

#Main function:
def flipCoin():
    coinToss = random.randrange(1, 3)
    return coinToss

# Storage of output
toss_list = []

# Get things going
flipCoin()

# Want to capture the coin lands heads (2)
while flipCoin() != 2:
    toss_list.append("Tails")
    flipCoin()

# Heads lands & show output   
print
print "Heads"

print toss_list

# Interpret results & 'reward'
print "You flipped %d tails before landing Heads" % len(toss_list)

if toss_list == 0:
    print "You won $2"

else:
    toss_list.append( "Tail" )
    print "You won $%d" % 2 ** len(toss_list)



The overall purpose of the game is, for this discussion, irrelevant, but 
some background info will be helpful I think.   The above program will 
give one run only and produces the output I expect.  When I take this to 
the next level of complexity I run into problems.

1. I have tried to make this program run a given number of times, and 
use the for repetition loop to do this, basically:

for i  in range( 0, 10 ):

and then the above program is appropriately indented.

2. Collecting the number of coin "tosses" into a list appends these to a 
list just fine.  However, what this does is adds the numbers together so 
that one ends up like this:

[0, 1, 2, 4, 5, 6, 8, 10, 11, 15]

With a corresponding increase in the values derived from multiplying the 
exponent, thus:

[2, 4, 8, 32, 64, 128, 512, 2048, 4096, 65536]

Both are correct applications of the method, but I am unable to get the 
list to not sum the values up in the first list, these are not 
accumulative values, but discrete.  If I am understanding what is 
currently happening, the values are being accumulated, and I want to 
stop that from happening.

If this isn't clear, please let me know how I can clarify my question to 
help shape the relevance of the responses.

Thanks for any ideas.

AG


More information about the Tutor mailing list