Reputation: 51
I'm using a function in a card game, to check the value of each card, and see if it is higher than the last card played.
def Valid(card):
prev=pile[len(pile)-1]
cardValue=0
prevValue=0
if card[0]=="J":
cardValue=11
elif card[0]=="Q":
cardValue=12
elif card[0]=="K":
cardValue=13
elif card[0]=="A":
cardValue=14
else:
cardValue=card[0]
prevValue=prev[0]
if cardValue>prevValue:
return True
elif cardValue==prevValue:
return True
else:
return False
The problem is, whenever I get a facecard, it doesnt seem to work. It thinks 13>2 is True, for example
edit: sorry, I meant it thinks 13>2 is False
Upvotes: 5
Views: 165
Reputation: 50943
Why not use a dictionary instead of a big cascade of if/else blocks?
cards = dict(zip((str(x) for x in range(1, 11)), range(1, 11)))
cards['J'] = 11
cards['Q'] = 12
cards['K'] = 13
cards['A'] = 14
then
cardValue = cards[card[0]]
Upvotes: 3
Reputation: 5619
Using a dict will make your code much cleaner:
Replace:
if card[0]=="J":
cardValue=11
elif card[0]=="Q":
cardValue=12
elif card[0]=="K":
cardValue=13
elif card[0]=="A":
cardValue=14
else:
cardValue=card[0]
with:
cardMap = { 'J': 11, 'Q':12, 'K': 13, 'A': 14 }
cardValue = cardMap.get(card[0]) or int(card[0])
Upvotes: 2
Reputation: 47072
I think what you meant is that it is saying that "2" > 13 which is true. You need to change
cardValue=card[0]
to
cardValue=int(card[0])
Upvotes: 11