【问题标题】:Adding elements from a random list to another list [duplicate]将随机列表中的元素添加到另一个列表[重复]
【发布时间】:2022-01-24 17:13:54
【问题描述】:

我正在尝试创建一个简单而愚蠢的纸牌游戏。为此,我创建了 4 个不同的类:

卡片:

class card():

    def __init__(self, name, power) -> None:
        self.name = name
        self.power = power

    def __str__(self):
        return f'Card: {self.name}\nPower: {self.power}\n'

甲板:

class deck():
    cards = []
    def __init__(self) -> None:
        pass

    def add_card_to_deck(self,card):
        self.cards.append(card)

    def __str__(self) -> str:
        s = 'Cards:'
        for c in self.cards:
            s+=str(c)

        return s

玩家:

from deck import *

class player():
    
    def __init__(self, name) -> None:
        self.name = name
        self.deck = deck()


    def __str__(self) -> str:
        return f'Player:{self.name}\n'

    def print_cards(self):
        st = f'{self.name} cards:\n'
        for c in self.deck.cards:
            st += str(c)
        
        return st

游戏逻辑:

from card import *
from deck import *
from player import *
import random



card_one = card("Ghost", 700)
card_two = card('Wizard of Oz', 950)
card_three = card('Hunter', 1000)
card_four = card('Jason', 600)
card_five = card('Creepy clown', 700)
card_six = card('dwarf', 690)

cards_list = [card_five, card_four, card_one, card_three, card_two, card_six]


def start_game():
    # gets the names of the two players
    first_player_name= input('First player\'s name: ')
    first_player = player(first_player_name)
    second_player_name = input('Second player\'s name: ')
    second_player = player(second_player_name)
    # gives random cards to the players
    give_cards_to_decks(first_player, second_player)
    #choosing a card
    # choose_card(player_on=second_player)
    


def give_cards_to_decks(player_one, player_two):

    
    random.shuffle(cards_list)
    
    for index in range(6):
        if index<3:
            print(' -- adding to player one --')
            player_one.deck.add_card_to_deck(cards_list[index])
            print(cards_list[index])
        else:
            print(' -- adding to player two --')
            player_two.deck.add_card_to_deck(cards_list[index])
            print(cards_list[index])

    print('player one deck cards')
    print(player_one.deck)
    print('player two deck cards')
    print(player_two.deck)



def choose_card(player_on):
    print(' ----- testing -----')
    print(player_on.print_cards())

def win_play():
    pass

当我运行 give_cards_to_decks() 函数时,不是只向每个玩家的牌组添加三个元素,而是添加所有 6 个元素。

First player's name: m
Second player's name: j
 -- adding to player one --
Card: Wizard of Oz
Power: 950

 -- adding to player one --
Card: dwarf
Power: 690

 -- adding to player one --
Card: Jason
Power: 600

 -- adding to player two --
Card: Creepy clown
Power: 700

 -- adding to player two --
Card: Ghost
Power: 700

 -- adding to player two --
Card: Hunter
Power: 1000

player one deck cards
Cards:Card: Wizard of Oz
Power: 950
Card: dwarf
Power: 690
Card: Jason
Power: 600
Card: Creepy clown
Power: 700
Card: Ghost
Power: 700
Card: Hunter
Power: 1000

player two deck cards
Cards:Card: Wizard of Oz
Power: 950
Card: dwarf
Power: 690
Card: Jason
Power: 600
Card: Creepy clown
Power: 700
Card: Ghost
Power: 700
Card: Hunter
Power: 1000

有人知道导致这种结果的原因吗?当我打印每张添加到套牌中的卡片时,它会单独打印卡片,但结果不是我想要达到的。

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    cardsDeck 类的类级变量。此状态在 Deck 的 所有 个实例之间共享。因此,当您追加到两个玩家的牌组时,您将追加到同一个列表中。

    甲板类应如下所示。请注意,cards 现在是实例级别,而不是类级别:

    class deck():
        def __init__(self) -> None:
            self.cards = []
    
        def add_card_to_deck(self,card):
            self.cards.append(card)
    
        def __str__(self) -> str:
            s = 'Cards:'
            for c in self.cards:
                s+=str(c)
    
            return s
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-20
      • 2022-12-07
      • 1970-01-01
      • 2013-06-08
      • 2023-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多