You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:24:38