[英]python: Class error __main__.foo instance at 0x
我正在通過構建一個黑傑克游戲來學習python(具有VBA背景) (是的,我已經使用二十一點問了一堆問題) 。
這是我的代碼:
import random
class DECK():
def load_deck(self):
suite = ('Spades', 'Hearts', 'Diamonds', 'Clubs')
rank = ('2', '3', '4', '5', '6', '7', '8', '9', '10', "Jack", "Queen", "King", "Ace")
full_deck = {}
i = 0
for s in suite:
for r in rank:
full_deck[i] = "%s of %s" % (r, s)
i += 1
return full_deck
def pick_item(self, deck):
card_key = random.choice(deck.keys())
new_card = deck[card_key]
del deck[card_key]
return (deck, new_card)
def missing_card(self, deck):
temp_deck = DECK()
print temp_deck
d1 = DECK()
deck1 = d1.load_deck()
deck1, card1 = d1.pick_item(deck1)
print card1
d1.missing_card(d1)
這是我在終端中得到的(文件名hand_c.py
) :
$ python hand_c.py
Ace of Clubs
<__main__.DECK instance at 0x10bb0d248>
$
為什么一個函數工作pick_item
,而不是另一個missing_card
?
根據第一個答案,我將函數定義更改為:
def missing_card(self, deck):
deckC1 = DECK()
temp_deck = deckC1.load_deck
print temp_deck
但現在我從終端獲得以下內容:
$ python hand_c.py
Jack of Diamonds
<bound method DECK.load_deck of <__main__.DECK instance at 0x10500e248>>
$
我修改了你的程序。 我介紹了一個構造函數,並將您的deck的表示形式更改為列表而不是字典,並將其更改為屬於您在行d1 = DECK()
創建的卡片組的實例變量。 您班上的每個方法現在都可以訪問您的套牌,而不會向世界透露您的套牌的內部表示,您只需要使用一個DECK對象。
import random
class DECK():
def __init__(self):
suite = ('Spades', 'Hearts', 'Diamonds', 'Clubs')
rank = ('2', '3', '4', '5', '6', '7', '8', '9', '10', "Jack", "Queen", "King", "Ace")
self.full_deck = []
for s in suite:
for r in rank:
self.full_deck.append("%s of %s" % (r, s))
def pick_item(self):
card_key = random.randint(0, len(self.full_deck)-1)
new_card = self.full_deck[card_key]
del self.full_deck[card_key]
return new_card
def missing_card(self):
print self.full_deck
d1 = DECK()
card1 = d1.pick_item()
print card1
d1.missing_card()
你應該通過Python教程 。 你的代碼有很多問題。 最基本的是,你正在使用類作為一個包來保存函數,而不是實際上將deck數據作為類實例的一部分。 也就是說,您將套牌作為字典返回,然后將其傳回另一個函數。 最好將deck存儲在屬性(例如self.deck
)中,然后讓其他函數使用它。
無論如何,它不打印字典的原因很簡單。 你做這個:
temp_deck = DECK()
print temp_deck
因此,您創建一個變量temp_deck
並將其設置為等於DECK類的新實例。 然后你打印它。 好吧,當然它不會打印字典。 temp_deck
不是字典。 這是一個DECK對象。 如果你想要使用當前代碼的字典,你需要像使用原始套牌一樣進行temp_deck.load_deck()
,然后打印出結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.