$(".scroller-back").mCustomScrollbar("scrollTo", $("#yourdiv"));
我想创建一些随机对象,但是使用循环
class HandOfCards:
def __init__ (self, numCardsInHand):
self.list = []
all_rank = random.randint(1, 13)
random_suit = ['d', 'c', 'h', 's']
all_suit = random.choice(random_suit)
for count in range(numCardsInHand):
self.list.append(Card(all_rank, all_suit))
def __str__(self):
all_items = '\n'.join(map(str, self.list))
return all_items
事实证明我实际上创建了完全相同对象的for count in range(numCardsInHand):
self.list.append(Card(all_rank, all_suit))
。似乎随机模块不能在我的numCardsInHand
循环上工作。我有问题搞清楚。
答案 0 :(得分:2)
您需要在循环中调用random
模块:
for count in range(numCardsInHand):
all_rank = random.randint(1, 13)
random_suit = ['d', 'c', 'h', 's']
all_suit = random.choice(random_suit)
self.list.append(Card(all_rank, all_suit))
答案 1 :(得分:2)
random
模块仅将值赋给变量,变量固定在变量上。每次调用变量时都不会重新分配(这很奇怪)。换句话说,每次需要新值时都应该再次调用该函数。在你的情况下,
for count in range(numCardsInHand):
self.list.append(Card(random.randint(1, 13), random.choice(random_suit))
另一种方法是为函数本身分配一个变量。所以你的代码看起来像是:
all_rank = random.randint
random_suit = ['d', 'c', 'h', 's']
all_suit = random.choice
for count in range(numCardsInHand):
self.list.append(Card(all_rank(1, 13), all_suit(random_suit))
虽然这可能令人困惑。
最后一点,请尽量不要使用list
来存储列表。 list
是Python内置的,下次尝试将任何内容转换为列表时可能会发生冲突。
答案 2 :(得分:2)
all_rank
不是生成随机排名的函数;它是一个随机选择的排名,作为对random.choice
的单次调用的结果。 (同样适用于all_suit
。)
但是,即使您每次拨打random.choice
时都拨打了random.randint
和Card
,也会遇到更严重的问题:您不能保证不会选择同一张卡两次。解决方案很简单:创建一副牌,然后使用random.sample
从牌组中挑选。
# All 52 possible cards
deck = [Card(rank, suit) for rank in range(1,14) for suit in ['d', 'h', 'c', 's']]
hand = random.sample(deck, numCardsInHand)
要选择多只手,您可以选择一只手,取出从牌组中选择的牌,然后再次取样。然而,只是洗牌并处理它们就更简单了。
deck = [Card(rank, suit) for rank in range(1,14) for suit in ['d', 'h', 'c', 's']]
random.shuffle(deck)
hand1 = deck[0:numCardsInHand]
hand2 = deck[numCardsInHand:2*numCardsInHand]
# etc