Python如何在循环中随机选取变量:每次选2个+关联上次选中项
实现方案
核心思路
- 先将所有玩家对象存入一个列表,便于统一操作;
- 第一次循环直接随机选取2个不同玩家;
- 后续每次循环,从上次选中的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
相关产品推荐
相关产品推荐

