如何在Python中将卡牌列表随机均分为玩家与电脑两个列表?
如何将cardlist随机分成玩家和电脑的卡组?
很高兴能帮你解决这个卡牌分配的问题!针对你的需求,有两种简单且常用的实现方式,我会结合你的现有代码来讲解:
方法一:先洗牌再拆分
这种方法的思路是先把整副牌打乱顺序,然后直接分成前后两半——前26张给玩家,后26张给电脑。好处是逻辑直观,操作简单:
import random # 你的Lamb类和Read函数保持不变,仅优化了读取逻辑 class Lamb(): def __init__(self, weight, milk, wool, offs, thigh, fert, meat, fat): self.weight = weight self.milk = milk self.wool = wool self.offs = offs self.thigh = thigh self.fert = fert self.meat = meat self.fat = fat def __repr__(self): return f"{self.weight,self.milk,self.wool,self.offs,self.thigh,self.fert,self.meat,self.fat}" def Read(txtfile): datalist=[] f = open(txtfile, "r", encoding="utf-8") for line in f: # 加上strip()去除换行符和首尾空格,避免卡牌属性带多余字符 datalist.append(line.strip().split(',')) f.close() cardlist = [] for i in datalist: cardlist.append(Lamb(i[0], i[1], i[2], i[3], i[4], i[5], i[6], i[7])) return cardlist # 读取卡牌列表 cardlist = Read("你的卡牌文件.txt") # 先复制原列表(避免打乱原始cardlist),再执行洗牌操作 shuffled_cards = cardlist.copy() random.shuffle(shuffled_cards) # 拆分卡组 player_cards = shuffled_cards[:26] computer_cards = shuffled_cards[26:]
方法二:随机抽取玩家卡组,剩余的给电脑
如果你不想改动原列表的顺序,可以用random.sample()直接从cardlist里随机选26张作为玩家卡组,剩下的自动分配给电脑:
# 读取卡牌列表后执行以下代码 player_cards = random.sample(cardlist, 26) # 用列表推导式筛选出不在玩家卡组里的卡牌作为电脑卡组 computer_cards = [card for card in cardlist if card not in player_cards]
小提示
random.sample()会自动避免重复抽取,完全符合卡牌分配的无重复需求;- 你的Read函数里,读取每行时一定要加上
strip(),不然最后一个属性大概率会带有换行符\n,影响卡牌数据的准确性。
内容的提问来源于stack exchange,提问作者Mateusz Kuzniewski
相关产品推荐
相关产品推荐

