Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to find the max value in a string of poker ranks

The poker ranks go in order like this. '23456789TJQKA' where T is ten and then jack queen king and Ace with Ace being the highest card. A string is inputed and is always inputed as a 5 character string.

If the user inputs lets say string = '43TKQ' How can I find the highest card in this string without any advanced methods only if statements, while and for loops. I tried max(string) but it returns ten and not King

hand = '28TKQ'

print(max(hand)) #This outputs T (it should output K)

'768TA' should print A

'2TJ67' should print J

like image 225
Peri Avatar asked Mar 04 '23 07:03

Peri


1 Answers

You need to specify to Order logic witch is 23456789TJQKA:

order = '23456789TJQKA'

print(max('28TKQ', key=lambda e: order.index(e)))   # K
print(max('A43TKQ', key=lambda e: order.index(e)))  # A

Another pythonic code:

cards = '23456789TJQKA'

print(max('28TKQ', key=cards.index))   # K
print(max('A43TKQ', key=cards.index))    # A

EDITS

To answer your comment:

when you search for max in list element you will compare items, by default str are compared by Unicode code point, so when you compare element of list 28TKQ 'T' have the biggest value 84, ord('T') > ord('K') and this why max returned T not K, but you don't what this logic of compression you need to tell max that you want a different logic in comparing.

this why we use the key parameter that we pass a method and the item are ordered based on the return value of that method.

Edits:

To clear thing for you more

# 2 priority is 0, ....., A priority is 12
card_priority = '23456789TJQKA'


def get_card_priority(card):
    """ return the priority of card, it's index in card_priority list"""
    return card_priority.index(card)


# compare get_card_priority('2') = 0, get_card_priority('8') = 6,get_card_priority('T')=8.......get_card_priority('Q') = 10
# The element with the highest value is returned witch is 'K' = 11
print(max('28TKQ', key=get_card_priority))  # K because get_card_priority('K') return the biggest value
like image 137
Charif DZ Avatar answered Mar 17 '23 06:03

Charif DZ