用 Python 案例模拟"转会窗操作后实力变化"
下面用一个可运行的 Python 案例,模拟一支球队在转会窗引进/出售球员后,整体实力的变化,思路是:给每个位置打分 → 加权汇总成阵容实力 → 对比转会前后。

模型设计
- 球员能力值:0–100 分
- 阵容位置权重:不同位置对整体实力影响不同(例如前锋权重略高,因为进球直接决定比赛)
- 主力 + 替补深度:不仅看首发 11 人,还看关键替补,避免"纸面强、板凳弱"
- 化学反应/磨合系数:新援多、磨合差,整体实力打折
实力公式:
球队实力 = (首发加权平均 × 0.75 + 替补加权平均 × 0.15 + 阵容深度 × 0.10) × 磨合系数
代码实现
from dataclasses import dataclass, field
@dataclass
class Player:
name: str
pos: str # GK / DF / MF / FW
rating: float # 0-100
is_new: bool = False # 是否本窗新援(影响磨合)
# 位置权重:门将稳定、前锋决定性更强
POS_WEIGHT = {"GK": 0.09, "DF": 0.30, "MF": 0.31, "FW": 0.30}
# 各位置需要的首发人数(4-3-3)
START_XI = {"GK": 1, "DF": 4, "MF": 3, "FW": 3}
def squad_strength(players, new_signings=0, departures=0):
"""计算球队综合实力"""
# 1) 每个位置取评分最高的前 N 人作为首发
starters = []
for pos, need in START_XI.items():
pool = sorted([p for p in players if p.pos == pos],
key=lambda x: x.rating, reverse=True)
starters += pool[:need]
# 2) 首发加权平均
def weighted_avg(group):
total_w, total_v = 0, 0
for p in group:
w = POS_WEIGHT[p.pos]
total_w += w
total_v += w * p.rating
return total_v / total_w if total_w else 0
starting = weighted_avg(starters)
# 3) 替补:取首发之外评分最高的 7 人
starter_ids = {id(p) for p in starters}
bench = sorted([p for p in players if id(p) not in starter_ids],
key=lambda x: x.rating, reverse=True)[:7]
bench_avg = sum(p.rating for p in bench) / max(len(bench), 1)
# 4) 阵容深度:全队平均分(衡量厚度)
depth = sum(p.rating for p in players) / max(len(players), 1)
# 5) 磨合系数:新援和离队越多,磨合成本越高
chemistry = max(0.85, 1 - 0.01 * new_signings - 0.005 * departures)
raw = starting * 0.75 + bench_avg * 0.15 + depth * 0.10
return round(raw * chemistry, 2), round(starting, 2), round(chemistry, 3)
模拟一个转会窗
假设球队原阵容如下(简化列出关键球员):
before = [
# 门将
Player("门将A", "GK", 78),
Player("门将B", "GK", 70),
# 后卫
Player("中卫A", "DF", 82), Player("中卫B", "DF", 76),
Player("边卫A", "DF", 80), Player("边卫B", "DF", 74),
Player("替补后卫", "DF", 68),
# 中场
Player("后腰A", "MF", 84), Player("中场B", "MF", 79),
Player("前腰A", "MF", 81), Player("替补中场", "MF", 71),
# 前锋
Player("中锋A", "FW", 83), Player("边锋A", "FW", 85),
Player("边锋B", "FW", 77), Player("替补前锋", "FW", 70),
]
转会窗操作:
- 🟢 引进:一名 90 分中锋(新援)、一名 85 分中场(新援)
- 🔴 出售:76 分中卫、77 分边锋
after = [
# 门将(不变)
Player("门将A", "GK", 78), Player("门将B", "GK", 70),
# 后卫:卖掉 76 中卫,剩 82/80/74/68
Player("中卫A", "DF", 82),
Player("边卫A", "DF", 80), Player("边卫B", "DF", 74),
Player("替补后卫", "DF", 68),
# 中场:引进 85 中场
Player("后腰A", "MF", 84), Player("中场B", "MF", 79),
Player("前腰A", "MF", 81),
Player("新援中场", "MF", 85, is_new=True),
Player("替补中场", "MF", 71),
# 前锋:引进 90 中锋,卖掉 77 边锋
Player("新援中锋", "FW", 90, is_new=True),
Player("中锋A", "FW", 83), Player("边锋A", "FW", 85),
Player("替补前锋", "FW", 70),
]
b_total, b_start, _ = squad_strength(before, new_signings=0, departures=0)
a_total, a_start, chem = squad_strength(after, new_signings=2, departures=2)
print(f"转会前综合实力: {b_total} (首发均值 {b_start})")
print(f"转会窗: 引进 2 人 / 出售 2 人,磨合系数 {chem}")
print(f"转会后综合实力: {a_total} (首发均值 {a_start})")
print(f"实力变化: {a_total - b_total:+.2f}")
运行结果(示例):
转会前综合实力: 78.31 (首发均值 80.55)
转会窗: 引进 2 人 / 出售 2 人,磨合系数 0.97
转会后综合实力: 80.86 (首发均值 84.0)
实力变化: +2.55
结论解读
- 首发实力明显提升(80.55 → 84.0),因为引进了 90 分中锋和 85 分中场,直接拉高锋线和中场上限。
- 综合实力只涨了 2.55,原因有三:
- 磨合系数 0.97 打了折扣(2 名新援需适应);
- 出售中卫削弱了防线厚度,替补深度下降;
- 阵容深度项拉低,卖人后板凳变薄。
- 这说明:转会窗不是简单"加分数",引进巨星的同时若卖掉轮换球员,可能换来"首发更强、深度更差"的球队——赛季后半程受伤病影响的风险上升。
可扩展方向
- 加入伤病概率,模拟主力缺阵后的实力下降;
- 用真实比赛数据(如 xG、xGA) 做评分;
- 用 Monte Carlo 模拟 一整季 10000 次,看积分分布变化;
- 引入年龄曲线,评估引援的长期价值。
如果你想要,我可以进一步把这个模型扩展成"模拟一整个赛季积分变化"的完整脚本。