首页 > 解决方案 > 制作一副牌,1 次迭代后不可调用

问题描述

我是编程新手,尤其是 Python,所以我对一般的类并不熟悉,但我环顾四周,找不到任何有用的东西。我定义了 Card 和 Deck 类,在 Deck 类中,我有一个发牌函数,它发牌。当代码第一次运行时,每当我尝试发另一张牌时,程序都会返回“TypeError:'Card object is not callable”。这是代码:

import random
deck = []


class Card:
    def __init__(self, suit, value):
        self.suit = suit
        self.value = value

    def __repr__(self):
        return "The {} of {}".format(self.value, self.suit)


class Deck:
    def __init__(self):
        suits = ['Hearts', 'Diamonds', 'Clubs', 'Spades']
        values = ['Ace', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'Jack', 'Queen', 'King']
        for i in suits:
            for j in values:
                deck.append(Card(i, j))

    def __repr__(self):
        return "There are {} cards left in the deck".format(len(deck))

    def shuffle(self):
        if len(deck) == 52:
            random.shuffle(deck)
        else:
            Deck()
            deck.shuffle()

    def deal(self):
        self.deal = deck[0]
        deck.remove(self.deal)
        return self.deal


d1 = Deck()
d1.shuffle()
print(d1.deal())
print(d1.deal())
print(d1)

在第二个“print(d1.deal())”上,程序在处理第一张牌后返回一个错误,当我调试它时,错误只发生在该行。有谁知道怎么了?提前致谢!

标签: pythonpython-3.x

解决方案


您正在覆盖该方法。需要对 deal 函数进行以下更改:

def deal(self):
    self.card = deck[0]
    deck.remove(self.card)
    return self.card

推荐阅读