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

Python如何在循环中随机选取变量:每次选2个+关联上次选中项

实现方案

核心思路

  1. 先将所有玩家对象存入一个列表,便于统一操作;
  2. 第一次循环直接随机选取2个不同玩家;
  3. 后续每次循环,从上次选中的2个玩家中随机保留1个,再从剩余玩家中选1个新的,确保每次选中的组合包含上一次的至少一个玩家。

完整代码实现

import random

# 定义player类(假设你还未实现)
class player:
    def __init__(self, name, health, attack, defense):
        self.name = name
        self.health = health
        self.attack = attack
        self.defense = defense
    
    def get_health(self):
        return self.health

boss = player("gigachad", 1000, 0, 0)
a = player("robert", 1, 2, 3) 
b = player("gilbert", 1, 2, 3)
c = player("margeritte", 1, 2, 3)
d = player("brigitte", 1, 2, 3)

# 将玩家存入列表统一管理
players = [a, b, c, d]
last_picked = None  # 记录上一次选中的玩家组合

while boss.get_health() > 0:
    if last_picked is None:
        # 首次循环:随机选2个不重复的玩家
        current_picked = random.sample(players, 2)
    else:
        # 从上次选中的玩家里随机留一个
        keep_player = random.choice(last_picked)
        # 从剩下的玩家中选一个新的(排除已保留的)
        candidates = [p for p in players if p != keep_player]
        new_player = random.choice(candidates)
        current_picked = [keep_player, new_player]
    
    # 这里添加你需要的选中后逻辑,比如执行玩家攻击、打印信息等
    print(f"本次选中: {current_picked[0].name} 和 {current_picked[1].name}")
    
    # 更新上一次选中的记录
    last_picked = current_picked
    
    # 必须添加boss血量减少逻辑,否则循环会无限运行
    boss.health -= 150

补充说明

  • 使用random.sample确保首次选中的两个玩家不重复;
  • 后续循环通过保留上一次的一个玩家搭配新玩家,完全贴合你给出的示例场景(比如第一次a+b、第二次a+c、第三次b+d这类组合);
  • 如果需要允许连续两次选中完全相同的组合,可以修改后续循环逻辑:从上次的两个玩家中选一个,再从所有玩家(包括另一个)中选第二个,但需额外判断是否重复,不过你的示例未涉及这种情况,所以当前实现更匹配需求。

内容的提问来源于stack exchange,提问作者Jl_Sslix

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 06:00:45