M

#### mark

I posted earlier on this but have changed my approach so here is my

latest attempt at solving a problem. I have been working on this for

around 12 hours straight and am still struggling with it.

Write a program that reads the values for a random list of cards from

a file, where each line in the file specifies a single card with the

rank and then the suit separated by a space. The rank should be an

integer in the range of 1 to 13 (Ace:1, King:13), while the suit

should be a lower case character in the set { 'h', 'd', 'c', 's' }.

Sort the card entries into suits ordered by rank, and print out the

ordered list. Hint: sort the list first by rank, and then by suit.

The format of the cards.txt file is;

1 h

1 d

13 c

10 s

and so on for the whole deck.

Can someone help me to get the mycomp function to work.

Any help appreciated

J

def read_cards(filename):

cards = []

for card in open(filename, 'r'):

# strip the trailing newline character

cards.append(card.strip())

return cards

filename = 'cards.txt'

cards = read_cards(filename)

def cards_str2tup(cards):

cards_tup = []

for card in cards:

rank, suit = card.split()

cards_tup.append((suit, int(rank)))

return cards_tup

def cards_tup2str(cards_tup):

cards = []

space = ' '

for tup in cards_tup:

suit, rank = tup

s = str(rank) + space + suit

cards.append(s)

return cards

def mycmp( a, b):

#define the order in which the characters are to be sorted

order = [ 'h', 'd', 'c', 's' ]

# if the characters from each element ARENT the same

if a[1] <> b[1]:

#return the result of comparing the index of each elements

character in the order list

return cmp( order.index( a[1] ), order.index( b[1] ) )

#otherwise

else :

#return the result of comparing each elements number

return cmp( a[0], b[0] )

cards.sort( mycmp )

#print cards