1

这是我的第一篇 StackOverflow 帖子,如果我做错了什么,请告诉我!

我正在尝试用 python 制作纸牌游戏,并被告知最好使用基于类的系统。

在尝试这样做的同时,将所有卡片放入卡片组时,这些类似乎将值复制到代码的 board.cards 部分。

#definitions and imports
import random

class Card:
    suit = ""
    base = ""

class Hand:
    cards = []
    poweri = 0
    powerii = 0

class Stack:
    cards = []

#instantiates classes
deck = Stack()
board = Stack()

player = Hand()
dealer = Hand()

#creates ordered empty deck
def newdeck(obj):
    for x in ["2","3","4","5","6","7","8","9","A","B","C","D","E"]:
        for y in ["C","D","H","S"]:
            card = Card()
            card.base = x
            card.suit = y
            obj.cards.append(card)


#shuffles deck
def shuffle():
    random.shuffle(deck.cards)


newdeck(deck)
#disabled to make debug easier
#shuffle()


#prints entire deck
print("\nDeck")
for i in range(len(deck.cards)):
    print(deck.cards[i].base, deck.cards[i].suit)
print(len(deck.cards))

#prints entire board
print("\nBoard")
for i in range(len(board.cards)):
    print(board.cards[i].base, board.cards[i].suit)

程序返回这个:

Deck
2 C
2 D
2 H
2 S
3 C
3 D
3 H
3 S
4 C
4 D
4 H
4 S
5 C
5 D
5 H
5 S
6 C
6 D
6 H
6 S
7 C
7 D
7 H
7 S
8 C
8 D
8 H
8 S
9 C
9 D
9 H
9 S
A C
A D
A H
A S
B C
B D
B H
B S
C C
C D
C H
C S
D C
D D
D H
D S
E C
E D
E H
E S
52

Board
2 C
2 D
2 H
2 S
3 C
3 D
3 H
3 S
4 C
4 D
4 H
4 S
5 C
5 D
5 H
5 S
6 C
6 D
6 H
6 S
7 C
7 D
7 H
7 S
8 C
8 D
8 H
8 S
9 C
9 D
9 H
9 S
A C
A D
A H
A S
B C
B D
B H
B S
C C
C D
C H
C S
D C
D D
D H
D S
E C
E D
E H
E S

Process returned 0 (0x0)        execution time : 0.314 s
Press any key to continue . . .

董事会应该是空的???

问候,亚历克斯

4

1 回答 1

1

Stack.cards是一个可变的类属性。这意味着,所有类实例都将引用具有相同数据的相同对象。

您可能希望每个对象都有自己的数据。cards要更改它,请在方法内实例化__init__()

class Stack:
    def __init__(self):
        self.cards = []
于 2018-11-11T18:03:20.507 回答