Python 使用关键字";在;使用类变量和类变量列表
我正在尝试制作一个5张牌的扑克游戏,我正在尝试制作一个Python 使用关键字";在;使用类变量和类变量列表,python,class,Python,Class,我正在尝试制作一个5张牌的扑克游戏,我正在尝试制作一个card\u draw函数,该函数不提供重复的卡,但是我在尝试检查随机抽取的卡是否已经被抽取时遇到了问题 from random import choice class standard_card: def __init__(self, value, suit): self.value = value self.suit = suit self.card = value + ' of
card\u draw
函数,该函数不提供重复的卡,但是我在尝试检查随机抽取的卡是否已经被抽取时遇到了问题
from random import choice
class standard_card:
def __init__(self, value, suit):
self.value = value
self.suit = suit
self.card = value + ' of ' + suit
def val():
values = ['Ace','2','3','4','5','6','7','8',
'9','10','Jack','Queen','King']
return choice(values)
def suits():
suit = ['Spades','Hearts','Clubs','Diamonds']
return choice(suit)
def card_draw(player_hand,nogo):
for i in range(5):
draw = standard_card(val(),suits())
while draw in nogo:
draw = standard_card(val(),suits())
player_hand.append(draw)
nogo.append(draw)
nogo = []
player_hand = []
card_draw(player_hand,nogo)
因此,在def card\u draw()
中,我只是想确保同一张卡不会被抽两次,这就是为什么我在nogo:中绘制时使用
但是,在nogo
中绘制时总是为False
,这意味着有时会将一张重复的卡放入玩家手中
和nogo
。
我不明白为什么drawinnogo
总是False
。例如,如果我这样做:
test_card = standard_card('7','Spades')
通过card\u draw()
生成的nogo
中的一张卡碰巧也被赋予了值'7'
和'Spades'
test_card in nogo
总是为False
。有人能解释一下原因吗?因为您每次都在将一个新实例与nogo
列表中的其他实例进行比较
你基本上是这样做的:
class A:
pass
a1 = A()
a2 = A()
print(a1 == a2)
这将始终产生False
问题是您总是在创建一个新对象。默认情况下,只有当两个Python对象是相同的对象时,它们才是相同的
换句话说,standard_-card('2','Spades')==standard_-card('2','Spades')
将返回False
为了让Python知道如何比较两张卡片的相等性,您需要通过实现神奇的方法\uuuuueq\uuuu
:
class Card:
def __init__(self, value, suit):
self.value = value
self.suit = suit
def __eq__(self, other):
return self.value == other.value and self.suit == other.suit
def __str__(self):
return self.value + ' of ' + self.suit
我还实现了\uu str\uu
方法,因此您可以执行打印(卡片)
,并根据Python的官方样式指南对其命名
最后,您可能希望实现一个容纳一副牌的Deck
类。然后,您可以洗牌,并从牌组中连续弹出牌,确保每张牌只能抽取一次。您还没有告诉Python如何将一张标准卡与另一张进行比较。默认情况下,只有当对象是同一个对象时,它们才相等,但事实并非如此。因此Python无法判断卡何时已经在nogo
中。您必须在类上定义特殊的方法\uuuu eq\uuu
,才能使中的正常工作。