2010-09-08 30 views
5

Tôi đang sử dụng một chức năng trong trò chơi bài, để kiểm tra giá trị của mỗi thẻ và xem nó có cao hơn thẻ chơi cuối cùng không.vấn đề python với so sánh số nguyên

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 

Vấn đề là, bất cứ khi nào tôi nhận được một facecard, nó dường như không hoạt động. Nó nghĩ rằng 13> 2 là True, ví dụ

chỉnh sửa: xin lỗi, tôi có nghĩa là nó nghĩ rằng 13> 2 là False

+2

... và tại sao bạn tin rằng 13> 2 phải là sai? – CanSpice

+1

13 lớn hơn 2 –

+3

Gợi ý: Bạn có thể thay thế toàn bộ lần cuối nếu/elif/else-block bằng 'return cardValue> = prevValue' –

Trả lời

12

Tôi nghĩ rằng những gì bạn có nghĩa là nó đang nói rằng "2"> 13 là thật. Bạn cần thay đổi

cardValue=card[0] 

để

cardValue=int(card[0]) 
3

Tại sao không sử dụng một cuốn từ điển thay vì một thác lớn nếu/khối khác?

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 

sau đó

cardValue = cards[card[0]] 
+0

Cảm ơn các bạn, Justin bạn đã đúng, nó không phải là một số nguyên. Tôi không biết rằng "5" là> "2" vv – yam

+0

Wow, @ cách tiếp cận của Joao là cách tốt hơn. 'defaultdict' cũng là một tùy chọn nếu bạn đang sử dụng một Python gần đây. – nmichaels

2

Sử dụng một dict sẽ làm cho mã của bạn sạch hơn nhiều:

Thay thế:

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] 

với:

cardMap = { 'J': 11, 'Q':12, 'K': 13, 'A': 14 } 
cardValue = cardMap.get(card[0]) or int(card[0]) 
Các vấn đề liên quan