秉承互联网精神,给代码开个源

import randomfrom collections import defaultdict
def process_team(players): """处理队伍结构,分离主将、快棋和普通选手""" team = {'main': None, 'fast': None, 'regular': []} for p in players: if p['role'] == 'main': team['main'] = p elif p['role'] == 'fast': team['fast'] = p else: team['regular'].append(p) return team
def simulate_match(a, b): """模拟单场比赛,返回胜方(A/B)""" prob = 1 / (1 + 10**((b['rating'] - a['rating'])/400)) return 'A' if random.random() <= prob else 'B'
def simulate_round1(team_a, team_b): """第一轮模拟,返回得分和对战日志""" log = ["第一轮比赛"] score_a, score_b = 0, 0 # 快棋对决 a_fast = team_a['fast'] b_fast = team_b['fast'] result = simulate_match(a_fast, b_fast) log.append(f"快棋对决:{a_fast['name']}(A) vs {b_fast['name']}(B) → {'A胜' if result == 'A' else 'B胜'}") if result == 'A': score_a += 1 else: score_b += 1
# 其他选手对决 a_players = [team_a['main']] + team_a['regular'] b_players = [team_b['main']] + team_b['regular'] random.shuffle(a_players) random.shuffle(b_players)
for a_p, b_p in zip(a_players, b_players): result = simulate_match(a_p, b_p) log.append(f"常规对决:{a_p['name']}(A) vs {b_p['name']}(B) → {'A胜' if result == 'A' else 'B胜'}") if result == 'A': score_a += 1 else: score_b += 1 log.append(f"第一轮结束:A队 {score_a} - B队 {score_b}") return score_a, score_b, log
def simulate_round2(team_a, team_b): """第二轮模拟,返回得分和对战日志""" log = ["第二轮比赛"] score_a, score_b = 0, 0
# 快棋对决 a_fast = team_a['fast'] b_fast = team_b['fast'] result = simulate_match(a_fast, b_fast) log.append(f"快棋对决:{a_fast['name']}(A) vs {b_fast['name']}(B) → {'A胜' if result == 'A' else 'B胜'}") if result == 'A': score_a += 1 else: score_b += 1
# 主将对决 a_main = team_a['main'] b_main = team_b['main'] result = simulate_match(a_main, b_main) log.append(f"主将决战:{a_main['name']}(A) vs {b_main['name']}(B) → {'A胜' if result == 'A' else 'B胜'}") if result == 'A': score_a += 1.5 else: score_b += 1.5
# 普通选手对决 a_regs = team_a['regular'].copy() b_regs = team_b['regular'].copy() random.shuffle(a_regs) random.shuffle(b_regs)
for a_p, b_p in zip(a_regs, b_regs): result = simulate_match(a_p, b_p) log.append(f"常规对决:{a_p['name']}(A) vs {b_p['name']}(B) → {'A胜' if result == 'A' else 'B胜'}") if result == 'A': score_a += 1 else: score_b += 1 log.append(f"第二轮结束:A队 {score_a} - B队 {score_b}") return score_a, score_b, log
def calculate_win_probability(team_a, team_b, simulations=10000): """计算两队胜率""" counts = defaultdict(int) for _ in range(simulations): r1_a, r1_b, _ = simulate_round1(team_a, team_b) r2_a, r2_b, _ = simulate_round2(team_a, team_b) total_a = r1_a + r2_a total_b = r1_b + r2_b if total_a > total_b: counts['A'] += 1 elif total_b > total_a: counts['B'] += 1 else: counts['Tie'] += 1 return {k: v/simulations for k, v in counts.items()}
def generate_single_battle(team_a, team_b): """生成单次模拟结果""" r1_a, r1_b, log1 = simulate_round1(team_a, team_b) r2_a, r2_b, log2 = simulate_round2(team_a, team_b) total_a = r1_a + r2_a total_b = r1_b + r2_b result = ["模拟对战结果:"] result += log1 result += log2 result.append(f"总分:A队 {total_a} - B队 {total_b}") result.append("最终胜利:" f"{'A队' if total_a > total_b else 'B队' if total_b > total_a else '平局'}") return '\n'.join(result)
# 示例使用if __name__ == "__main__": # 输入队伍数据示例 team_a_players = [ {'name': '申真谞', 'rating': 3880, 'role': 'main'}, {'name': '杨鼎新', 'rating': 3661, 'role': 'fast'}, {'name': '李轩豪', 'rating': 3655, 'role': 'regular'}, {'name': '战鹰', 'rating': 2807, 'role': 'regular'} ] team_b_players = [ {'name': '王星昊', 'rating': 3713, 'role': 'main'}, {'name': '丁浩', 'rating': 3671, 'role': 'fast'}, {'name': '柯洁', 'rating': 3673, 'role': 'regular'}, {'name': '朴廷桓', 'rating': 3686, 'role': 'regular'} ]
# 处理队伍结构 team_a = process_team(team_a_players) team_b = process_team(team_b_players)
# 计算胜率 probabilities = calculate_win_probability(team_a, team_b) print(f"胜率分析:\nA队: {probabilities['A']*100:.1f}%\nB队: {probabilities['B']*100:.1f}%") if 'Tie' in probabilities: print(f"平局: {probabilities['Tie']*100:.1f}%")
# 生成单次模拟结果 print("\n单次模拟过程:") print(generate_single_battle(team_a, team_b))