我建立了可以洗牌的牌组。我构建了播放器模块,并让发牌人类继承了套牌。 (因为发牌者是洗牌的人,而不是洗牌本身的牌组),我试图将两者都导入到主卡中并让发牌者洗牌。不,事情开始破裂。
过了一会儿,我开始进行反复试验,添加random()和self
以及您能想到的任何东西。没事。此时,主要文件已被删除,因为我不仅仅了解youtube或其他内容。
import random as rd
class Card:
card_rank = [str(n) for n in range(2, 10)]
card_rank.extend(['Ten', 'Jack', 'Queen', 'King', 'Ace'])
card_suit = ['Spades', 'Clubs', 'Diamonds', 'Hearts']
def __init__(self, rank, suit):
assert 2 <= rank <= 14 and 1 <= suit <= 4
self.rank = rank
self.suit = suit
def __str__(self):
return '{} of {}'.format(Card.card_rank[self.rank - 2], Card.card_suit[self.suit - 1])
class Deck:
def __init__(self):
self.cards = [Card(rank, suit) for rank in range(2, 14 + 1) for suit in range(1, 4 + 1)]
def is_empty(self):
return not self.cards
def pick(self):
rd.shuffle(self.cards)
return self.cards.pop()
import CardDeck class Player: def __init__(self): self.hand = [] class Human(Player): def __init__(self): super(Human, self).__init__() self.name = input() class Dealer(Player, CardDeck.Deck): def __init__(self): super(Dealer, self).__init__() def deck_shuffle(self): while not CardDeck.Deck.is_empty: print(CardDeck.Deck.pick)
> import CardDeck as cd
> import Players as pl
>
>
> dealer = pl.Dealer
>
>
> dealer.deck_shuffle
我希望发牌人洗牌。我正在寻找通过打印出甲板是否可行。我计划做更多,但就目前而言,我仍然很困。 (对格式感到抱歉,此网站使我感到困惑)
答案 0 :(得分:2)
卡片组是一个列表,因此您可以导入random
并在卡片组实例上使用random.shuffle(deck)
,您可以创建全局文件或在经销商的手中。
这是我遵循的一门课程中的black jack script,可以帮助您很多。也有一些解释。
答案 1 :(得分:1)
您错过了函数调用中的(
和)
,以及Players.py
文件中的一些小事情。
要进行函数调用,您需要将函数参数放在其名称之后。
即is_empty()
而非is_empty
也在这里
dealer = pl.Dealer ()
dealer.deck_shuffle ()
import CardDeck
class Player:
def __init__(self):
self.hand = []
class Human(Player):
def __init__(self):
super(Human, self).__init__()
self.name = input()
class Dealer(CardDeck.Deck, Player):
def __init__(self):
super(Dealer, self).__init__()
def deck_shuffle(self):
while not self.is_empty():
print(self.pick())
更改注释:
Dealer
,因为您没有放置()
deck_shuffle
方法应该在其实例上调用了函数没有括号,您引用的是函数/方法,而不是调用它。 例如
>>> dealer.deck_shuffle
<bound method Dealer.deck_shuffle of <Players.Dealer object at 0x7fcbdc2ff4e0>>
与您尝试调用is_empty
方法的方式相同。
>>> CardDeck.Deck.is_empty
<function Deck.is_empty at 0x7fcbdc297730>
如果您尝试调用不是static的方法,则会出现异常:
>>> CardDeck.Deck.is_empty()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: is_empty() missing 1 required positional argument: 'self'
您需要具有该方法将在其上起作用的对象的实例。
答案 2 :(得分:0)
如果要保留继承,则需要确保初始化所有超类。
在您的SELECT usr.*
FROM dbo.[users] usr
WHERE usr.[name] <> CONVERT(NVARCHAR(MAX),
CONVERT(VARCHAR(MAX), usr.[name] COLLATE Latin1_General_100_BIN2))
OR usr.[address] <> CONVERT(NVARCHAR(MAX),
CONVERT(VARCHAR(MAX), usr.[address] COLLATE Latin1_General_100_BIN2))
OR usr.[description] <> CONVERT(NVARCHAR(MAX),
CONVERT(VARCHAR(MAX), usr.[description] COLLATE Latin1_General_100_BIN2));
类中,您调用Dealer
仅初始化super(Dealer, self).__init__()
超类。因此,永远不会创建Player
中的cards
字段。
您需要在经销商的Deck
中添加一个明确的Deck.__init__(self)
通话,或者在__init__
中添加super().__init__()
。
有关更多信息,请查看this other question。
然后,在您的Player
中,您只需致电deck_shuffle
。
编辑:
总之,代码应为:
CardDeck.py不变
Players.py:
self.pick()
您这样称呼:
import CardDeck
class Player:
def __init__(self):
# Added superclass initialisation (for cooperative multiple inheritance)
super(Player, self).__init__()
self.hand = []
# Unchanged
class Human(Player):
def __init__(self):
super(Human, self).__init__()
self.name = input()
class Dealer(Player, CardDeck.Deck):
def __init__(self):
super(Dealer, self).__init__()
def deck_shuffle(self):
while not self.is_empty:
print(self.pick())