2010-09-08 21 views
5

Estoy usando una función en un juego de cartas para verificar el valor de cada carta y ver si es más alta que la última carta jugada.python problems with integer comparison

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 

El problema es que cada vez que aparece una tarjeta de visita, parece que no funciona. Se cree que 13> 2 es cierto, por ejemplo

Edit: Lo siento, quería decir que piensa 13> 2 es falsa

+2

... y ¿por qué crees que 13> 2 debería ser falso? – CanSpice

+1

13 es mayor que 2 –

+3

Sugerencia: Puede reemplazar el último bloque if/elif/else por 'return cardValue> = prevValue' –

Respuesta

12

Creo que lo que quería decir es que está diciendo que "2"> 13, que es cierto. Es necesario cambiar

cardValue=card[0] 

a

cardValue=int(card[0]) 
3

Por qué no usar un diccionario en lugar de una gran cascada de si los bloques/else?

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 

continuación

cardValue = cards[card[0]] 
+0

Gracias chicos, Justin tenías razón, no era un número entero. No sabía que "5" es> "2", etc. – yam

+0

Guau, el enfoque de @Joao es mucho mejor. 'defaultdict' también es una opción si está usando un Python reciente. – nmichaels

2

El uso de un diccionario hará que su código mucho más limpio:

Reemplazar:

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] 

con:

cardMap = { 'J': 11, 'Q':12, 'K': 13, 'A': 14 } 
cardValue = cardMap.get(card[0]) or int(card[0])