2013-03-10 73 views
-4

我目前通過這本書中的「如何看待一個計算機科學家」類:我真的不明白他們

現在,我得到這一段代碼,我沒有出書的

class Card: 
    suitList = ["Clubs", "Diamonds", "Hearts", "Spades"] 
    rankList = ["narf", "Ace", "2", "3", "4", "5", "6", "7", 
       "8", "9", "10", "Jack", "Queen", "King"] 

    def __init__(self, suit=0, rank=0): 
     self.suit = suit 
     self.rank = rank 

    def __str__(self): 
     return (self.rankList[self.rank] + " of " + self.suitList[self.suit]) 

    def __cmp__(self, other): 
     #check the suits 
     if self.suit > other.suit: return 1 
     if self.suit < other.suit: return -1 
     #suits are the same... check ranks 
     if self.rank > other.rank: return 1 
     if self.rank < other.rank: return -1 
     #ranks are the same... it's a tie 
     return 0  

class Deck: 
    def __init__(self): 
     self.cards = [] 
     for suit in range(4): 
      for rank in range(1, 14): 
       self.cards.append(Card(suit, rank)) 

    def printDeck(self): 
     for card in self.cards: 
      print card 

    def __str__(self): 
     s = "" 
     for i in range(len(self.cards)): 
      s = s + " "*i +str(self.cards[i]) + "\n" 
     return s 

    def shuffle(self): 
     import random 
     nCards = len(self.cards) 
     for i in range(nCards): 
      j = random.randrange(i, nCards) 
      self.cards[i], self.cards[j] = self.cards[j], self.cards[i] 

    def removeCard(self, card): 
     if card in self.cards: 
      self.cards.remove(card) 
      return 1 
     else: 
      return 0 

    def popCard(self): 
     return self.cards.pop() 

    def isEmpty(self): 
     return (len(self.cards) == 0) 

    def deal(self, hands, nCards=999): 
     nHands = len(hands) 
     for i in range(nCards): 
      if self.isEmpty(): break 
      card = self.popCard() 
      hand = hands[i % nHands] 
      hand.addCard(card) 

class Hand(Deck): 
    def __init__(self, name=""): 
     self.cards = [] 
     self.name = name 

    def addCard(self,card): 
     self.cards.append(card) 

    def __str__(self): 
     s = "Hand " + self.name 
     if self.isEmpty(): 
      return s + "is empty\n" 
     else: 
      return s + " contains\n" + Deck.__str__(self) 

class CardGame: 
    def __init__(self): 
     self.deck = Deck 
     self.deck.shuffle() 

deck = Deck() 
deck.shuffle() 
hand = Hand("frank") 
deck.deal([hand], 5) 
print hand  

現在我明白了自己一下,但我不明白的地方的

self.deck.shuffle() 

來自以及爲什麼它是在__init__功能。我需要的是對課程和一些日常用途的很好的解釋,這些解釋會向我解釋。

+0

它不一定是*「stuped quiestion」*,但它不適用於堆棧溢出;請參閱[常見問題]。 – 2013-03-10 13:23:11

+0

而這應該可能是'self.deck = Deck()'。 – 2013-03-10 13:26:23

回答

2

__init__函數完成名稱所暗示的功能:初始化類的實例。

一個類是一個cookie工具,因爲對象是cookies:它是創建內存中的實例並與其交互的藍圖。

什麼是類和對象的好處?它們將數據和功能封裝在一個單元中。

計算機科學中的每種語言都試圖幫助您完成一件事:管理複雜性。它封裝了細節並將其從用戶隱藏起來,因此他們只需要考慮該類如何映射到他們的真實生活體驗以便有效地使用它。

這裏有另一種想法:不使用類。 Python是面向對象和函數式編程的很好混合體。如果你不懂類,就不用寫Python。繼續學習,直到看到燈光,然後開始將它們融入設計中。