Python绝对初学者第3版第9章示例3似乎没有用

时间:2014-12-03 20:33:12

标签: python-3.x

所以我一直在阅读这本书,并且已经完全从书中重新输入代码到Notepad ++中,然后在命令行中运行。有几件事让我烦恼。对于其中一个代码似乎不起作用,我正在复制它,就像书中所说的那样。

# example 3
# card game 2.0
# Aims: Learn about: Inheritance, Base Class, Derived Class

class Card(object):

    """ A playing card. """
    RANKS = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]
    SUITS = ["c", "d", "h", "s"]

    def __init__(self, rank, suit):
        self.rank = rank
        self.suit = suit
    def __str__(self):
        rep = self.rank + self.suit
        return rep

class Hand(object):

    """ A hand of playing cards. """

    def __init__(self):
        self.cards = []

    def __str__(self): 
        if self.cards:
            rep = ""
            for card in self.cards:
                rep += str(card) + "\t"
        else:
            rep = "<empty>"
        return rep

    def clear(self): 
        self.cards = []

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

    def give(self, card, other_hand):
        self.cards.remove(card)
        other_hand.add(card)

class Deck(Hand):
    """ A Deck of Playing Cards"""
    def populate():
        for suit in Card.SUITS: 
            for rank in Card.RANKS:
                self.add(Card(rank, suit)

    def shuffle(self):
        import random
        random.shuffle(self.cards)

    def deal(self, hands, per_hand = 1):
        for rounds in range(per_hand):
            for hand in hands:
                if self.cards:
                    top_card = self.cards[0]
                    self.give(top_card, hand)
                else:
                    print("Can't continue deal. Out of cards!")

# main
deck1 = Deck()

print("Created a new deck.")
print("Deck:")
print(deck1)

deck1.populate

print("\nPopulated the deck.")
print("Deck:")
print(deck1)

我创建了3个班级卡,手和甲板。在程序的主要部分,当我尝试调用方法时,填充&#39;该方法应该调用并运行Card类中的类atrributes列表,并在我打印deck1时为我提供可能的卡列表,但是我总是回过头来为什么会这样呢?

我的第二个问题是,有时候我似乎会因为#sh; shuffle(self)&#39;而出现语法错误。我认为这种方法没有问题。

2 个答案:

答案 0 :(得分:0)

deck1.populate是一个函数,因此您需要以这种方式调用它: deck1.populate()

答案 1 :(得分:0)

你的第一个问题

  

在程序的主要部分,当我尝试调用方法'populate'时,该方法应该调用并运行Card类中的类atrributes列表,并在我打印deck1时向我提供可能的卡列表,但是我总是回来为什么会这样呢?

您不是致电填充,deck1.populate不会调用它,而是使用deck1.populate()

你还没有正确定义它,它应该采用一个参数:

# ...
def populate(self):
    # ...

至于你的第二个问题

  

我的第二个问题是,有时我似乎得到'def shuffle(self)'的语法错误,我发现这个方法没有问题。

你有

            # ...
            self.add(Card(rank, suit) # <-- Syntax error

def shuffle(self):

self.add的行缺少右括号