将列表中的元素弹出到列表中 [Python 3.x]
Pop element from a list into a list [Python 3.x]
我正在 Python 制作 BlackJack 游戏,但它不遵守我的索引。它从我的所有子列表中弹出一个随机元素,而不仅仅是一个列表。
import random
class Deck(object):
def __init__(self):
self.deck_of_cards = []
self.base = []
for i in range(0, 13):
troca = {
0: 'A',
10: 'J',
11: 'Q',
12: 'K'
}
if not i in (0, 10, 11, 12):
self.base.append(i + 1)
else :
self.base.append(troca.get(i))
for i in range(0, 4):
self.deck_of_cards.append(self.base)
def random_card(self, quantidade):
print(self.deck_of_cards)
for i in range(0, quantidade):
self.deck_of_cards[random.randint(0, 3)].pop(random.randint(0, 13))
print(self.deck_of_cards)
bar = Deck()
bar.random_card(2)
看显着代码:
for i in range(0, 4):
self.deck_of_cards.append(self.base)
您没有四个单独的子列表:您有四个对 相同 子列表的引用。如果您想要原件的四个副本,则必须制作这些副本。试试这个:
for i in range(0, 4):
self.deck_of_cards.append(self.base[:])
for i in range(0, 4):
self.deck_of_cards.append(self.base
您的列表 deck_of_cards
包含 4 个对您列表的引用 base
您需要在 deck_of_cards 中插入新列表,而不是同一个列表 4 次!
此外,此代码已损坏,但我会让您自己找出原因
self.deck_of_cards[random.randint(0, 3)].pop(random.randint(0, 13))
我正在 Python 制作 BlackJack 游戏,但它不遵守我的索引。它从我的所有子列表中弹出一个随机元素,而不仅仅是一个列表。
import random
class Deck(object):
def __init__(self):
self.deck_of_cards = []
self.base = []
for i in range(0, 13):
troca = {
0: 'A',
10: 'J',
11: 'Q',
12: 'K'
}
if not i in (0, 10, 11, 12):
self.base.append(i + 1)
else :
self.base.append(troca.get(i))
for i in range(0, 4):
self.deck_of_cards.append(self.base)
def random_card(self, quantidade):
print(self.deck_of_cards)
for i in range(0, quantidade):
self.deck_of_cards[random.randint(0, 3)].pop(random.randint(0, 13))
print(self.deck_of_cards)
bar = Deck()
bar.random_card(2)
看显着代码:
for i in range(0, 4):
self.deck_of_cards.append(self.base)
您没有四个单独的子列表:您有四个对 相同 子列表的引用。如果您想要原件的四个副本,则必须制作这些副本。试试这个:
for i in range(0, 4):
self.deck_of_cards.append(self.base[:])
for i in range(0, 4):
self.deck_of_cards.append(self.base
您的列表 deck_of_cards
包含 4 个对您列表的引用 base
您需要在 deck_of_cards 中插入新列表,而不是同一个列表 4 次!
此外,此代码已损坏,但我会让您自己找出原因
self.deck_of_cards[random.randint(0, 3)].pop(random.randint(0, 13))