Python实现从同一列表为两个变量生成不重复值(卡牌发牌场景)
卡牌发牌重复问题解决方法
你的代码问题在于两次调用random.sample(cards, 2)都是从完整的原始卡牌列表里抽取,两次操作完全独立,所以会出现同一张牌被两个玩家拿到的情况。下面给你两种可行的解决思路:
方法一:先发玩家1的牌,再从剩余牌里发玩家2
先给玩家1抽取2张牌,然后从原列表中过滤掉已经发给玩家1的牌,再从剩余牌里给玩家2抽牌:
import random cards = ["a", "b", "c", "d", "e", "f", "g"] player_1 = random.sample(cards, 2) # 筛选出未发给玩家1的剩余卡牌 remaining_cards = [card for card in cards if card not in player_1] player_2 = random.sample(remaining_cards, 2) print(player_1) print(player_2)
方法二:一次性抽取足够的牌再拆分
更高效的方式是直接从卡牌列表里一次性抽取4张不重复的牌,前2张给玩家1,后2张给玩家2:
import random cards = ["a", "b", "c", "d", "e", "f", "g"] # 一次性抽4张不重复的牌 dealt_cards = random.sample(cards, 4) player_1 = dealt_cards[:2] player_2 = dealt_cards[2:] print(player_1) print(player_2)
这两种方法都能保证两个玩家拿到的卡牌完全不重复,你可以根据自己的需求选择。
内容的提问来源于stack exchange,提问作者rhsy19
相关产品推荐
相关产品推荐

