将元素从列表弹出到列表中[Python 3.x]

时间:2018-10-19 00:15:47

标签: python list blackjack

我正在用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)

2 个答案:

答案 0 :(得分:1)

查看显着代码:

for i in range(0, 4):
    self.deck_of_cards.append(self.base)

您没有四个单独的子列表:您有四个对 same 子列表的引用。如果要四个原始副本,则必须制作这些副本。试试这个:

for i in range(0, 4):
    self.deck_of_cards.append(self.base[:])

答案 1 :(得分:1)

for i in range(0, 4):
    self.deck_of_cards.append(self.base

您的列表deck_of_cards包含对列表base的4个引用

您需要将新列表插入您的deck_of_cards卡中,而不是一遍又四遍!

此代码也已损坏,但我让您自己弄清楚原因

self.deck_of_cards[random.randint(0, 3)].pop(random.randint(0, 13))