2013-06-30 72 views
0

我剛剛開始學習上週的程序,並且在編寫二十一點程序時遇到了麻煩。我可以生成一個甲板列表,但我似乎無法想到根據二十一點規則分配卡片值的方法。像面孔牌等於10,ace可以是1或1,1,其餘的與面值相等。我知道我的代碼對你們來說可能是一團糟,但我寧願繼續這樣做,犯錯誤和學習,而不是複製和粘貼職業工作。所以,你可以給我一些技巧來分配卡的價值,謝謝。Python中的二十一點程序

這裏是我迄今爲止

import random 
import time 

deck = [] 
hand = [] 
dealer_hand = [] 
def deck_shuffle(): 
    for suit in ["Clubs", "Dimonds", "Hearts", "Spades"]: 
     for face in ["Jack", "Queen", "King", "Ace"]: 
      deck.append([face, suit]) 
     for num in range(2, 11): 
      deck.append([num, suit]) 
    random.shuffle(deck) 
    return deck 



def deal_cards(): 
    for x in range(0,2): 
     deal_card = deck.pop(0) 
     hand.append(deal_card) 
     deal_card = deck.pop(0) 
     dealer_hand.append(deal_card) 



deck_shuffle() 
deal_cards() 
print (deck) 



print("Dealers hand is", dealer_hand) 
print("Your hand is", hand) 
+2

那麼,我的第一個提示會是使用標點符號。 (花更少的時間重複你是一個新手,如果只是混淆了這個問題,並且如果它有缺陷,他們會被指出來讓你解決問題。) – millimoose

+1

你的問題是什麼? –

+0

爲卡片賦值而不改變其他所有內容的最佳方式 – Mark

回答

1

您可以使用dict這裏:

例子:

>>> card_vals = {"Jack" : 5, "Queen": 15, "King": 20, "Ace":10} 
>>> card_vals.update({ x:x for x in range(2,11)}) 
>>> card_vals["Jack"] 
5 
>>> card_vals["Jack"] 
5 
>>> card_vals[2] 
2 
>>> card_vals[5] 
5 
+0

完美並且可以在card_vals = {「2」:2}中工作。 – Mark

+0

@Mark您也可以同樣存儲數字。 –

+0

將根據我的方法分配西裝的工作? – Mark

1

我會做這樣的事情

class Card: 
    def __init__(self,suit,value): 
     self.suit = suit 
     self.value = value 
    def __str__(self): 
     return "A,2,3,4,5,6,7,8,9,10,J,Q,K".split(",")[self.value]+" of "+["Clubs", "Dimonds", "Hearts", "Spades"][self.suit] 
    def getValue(self): 
      if 0 <self.value < 10: return self.value + 1 
      if self.value == 0: return 11 
      return 10 

class Deck: 
     def __init__(self): 
      self.cards = [Card(i,j) for i in range(4) for j in range(13)] 
      self.cards.shuffle() 

d = Deck() 
print d.cards[0] 
print d.cards[0].getValue()   
+0

是的,我知道我會得到類和其他東西的答案到目前爲止更有效的代碼,但我沒有經驗有了課程,我試圖堅持我所知道的而不是讓自己感到困惑,謝謝你的回答 – Mark