Python123模拟乒乓球比赛

import random  
  
def simulate_game(player1_ability, player2_ability):  
    """  
    模拟一局乒乓球比赛  
    :param player1_ability: 球员1的能力值  
    :param player2_ability: 球员2的能力值  
    :return: 获胜玩家('player1' 或 'player2')或 'draw'(平局)  
    """  
    player1_score = 0  
    player2_score = 0  
    max_score = 11  
    win_by = 2  
      
    while player1_score < max_score and player2_score < max_score:  
        # 根据能力值随机决定哪一方得分  
        # 这里使用简单的概率模型,能力值越高,得分概率越大  
        if random.random() < player1_ability / (player1_ability + player2_ability):  
            player1_score += 1  
        else:  
            player2_score += 1  
          
        # 检查是否达到获胜条件  
        if player1_score == max_score or player2_score == max_score:  
            return 'player1' if player1_score >= player2_score else 'player2'  
        elif player1_score >= max_score - win_by and player1_score > player2_score:  
            return 'player1'  
        elif player2_score >= max_score - win_by and player2_score > player1_score:  
            return 'player2'  
      
    # 如果达到此点,则为平局(但在实际乒乓球比赛中不会出现)  
    return 'draw'  
  
def simulate_matches(player1_ability, player2_ability, num_matches):  
    """  
    模拟多场乒乓球比赛  
    :param player1_ability: 球员1的能力值  
    :param player2_ability: 球员2的能力值  
    :param num_matches: 模拟比赛的次数  
    :return: 球员1和球员2的获胜次数  
    """  
    wins_player1 = 0  
    wins_player2 = 0  
      
    for _ in range(num_matches):  
        winner = simulate_game(player1_ability, player2_ability)  
        if winner == 'player1':  
            wins_player1 += 1  
        elif winner == 'player2':  
            wins_player2 += 1  
      
    return wins_player1, wins_player2  
  
import random  
  
# ...(之前的simulate_game和simulate_matches函数代码保持不变)...  
  
# 获取用户输入  
player1_ability = int(input("请输入球员1的能力值: "))  
player2_ability = int(input("请输入球员2的能力值: "))  
num_matches = int(input("请输入模拟比赛的次数: "))  
  
# 模拟比赛  
wins_p1, wins_p2 = simulate_matches(player1_ability, player2_ability, num_matches)  
  
# 计算获胜概率  
prob_p1_win = wins_p1 / num_matches  
prob_p2_win = wins_p2 / num_matches  

print(f"模拟了{num_matches}场比赛后,")  
print(f"球员1获胜了{wins_p1}次,获胜概率为:{prob_p1_win:.2%}")  
print(f"球员2获胜了{wins_p2}次,获胜概率为:{prob_p2_win:.2%}")
print(31)

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个面向对象的Python乒乓球比赛模拟程序,其中包括两个类:Player和Game。 ```python from random import random class Player: def __init__(self, name, prob): self.name = name self.prob = prob self.score = 0 def winServe(self): return random() <= self.prob def incScore(self): self.score += 1 def getScore(self): return self.score def getName(self): return self.name class Game: def __init__(self, player1, player2): self.player1 = player1 self.player2 = player2 self.serve = player1 def switchServe(self): if self.serve == self.player1: self.serve = self.player2 else: self.serve = self.player1 def play(self): while not self.isOver(): if self.serve.winServe(): self.serve.incScore() else: self.switchServe() def isOver(self): return self.player1.getScore() == 21 or self.player2.getScore() == 21 def getWinner(self): if self.player1.getScore() > self.player2.getScore(): return self.player1 else: return self.player2 def printInfo(player1, player2): print('This program simulates a game between two') print('There are two players, {} and {}'.format(player1.getName(), player2.getName())) print('Probability({}): {}'.format(player1.getName(), player1.prob)) print('Probability({}): {}'.format(player2.getName(), player2.prob)) def simNGames(n, player1, player2): wins = {player1: 0, player2: 0} for i in range(n): game = Game(player1, player2) game.play() winner = game.getWinner() wins[winner] += 1 return wins def printSummary(wins, player1, player2): n = sum(wins.values()) print('\nPlayed', n, 'games between', player1.getName(), 'and', player2.getName()) print('Wins for', player1.getName(), ':', wins[player1], '({0:0.1%})'.format(wins[player1]/n)) print('Wins for', player2.getName(), ':', wins[player2], '({0:0.1%})'.format(wins[player2]/n)) player1 = Player('Chinese team', 0.6) player2 = Player('Japanese team', 0.5) printInfo(player1, player2) wins = simNGames(10000, player1, player2) printSummary(wins, player1, player2) print('Chinese team:{},Japanese team:{}'.format(wins[player1], wins[player2])) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值