【问题标题】:Pop element from a list into a list [Python 3.x]将列表中的元素弹出到列表中 [Python 3.x]
【发布时间】:2019-03-23 20:47:32
【问题描述】:

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

【问题讨论】:

  • 欢迎来到 Stack Overflow。不幸的是,您的代码的缩进被破坏了,这使得 Python 无效。请edit你的问题,准确粘贴你的代码,然后选择它并单击{}或按Ctrl+K缩进它。 Stack Overflow 会将其视为代码块。在您编辑时,请查看您是否可以澄清您的问题。 How to Ask 有一些有效提问的好技巧。
  • 注意:如果从列表中弹出一个元素,它将丢失一个元素。此代码 random.randint(0, 13) 可能会失败,因为它可能会在该索引不再存在时尝试访问 13

标签: python list blackjack


【解决方案1】:

看显着代码:

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[:])

【讨论】:

  • 嗯,它成功了,非常感谢你,但是,为什么它有效? :p
  • 同样,您的原始代码只是复制了对列表的引用。更新强制解释器制作列表的整个列表切片,从而生成一个新对象。如果您需要更多示例和详细信息,请在线搜索列表参考与副本。
  • [:] 表示创建一个新的子列表,从第一个元素到最后一个元素。它就像 [0 : len(base)]
【解决方案2】:
for i in range(0, 4):
    self.deck_of_cards.append(self.base

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

您需要将新列表插入到您的卡片组中,而不是相同的 4 次!

此外,此代码已损坏,但我会让您自己找出原因

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

【讨论】:

  • 我认为我需要动态地制作范围
  • 宾果游戏!如果deck_of_cards[x] 为空,您需要再试一次
猜你喜欢
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 2017-12-18
  • 1970-01-01
  • 2016-09-17
  • 2015-04-09
  • 1970-01-01
相关资源
最近更新 更多