I assign the contents of one variable to another variable and then append 
to that variable.  The original variable is changed.

    for u in oddone:
        thishand = fourofkind
        print "  append ",u," to ",thishand
        thishand.append(u)
        Hands.append(thishand)

after this, fourofkind is changed.  

What am I doing wrong?

Tom Dean

Complete code:

print "Poker and probability"
print "A card in a poker deck is characterized by a suit (hearts, diamonds,"
print "spades, or clubs) and a value (2, 3, ..., 10, jack, queen, king, 
ace)."
print "The game is played with a full deck, which consists of the Cartesian"
print "product of the set of suits and the set of values:"
print "    Cards = Suits X Values = {s,v | s in Suites and v in Values"

Suits = Set(["Hearts", "Diamonds", "Spades", "Clubs"])
Values = Set(["2", "3", "4", "5", "6", "7", "8", "9", "10",
              "Jack", "Queen", "King", "Ace"])
Cards = cartesian_product([Values, Suits])

Suits.cardinality()
Values.cardinality()
Cards.cardinality()

Cards.random_element()
Set([Cards.random_element(), Cards.random_element()]) 
Hands = Subsets(Cards, 5)
Hands.random_element()

binomial(52,5)
Hands.cardinality()

print "Construct a set of all flushes"
Flushes = cartesian_product([Subsets(Values, 5), Suits])
Flushes.cardinality()
print "The probability of obtaining a flush when drawing a hand at random"
print "is therefore:"
Flushes.cardinality()  / Hands.cardinality()
1000.0 * Flushes.cardinality()  / Hands.cardinality()
def is_flush(hand):
    return len(set(suit for (val, suit) in hand)) == 1

print "Count the number of flushes in",
n = 10000
nflush = 0
for i in range(n):                            # long time
   hand = Hands.random_element()
   if is_flush(hand):
       nflush += 1
print n, "hands: ",nflush                               # random


print "A hand containing four cards of the same value is called a four of a"
print "kind. Construct the set of four of a kind hands (Hint: use 
Arrangements"
print "to choose a pair of distinct values at random, then choose a suit 
for"
print "the first value). Calculate the number of four of a kind hand, list"
print "them, and then determine the probability of obtaining a four of a"
print "kind when drawing a hand at random."
print
print "Example, four Kings"
print "King Hearts",
print " King Clubs",
print " King Spades",
print " King Diamonds",
print " 2 Hearts"
print "King Hearts",
print " King Clubs",
print " King Spades",
print " King Diamonds",
print " 2 Clubs"
print "King Hearts",
print " King Clubs",
print " King Spades",
print " King Diamonds",
print " 2 Spades"
print "King Hearts",
print " King Clubs",
print " King Spades",
print " King Diamonds",
print " 2 Diamonds"

tmp = Arrangements(Values,2).list()

var('Hands, fourof, oddone, thishand,fourofkind')
Hands = []
for s in tmp:
    print "--> ",s
    fourof = cartesian_product([{s[0]},Suits])
    oddone = cartesian_product([{s[1]},Suits])
    fourofkind = []
    for t in fourof:
        fourofkind.append(t)
    print " fourofkind ",fourofkind
    for u in oddone:
        thishand = fourofkind
        print "  append ",u," to ",thishand
        thishand.append(u)
        Hands.append(thishand)

-- 
You received this message because you are subscribed to the Google Groups 
"sage-support" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sage-support.
For more options, visit https://groups.google.com/d/optout.

Reply via email to