python - 制作一副牌,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())”上,程序在处理第一张牌后返回一个错误,当我调试它时,错误只发生在该行。有谁知道怎么了?提前致谢!
解决方案
您正在覆盖该方法。需要对 deal 函数进行以下更改:
def deal(self):
self.card = deck[0]
deck.remove(self.card)
return self.card
推荐阅读
- c# - 如何有条件地映射到抽象
- excel - 如何在 Excel 中将列转置为矩阵?
- android - 应用程序因错误 java.lang.IllegalArgumentException 崩溃:布局:-72 < 0
- java - /AndroidRuntime: 关闭虚拟机
- asp.net-core - 如何自动将自定义 DelegatingHandler 设置为所有 HttpClients?
- eclipse - 如何让 Eclipse 使用文件已经使用的缩进样式?
- reactivemongo - 警告超时连接后,带有 Cluster DocumentDB 的 ReactiveMongo 引发内部服务器错误
- r - R中for循环后数据帧没有区别
- c# - 检查目标上是否存在所有必需的 DLL 及其依赖项
- javascript - 在 mongoDB 中,如何获取使用 insertOne() 使用 async / await 创建的对象的 id?