所以我一直在阅读这本书,并且已经完全从书中重新输入代码到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;而出现语法错误。我认为这种方法没有问题。
答案 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
的行缺少右括号