如何解决嵌套 Dealer::Card::Deck 类 Deck.cards 在 build 方法期间获取列表,但在 shuffle 方法期间列表消失
我稍微简化了代码,因为它是更大的烧瓶项目的一部分。但问题依然存在:
import random
class Dealer:
def __init__(self):
self.deck = self.Deck()
class Deck:
def __init__(self):
self.cards = []
self.cards = self.build()
def build(self):
for suit in ['Spades','Diamonds','Hearts','Clubs']:
if suit == 'Spades':
suit_url='S.png'
elif suit == 'Diamonds':
suit_url="D.png"
elif suit == "Hearts":
suit_url="H.png"
elif suit == "Clubs":
suit_url="C.png"
for val in [ 2,3,4,5,6,7,8,9,10,11,12,13,14]:
img_url = (str(val) + suit_url)
self.cards.append(self.Card(val,suit,img_url))
def shuffle(self):
for i in range(len(self.cards)-1,-1):
rand_num = random.randint(0,i)
self.cards[i],self.cards[rand_num] = self.cards[rand_num],self.cards[i]
class Card:
def __init__(self,value,img):
self.value = value
self.suit = suit
self.img = img
dealer = Dealer()
deck = dealer.Deck()
deck.shuffle()
cards list 在 Deck build 方法中显示了一个有效的 card 对象列表,但是当它进入 shuffle 方法时,cards 在调试器中没有显示?
解决方法
怎么了:
'self.build()' 方法不返回任何东西(VOID),它只是更新了 'self.cards'。但是 'self.cards' 与 'self.build()' 的输出一致。 但是输出是none,当你想使用'deck.shuffle()'时,你试图得到none的长度。
如何修复:
只需调用 build 方法即可填充卡片。
import random
class Dealer:
def __init__(self):
self.deck = self.Deck()
class Deck:
def __init__(self):
self.cards = []
# Just call build method to fill the cards
self.build()
def build(self):
for suit in ['Spades','Diamonds','Hearts','Clubs']:
if suit == 'Spades':
suit_url='S.png'
elif suit == 'Diamonds':
suit_url="D.png"
elif suit == "Hearts":
suit_url="H.png"
elif suit == "Clubs":
suit_url="C.png"
for val in [ 2,3,4,5,6,7,8,9,10,11,12,13,14]:
img_url = (str(val) + suit_url)
self.cards.append(self.Card(val,suit,img_url))
def shuffle(self):
for i in range(len(self.cards)-1,-1):
rand_num = random.randint(0,i)
self.cards[i],self.cards[rand_num] = self.cards[rand_num],self.cards[i]
class Card:
def __init__(self,value,img):
self.value = value
self.suit = suit
self.img = img
dealer = Dealer()
deck = dealer.Deck()
deck.shuffle()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。