期末_体育竞赛规则_兵乓球

(一)代码
import random
import time

def print_introduction():
"""打印程序介绍信息"""
print("=" * 50)
print("体育竞技比赛模拟程序")
print(f"学号后两位: 23")
print("本程序用于模拟乒乓球比赛,根据选手能力值计算胜负概率")
print("=" * 50)

def get_user_input():
"""获取用户输入:选手能力值和模拟次数"""
while True:
try:
ability_a = float(input("请输入选手A的能力值(0-1之间): "))
ability_b = float(input("请输入选手B的能力值(0-1之间): "))

        if not (0 <= ability_a <= 1 and 0 <= ability_b <= 1):
            print("能力值必须在0到1之间,请重新输入!")
            continue
            
        num_games = int(input("请输入模拟比赛的次数: "))
        if num_games <= 0:
            print("模拟次数必须为正整数,请重新输入!")
            continue
            
        return ability_a, ability_b, num_games
    except ValueError:
        print("输入格式错误,请输入有效的数字!")

def simulate_point(ability_a, ability_b):
"""模拟一次得分,返回得分方('A'或'B')"""
# 根据能力值计算得分概率
prob_a = ability_a / (ability_a + ability_b) if (ability_a + ability_b) > 0 else 0.5
return 'A' if random.random() < prob_a else 'B'

def simulate_game(ability_a, ability_b):
"""模拟一局比赛,返回获胜方('A'或'B')"""
score_a, score_b = 0, 0

while True:
    # 模拟得分
    winner = simulate_point(ability_a, ability_b)
    if winner == 'A':
        score_a += 1
    else:
        score_b += 1
    
    # 检查是否结束比赛
    if score_a >= 11 or score_b >= 11:
        # 10平后需要领先2分才能获胜
        if abs(score_a - score_b) >= 2:
            return 'A' if score_a > score_b else 'B'

def simulate_match(ability_a, ability_b):
"""模拟一场七局四胜制比赛,返回获胜方('A'或'B')"""
game_wins_a, game_wins_b = 0, 0

for game_num in range(1, 8):  # 最多打7局
    game_winner = simulate_game(ability_a, ability_b)
    if game_winner == 'A':
        game_wins_a += 1
    else:
        game_wins_b += 1
    
    # 检查是否有一方已赢4局
    if game_wins_a >= 4 or game_wins_b >= 4:
        return 'A' if game_wins_a > game_wins_b else 'B'

# 理论上不会执行到这里,因为4胜即结束
return 'A' if game_wins_a > game_wins_b else 'B'

def simulate_multiple_games(ability_a, ability_b, num_games):
"""模拟多场比赛,返回胜负统计"""
wins_a = 0

print(f"\n开始模拟{num_games}场比赛...")
for i in range(num_games):
    if i % 100 == 0:
        print(f"正在模拟第{i}场比赛...")
    
    match_winner = simulate_match(ability_a, ability_b)
    if match_winner == 'A':
        wins_a += 1

return wins_a, num_games - wins_a

def print_results(wins_a, wins_b, num_games):
"""打印比赛结果和胜负概率"""
prob_a = wins_a / num_games
prob_b = wins_b / num_games

print("\n" + "=" * 50)
print(f"模拟比赛结果 ({num_games}场):")
print(f"选手A获胜: {wins_a}场,胜率: {prob_a:.2%}")
print(f"选手B获胜: {wins_b}场,胜率: {prob_b:.2%}")
print("=" * 50)

def main():
"""主函数,控制程序流程"""
# 1. 打印介绍信息
print_introduction()

# 2. 获取用户输入
ability_a, ability_b, num_games = get_user_input()

# 3. 模拟多场比赛
wins_a, wins_b = simulate_multiple_games(ability_a, ability_b, num_games)

# 4. 打印结果
print_results(wins_a, wins_b, num_games)

if name == "main":
main()

(二)输出效果

posted @ 2025-06-21 22:14  荔枝Y  阅读(5)  评论(0)    收藏  举报