[英]Make a list of random numbers in python without using numbers in another list
我正在尝试制作纸牌游戏,我希望能够在列表中生成随机数,但是我不希望这些数字在程序运行一次后重复使用。
这是我到目前为止的内容:
usedcards = []
import random
def choosecards():
global usedcards
cards=random.sample(range(52), 5)
usedcards = usedcards + cards
#print(usedcards)
return cards
每次我运行该功能时,我都希望使用cards变量对usedcards
列表进行交叉检查。
我怎样才能做到这一点?
这是使用集合进行此操作的一种方法。 设置使排除已使用的卡非常容易。
import random
used_cards = set()
def choose_cards(n_cards):
# No need to do 'global used_cards', used_cards is
# already global and can be modified inplace
# Find the set difference between all the cards and
# those that have been used
available = set(range(52)) - used_cards
chosen = random.sample(available, n_cards)
for card in chosen:
used_cards.add(card)
return chosen
for i in range(4):
print(choose_cards(5))
print(used_cards)
生成器可以保留状态并隐藏详细信息:
import random
def choosecards(amount=5):
cards = list(range(52))
random.shuffle(cards)
while True:
yield [cards.pop() for _ in range(amount)]
>>> cards = choosecards()
>> next(cards)
[37, 41, 13, 2, 33]
>>> next(cards)
[4, 8, 7, 38, 23]
不要使用全局变量。 如果正确使用参数,此问题将变得很容易解决。
def choosecards(stack, amount=5):
cards=[ stack.pop() for i in range(amount) ]
return cards
deck = list(range(52))
random.shuffle(deck)
hand = choosecards(deck)
otherhand = choosecards(deck)
#etc.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.