利用Python对体育竞技比赛进行分析

程序设计: 

#MatchAnalysis.py
from random import random
def printintro():
    print('这个程序模拟两个选手A和B的某种竞技比赛')
    print('程序运行需要A和B的能力值(以0到1之间的小数表示)')

def  getinput():
    a=eval(input('请输入选手A的能力值(0-1):'))
    b=eval(input('请输入选手B的能力值(0-1):'))
    n=eval(input('输入模拟比赛场次(正整数):'))
    return a,b,n

def simNgames(n,pa,pb):
    wina,winb=0,0
    for i in range(n):
        sa,sb=simonegame(pa,pb)
        if sa>sb:
            wina+=1
        else:
            winb+=1
    return wina,winb

def gameover(a,b):
    return a==15 or b==15

def simonegame(pa,pb):
    sa,sb=0,0
    serving='A'
    while not gameover(sa,sb):
        if serving=='A':
            if random()<(pa/(pa+pb)):
                sa+=1
            else:
                serving='B'
        else:
            if random()<(pb/(pa+pb)):
                sb+=1
            else:
                serving='A'
    return sa,sb

def printsummary(wina,winb):
    n=wina+winb
    print('竞技分析开始,共模拟{}场比赛'.format(n))
    print('选手A获胜{}场比赛,占比{:0.1%}'.format(wina,wina/n))
    print('选手B获胜{}场比赛,占比{:0.1%}'.format(winb,winb/n))

def main():
    printintro()
    proba,probb,n=getinput()
    wina,winb=simNgames(n,proba,probb)
    printsummary(wina,winb)

main() 

结果分析: 

=============================================================================== RESTART: C:\Users\mnbbc\Desktop\Python\DrawStar.py ==============================================================================
这个程序模拟两个选手A和B的某种竞技比赛
程序运行需要A和B的能力值(以0到1之间的小数表示)
请输入选手A的能力值(0-1):0.3
请输入选手B的能力值(0-1):0.4
输入模拟比赛场次(正整数):100
竞技分析开始,共模拟100场比赛
选手A获胜19场比赛,占比19.0%
选手B获胜81场比赛,占比81.0%
>>> 
=============================================================================== RESTART: C:\Users\mnbbc\Desktop\Python\DrawStar.py ==============================================================================
这个程序模拟两个选手A和B的某种竞技比赛
程序运行需要A和B的能力值(以0到1之间的小数表示)
请输入选手A的能力值(0-1):0.5
请输入选手B的能力值(0-1):0.5
输入模拟比赛场次(正整数):100000000

=============================================================================== RESTART: C:\Users\mnbbc\Desktop\Python\DrawStar.py ==============================================================================
这个程序模拟两个选手A和B的某种竞技比赛
程序运行需要A和B的能力值(以0到1之间的小数表示)
请输入选手A的能力值(0-1):0.5
请输入选手B的能力值(0-1):0.5
输入模拟比赛场次(正整数):1000
竞技分析开始,共模拟1000场比赛
选手A获胜548场比赛,占比54.8%
选手B获胜452场比赛,占比45.2%
>>> 
=============================================================================== RESTART: C:\Users\mnbbc\Desktop\Python\DrawStar.py ==============================================================================
这个程序模拟两个选手A和B的某种竞技比赛
程序运行需要A和B的能力值(以0到1之间的小数表示)
请输入选手A的能力值(0-1):0.5001
请输入选手B的能力值(0-1):0.4999
输入模拟比赛场次(正整数):10000
竞技分析开始,共模拟10000场比赛
选手A获胜5250场比赛,占比52.5%
选手B获胜4750场比赛,占比47.5%
>>> 
=============================================================================== RESTART: C:\Users\mnbbc\Desktop\Python\DrawStar.py ==============================================================================
这个程序模拟两个选手A和B的某种竞技比赛
程序运行需要A和B的能力值(以0到1之间的小数表示)
请输入选手A的能力值(0-1):0.5
请输入选手B的能力值(0-1):0.5
输入模拟比赛场次(正整数):100000
竞技分析开始,共模拟100000场比赛
选手A获胜52364场比赛,占比52.4%
选手B获胜47636场比赛,占比47.6%
>>> 
=============================================================================== RESTART: C:\Users\mnbbc\Desktop\Python\DrawStar.py ==============================================================================
这个程序模拟两个选手A和B的某种竞技比赛
程序运行需要A和B的能力值(以0到1之间的小数表示)
请输入选手A的能力值(0-1):0.5
请输入选手B的能力值(0-1):0.5
输入模拟比赛场次(正整数):100000
竞技分析开始,共模拟100000场比赛
选手A获胜52456场比赛,占比52.5%
选手B获胜47544场比赛,占比47.5%
>>> 
=============================================================================== RESTART: C:\Users\mnbbc\Desktop\Python\DrawStar.py ==============================================================================
这个程序模拟两个选手A和B的某种竞技比赛
程序运行需要A和B的能力值(以0到1之间的小数表示)
请输入选手A的能力值(0-1):0.5
请输入选手B的能力值(0-1):0.5
输入模拟比赛场次(正整数):10
竞技分析开始,共模拟10场比赛
选手A获胜5场比赛,占比50.0%
选手B获胜5场比赛,占比50.0%
>>> 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值