问题描述
我正在尝试用 python 编写一个基本的二十一点游戏。但是当我创建一个类对象时 例如 Card.card_1 或 Deck.deck_1 它们是 Class 对象,但是当我尝试将它们转移到另一个类时,例如 52 Card Objects to a Deck Object,它们似乎恢复到列表,从而否定了我的实例方法。有人能告诉我我错过了什么吗?
Card_Class.py
value = ["A","2","3","4","5","6","7","8","9","10","J","Q","K"]
suit = ["Hearts","Diamonds","Clubs","Spades"]
class Card():
def __init__(self,suit,value):
self.suit = suit
self.value = value
self.score = 0
Deck_Class.py
import Card_Class
import random
class Deck():
def __init__(self):
self.deck = []
def populate_deck(self):
for s in Card_Class.suit :
for v in Card_Class.value:
self.deck.append([s,v])
return self.deck
def get_card(self):
return self.deck[0]
get_card 方法返回一个列表类型,尽管我的 self.deck = [] ,所以它从一个deck 对象变成了一个列表对象?
解决方法
我在您的 populate_deck
方法中看到的只是添加到甲板列表的附加列表:
self.deck.append([s,v])
该行清楚地附加了一个包含当前花色和价值的列表。类型没有变化,唯一添加的就是一些列表。所以你的 self.deck
看起来像
[["Hearts","A"],["Hearts","2"],"3"]]
等
您可能打算使用其构造函数添加一个新的 Card 对象。
self.deck.append(Card_Class.Card(s,v))
,
当您将花色和价值存储在甲板上时,您应该将卡片添加到您的甲板上。因此,使用 Card() 调用 Card 构造函数并使用正确的 s 和 v 值如下:
def populate_deck(self):
for s in Card_Class.suit :
for v in Card_Class.value:
self.deck.append(Card_Class.Card(s,v))
return self.deck