python:类错误 __main__.foo 实例在 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>>
$ 

我修改了你的程序才能工作。我引入了一个构造函数,并将您的套牌的表示形式更改为列表而不是字典,并将其更改为属于您在行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 数据作为类实例的一部分保存。 也就是说,您将甲板作为字典返回,然后将其传递回另一个函数。 最好将套牌存储在属性中(例如,self.deck ),然后让其他函数使用它。

无论如何,它不打印字典的原因很简单。 你这样做:

    temp_deck = DECK()
    print temp_deck

因此,您创建一个变量temp_deck并将其设置为等于类 DECK 的新实例。 然后你打印它。 好吧,当然它不会打印字典。 temp_deck不是字典。 它是一个 DECK 对象。 如果你想用你当前的代码来字典,你需要像对原始甲板一样做temp_deck.load_deck()然后打印结果。

相关内容

  • 没有找到相关文章

最新更新