Python入门实例验证及结果之实例14 体育竞技分析

3月2日星期一
在这里插入图片描述在这里插入图片描述
先设计main函数
在这里插入图片描述
设计printIntro()函数打印一些介绍性内容,提高用户体验
在这里插入图片描述
设计getInputs()函数获得用户输入的三个参数,并把输入转换为数字,用return返回一个元组类型
在这里插入图片描述
设计printSummary(winsA,winsB)函数根据A、B获胜场次将相关信息和概率打印出来,那么A获胜和B获胜场次之和就是整体的比赛场次,那么它们的概率就是他们每个人获胜的场次与总获胜场次的比值,使用求和获得总场次并且用三个print语句打印相关的信息
def printSummary(winsA,winsB):
n=winsA+winsB
print(“竞技分析开始,共模拟{}场比赛”.format(n))
print(“选手A获胜{}场比赛,占比{:0.1%}”.format(winsA,winsA/n))
print(“选手B获胜{}场比赛,占比{:0.1%}”.format(winsB,winsB/n))

在这里插入图片描述构造一个模拟一局比赛的函数叫simOneGame()
这个函数只需要获得选手A、选手B的能力值并且返回这一局比赛他们的分数,模拟N局比赛就是N次调用模拟一局比赛函数,然后将这样的结果进行一个整合
先来设计N次比赛函数,首先让A,B的获胜场次都置为0,然后N次调用simOneGame()函数获得A,B的分数,当A的分数大于B时,A的获胜场次加1,否则B的获胜场次加1
def simNGame(n,probA,probB):
winsA,winsB=0,0
for i in range(n):
scoreA,scoreB=simOneGame(probA,probB)
if scoreA>scoreB:
winsA+=1
else:
winB+=1
return winsA,winsB

在模拟一场比赛中进一步的分析一局比赛中可能的功能模块,定义一个gameover()函数来判断一局比赛是否结束
比赛不结束的情况下我们进行如下操作,选手A发球,生成一个随机变量,如果这个变量在A能力的范围之内,A获得1分,用这样的方式随机性的表达A能力与A获得分数之间的关系,如果随机函数生成之后,超越了A的能力范围,那么我们认为当前的发球局换为B,serving=“B”,对B也是一样
def simOneGame(probA,probB):
scoreA,scoreB=0,0
serving=“A”#选手A发球
while not gameOver(scoreA,scoreB):
if serving==“A”:
if random()<probA:
score+=1
else:
serving=“B”
else:
if random()<probB:
scoreB+=1
else:
serving=“A”
return scoreA,scoreB
如果A或B的分数达到15分则,gameOver返回true or false
def gameOver(a,b)
return a15 or b15
在这里插入图片描述代码一:

#MatchAnalysis.py
from random import random
def printInfo():
    print("这个程序模拟两个选手A和B的某种竞技比赛")
    print("程序运行需要A和B的能力值(以0到1的小数表示)")
def getInputs():
    a=eval(input("请输入选手A的能力值(0-1):"))
    b=eval(input("请输入选手B的能力值(0-1):"))
    n=eval(input("模拟比赛的场次:"))
    return a,b,n
def simNGames(n,probA,probB):
    winsA,winsB=0,0
    for i in range(n):
        scoreA,scoreB=simOneGame(probA,probB)
        if scoreA>scoreB:
            winsA+=1
        else:
            winsB+=1
    return  winsA,winsB
def simOneGame(probA,probB):
    scoreA,scoreB=0,0
    serving="A"
    while not gameOver(scoreA,scoreB):
        if serving=="A":
            if random()<probA:
                scoreA+=1
            else:
                serving="B"
        else:
            if random()<probB:
                scoreB+=1
            else:
                serving='A'
    return scoreA,scoreB
def gameOver(a,b):#返回true或False
    return a= =15 or b= =15
def printSummary(winsA,winsB):
    n=winsA+winsB
    print("竞技分析开始,共模拟{}场比赛".format(n))
    print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA,winsA/n))
    print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB,winsB/n))
def main():
    printInfo()
    probA,probB,n=getInputs()
    winsA,winsB=simNGames(n,probA,probB)
    printSummary(winsA,winsB)
main()

结果一:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值