2010-09-08 8 views
5

Sto usando una funzione in un gioco di carte, per controllare il valore di ogni carta, e vedere se è superiore all'ultima carta giocata.problemi di pitone con confronto intero

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 

Il problema è che, ogni volta che ricevo un facecard, lo doesnt sembra funzionare. Pensa 13> 2 è vero, per esempio

edit: scusa, volevo dire che pensa 13> 2 è falso

+2

... e perché credi che 13> 2 dovrebbe essere Falso? – CanSpice

+1

13 è maggiore di 2 –

+3

Suggerimento: puoi sostituire l'ultimo se/elif/else-block con 'return cardValue> = prevValue' –

risposta

12

Penso che quello che volevi dire è che si sta dicendo che "2"> 13, che è vero. È necessario modificare

cardValue=card[0] 

a

cardValue=int(card[0]) 
3

Perché non utilizzare un dizionario, invece di una grande cascata di if/else blocchi?

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 

poi

cardValue = cards[card[0]] 
+0

Grazie ragazzi, Justin avevi ragione non era un numero intero. Non sapevo che "5" è> "2" ecc. – yam

+0

Wow, l'approccio di @ Joao è decisamente migliore. 'defaultdict' è anche un'opzione se stai usando un Python recente. – nmichaels

2

Utilizzando un dict renderà il vostro codice molto più pulito:

Sostituire:

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])