簡體   English   中英

python:0x的類錯誤__main__.foo實例

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM