2010-09-08 42 views
5

我在卡片遊戲中使用函數來檢查每張卡片的值,並查看它是否高於最後一張玩過的卡片。整數比較的python問題

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 

問題是,無論什麼時候我拿到一張facecard,它似乎都不起作用。 它認爲13> 2是真實的,例如

編輯:對不起,我的意思是它認爲13> 2是假

+2

......你爲什麼認爲13> 2應該是假的? – CanSpice 2010-09-08 21:12:25

+1

13大於2 – 2010-09-08 21:12:29

+3

提示:您可以用'return cardValue> = prevValue'替換整個最後一個if/elif/else-block。 – 2010-09-08 21:16:26

回答

12

我想你的意思是,它是說,「2」> 13是真正。您需要更改

cardValue=card[0] 

cardValue=int(card[0]) 
3

爲什麼不使用字典而不是的if/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 

然後

cardValue = cards[card[0]] 
+0

謝謝你們,賈斯汀你是對的,它不是一個整數。我不知道「5」是>「2」等。 – yam 2010-09-08 21:28:39

+0

哇,@若奧的方法更好。如果您使用最近的Python,'defaultdict'也是一個選項。 – nmichaels 2010-09-08 21:34:18

2

使用字典將會使你的代碼更清潔:

替換:

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] 

有:

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