繁体   English   中英

在python中创建一个随机数列表,而不在另一个列表中使用数字

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM