python体育竞技分析代码-python之预测体育竞技分析

#-*- encoding:utf-8 -*-

"""模拟排球竞技

@author: LuDuo"""

#比赛规则:#1. 采用5局3胜制#2. 前四局采用25分制,每个队只有在赢得至少25分,且同时超过对方2分时才胜一局#3. 决胜局(第五局)采用15分制,先获得15分,且同时超过对方2分为胜

from random importrandomfrom time importtimedefprintInfo():"""function: 打印程序的介绍信息"""

print("{:*^70}".format("产品简介"))print("产品名称: 排球竞技模拟分析器")print("产品概述: 通过输入2个队伍A和B的能力值(0到1之间的小数表示),能够模拟多次2个队伍A和B的排球竞技比赛,从而得出各自的胜率!")print("产品作者: 陆光朵 - 36")print("{:*^70}".format("模拟开始"))defgetInputs():"""function: 获得用户输入的参数"""probA= eval(input("请输入队伍A的能力值(0~1):"))

probB= eval(input("请输入队伍B的能力值(0~1):"))

n= eval(input("请输入需要模拟比赛的场次数:"))returnprobA, probB, ndefprintResult(n, winsA, winsB):"""function: 输出模拟比赛的结果"""

print("{:*^70}".format("模拟结束"))print("竞技分析开始,共模拟{}场比赛。".format(n))print(">>>队伍A获胜{}场比赛,占比{:0.1%}".format(winsA,winsA/n))print(">>>队伍B获胜{}场比赛,占比{:0.1%}".format(winsB,winsB/n))defsimNGames(n, probA, probB):"""function: 模拟n场比赛

n: 模拟n场比赛

probA, probB: 分别为队伍A和B的能力值

winA, winB: 队伍A和B在一场比赛中获胜的局数

winsA, winsB: 队伍A和B赢得比赛的场数,总共n场"""winsA, winsB=0, 0for _ inrange(n):

winA, winB=simOneGame(probA, probB)if winA >winB:

winsA+= 1

else:

winsB+= 1

returnwinsA, winsBdefsimOneGame(probA, probB):"""function: 模拟一场比赛,包括五局,采取五局三胜制

probA, probB: 分别为队伍A和B的能力值

return: 返回队伍A和B在本场比赛中获胜的局数

scoreA, scoreB: 分别为队伍A和B一局比赛获得的分数

winA, winB: 分别为队伍A和B一场比赛获胜的局数

N: 代表本次比赛的局次"""winA, winB=0, 0for N in range(5):

scoreA, scoreB=simAGame(N, probA, probB)if scoreA >scoreB:

winA+= 1

else:

winB+= 1

if winA == 3 or winB == 3:break

returnwinA, winBdefsimAGame(N, probA, probB):"""function: 模拟一局比赛

N: 代表本次比赛的局次

probA, probB: 分别为队伍A和B的能力值

return: 返回队伍A和B在本局比赛中获得的分数"""scoreA, scoreB= 0, 0 #分别为队伍A和B一局比赛获得的分数

serving = "A" #发球方

while notGameOver(N, scoreA, scoreB):if serving == "A":if random() >probA:

scoreB+= 1serving= "B"

else:

scoreA+= 1

else:if random() >probB:

scoreA+= 1serving= "A"

else:

scoreB+= 1

returnscoreA, scoreBdefGameOver(N, scoreA, scoreB):"""function: 定义一局比赛的结束条件

N: 代表当前局次(第五局为决胜局)

return: 若比赛结束的条件成立返回真,否则为假"""

if N <= 4:return (scoreA>=25 and scoreB>=25 and abs(scoreA-scoreB)>=2)else:return (scoreA>=15 and abs(scoreA-scoreB)>=2) or (scoreB>=15 and abs(scoreA-scoreB)>=2)if __name__ == "__main__":

printInfo()

probA, probB, n=getInputs()

Time=time()

winsA, winsB=simNGames(n, probA, probB)print("模拟用时: {:.1f}s".format(time()-Time))

printResult(n, winsA, winsB)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值