python体育竞技分析代码200行_【python】体育竞技分析:预测球队比赛成绩

该博客介绍了如何通过编程模拟体育竞技,包括羽毛球和篮球比赛,运用随机数生成来模拟比赛结果,根据球员或队伍的能力值预测获胜概率。程序还包括比赛规则、模拟框架和结果输出。同时,博客提到了使用pyinstaller将Python脚本打包成可执行文件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

体育竞技分析

一、程序总体框架及步骤:

步骤1:打印程序的介绍性信息

步骤2:获得程序运行参数:probA,probB,n

步骤3:利用球员A和B的能力值,模拟n局比赛

步骤4:输出球员A和B获得比赛的场次和概率

框架表示:

1968246-20200421215623664-318228335.png

二、程序设计(自顶向下):

代码简单介绍:

函数名称

函数说明

printInfo()

打印程序的介绍信息

getInputs()

获得用户输入的参数

printResult(n, winsA, winsB)

输出模拟比赛的结果

simNGames(n, probA, probB)

模拟n场比赛

simOneGame(probA, probB)

模拟一场比赛,包括五局,采取五局三胜制

simAGame(N, probA, probB)

模拟一局比赛

GameOver(N, scoreA, scoreB)

定义一局比赛的结束条件

具体函数代码:

顶层设计:

defmain():

printIntro()

probA , probB , n=getInputs()

winsA , winsB=simNGames(n, probA, probB)

printSummary(winsA, winsB)

步骤一:printIntro()函数

defprintInfo():print("这个程序模拟两个选手A和B的体育竞技比赛")print("程序需要两个选手的能力值0-1")print("规则:")print("作者: 学号:")

步骤二:getInputs()函数

defgetInput():

a= eval(input("请输入选手A的能力值(0-1):"))

b= eval(input("请输入选手B的能力值(0-1):"))

m=eval(input("比赛的局数:"))

n= eval(input("模拟比赛的场次:"))return a,b,m,n

步骤三:simNGames()函数

defmain():

printIntro()

probA,probB,n=getInputs()

winA,winB=simNGames(n,probA,probB)

printSummary(winsA,winsB)

步骤四:printSummary()函数

defprintSummary(winsA,winsB):

n= winsA +winsBprint("竞技分析开始,共模拟{}场比赛".format(n))print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA,winsA/n))print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB,winsB/n))

三、羽毛球竞技程序设计实例:

比赛规则·

1. 21 分制,3局2胜为佳2. 每球得分制3. 每回合中,取胜的一方加 1 分4. 当双方均为 20 分时,领先对方 2 分的一方赢得该局比赛5. 当双方均为 29 分时,先取得 30 分的一方赢得该局比赛6. 一局比赛的获胜方在下一局率先发球

#体育竞技

from random importrandomdefmain():

printInfo()

probA,probB,m,n=getInput()

winsA,winsB=simNGames(m,n,probA,probB)

printSummary(winsA,winsB)defprintInfo():print("这个程序模拟两个选手A和B的羽毛球竞技比赛")print("程序需要两个选手的能力值0-1")print("规则:三局两胜--21分制")print("作者:阮满欢 学号:47")defgetInput():

a= eval(input("请输入选手A的能力值(0-1):"))

b= eval(input("请输入选手B的能力值(0-1):"))

m=eval(input("比赛的局数:"))

n= eval(input("模拟比赛的场次:"))returna,b,m,ndefprintSummary(winsA,winsB):

n= winsA +winsBprint("竞技分析开始,共模拟{}场比赛".format(n))print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA,winsA/n))print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB,winsB/n))defsimNGames(m,n,probA,probB):

winsA,winsB=0,0

wa,wb=0,0for i inrange(n):for i inrange(m):

scoreA,scoreB=simOneGame(probA,probB)if scoreA >scoreB:

wa+= 1

else:

wb+= 1

if wa==2:

winsA+=1wa,wb=0,0break

if wb==2:

winsB+=1wa,wb=0,0break

returnwinsA,winsBdefsimOneGame(probA,probB):

scoreA,scoreB=0,0

serving= "A"

while notgameOver(scoreA,scoreB):if serving == "A":if random()

scoreA+= 1

else:

serving= "B"

else:if random()

scoreB+= 1

else:

serving= "A"

returnscoreA,scoreBdefgameOver(a,b):if(a>=20 or b>=20):if(abs(a-b)==2 and a<=29 and b<=29):returnTrueelse:return a==30 or b==30

else:return False

main()

运行结果:

1968246-20200421222211786-1026532183.png

三、程序打包

使用pyinstaller打包,把Python脚本打包成可执行的文件。即把.py文件打包成.exe文件,则可以直接运行结果。

1.首先要安装pyinstaller库

在cmd中输入下面一句代码:

pip install pyinstaller

1968246-20200422185820203-1531765863.png

2.使用pyinstaller时;在上述代码的main函数的最后加上 input() 语句,防止程序一运行完就自动退出。

1968246-20200422191618155-1673003289.png

(记得在代码后加input()语句)

四、篮球比赛模拟实例

赛事规则:

1.1 篮球比赛

篮球比赛由两个队参加,每队出场5名队员。每队目标是在对方球篮得分,并阻止对方队在本方球篮得分。

篮球比赛由裁判员、记录台人员和技术代表(如到场)管理。

1.2 球篮:本方/对方

被某队进攻的球篮是对方的球篮,由某队防守的球篮是本方的球篮。

1.3 比赛的胜者

在比赛时间结束时得分较多的队,将是比赛的胜者。

#-*- coding: utf-8 -*-

"""Created on Mon May 13 19:46:23 2019

@author: 18 EliO FanG"""

from math importfabsfrom random importrandomdefprintIntro():'''function: 打印程序的介绍信息'''

print("模拟篮球比赛的代码分析")print("这个程序模拟两支队伍A和B的篮球比赛")print("程序运行需要A和B的能力值(以0到1之间的小数表示)")print("作者:阮满欢 47")defgetInputs():

a= eval(input("请输入A队的能力值(0-1):"))

b= eval(input("请输入B队的能力值(0-1):"))

n= eval(input("模拟比赛的场次:"))returna, b, ndefsimNGames(n, probA, probB):

winsA, winsB=0, 0for i inrange(n):

scoreA, scoreB=simOneGame(probA, probB)if scoreA >scoreB:

winsA+= 1

else:

winsB+= 1

returnwinsA, winsBdefgameOver(a,b):return a>b or b>adefsimOneGame(probA, probB):

scoreA, scoreB=0, 0

serving= "A"

while notgameOver(scoreA, scoreB):if serving == "A":if random()

scoreA+= 1

else:

serving="B"

else:if random()

scoreB+= 1

else:

serving="A"

returnscoreA, scoreBdefprintSummary(winsA, winsB):

n= winsA +winsBprint("篮球比赛分析开始,共模拟{}场比赛".format(n))print("A队获胜{}场比赛,占比{:0.1%}".format(winsA, winsA/n))print("B队获胜{}场比赛,占比{:0.1%}".format(winsB, winsB/n))defmain():

printIntro()

probA, probB, n=getInputs()

winsA, winsB=simNGames(n, probA, probB)

printSummary(winsA, winsB)

main()

运行结果:

1968246-20200421231730244-1665347246.png

四、篮球晋级赛模拟

importrandomdef bsxx():#比赛信息输出

string1="模拟体育竞技分析 模拟人:xiayiLL"string2="模拟篮球竞技分析"string3="篮球比赛规则如下:"string4="篮球比赛由两个队参加,每队出场5名队员。每队目标是在对方球篮得分,并阻止对方队在本方球篮得分。"string5="比赛采用4节制,得分最多的队伍获胜。"string6="若比赛结束,比分仍然相同,则进入加时赛"string7="加时赛规则如下:"string8="加时赛分为5分钟一场,球权由跳球决定,在时限内比分高的一方获胜,若时限内还未分出胜负,则继续进行加时赛,球权由第一次加时赛未获球权方拥有,如此往返,直至分出胜负为止。"

print(string1)print()print(string2)print(string3)print(string4)print(string5)print(string6)print(string7)print(string8)print()def getinput():#获取数据

print("为了更好的模拟比赛数据,请输入两支队伍的运动员的能力值(0-1之间)")print("请输入第一支队伍的各位运动员能力值")

A1=eval(input("请输入第一位运动员的综合能力值:"))

A2=eval(input("请输入第二位运动员的综合能力值:"))

A3=eval(input("请输入第三位运动员的综合能力值:"))

A4=eval(input("请输入第四位运动员的综合能力值:"))

A5=eval(input("请输入第五位运动员的综合能力值:"))print("请输入第二支队伍的各位运动员能力值")

B1=eval(input("请输入第一位运动员的综合能力值:"))

B2=eval(input("请输入第二位运动员的综合能力值:"))

B3=eval(input("请输入第三位运动员的综合能力值:"))

B4=eval(input("请输入第四位运动员的综合能力值:"))

B5=eval(input("请输入第五位运动员的综合能力值:"))

n=eval(input("请输入模拟的次数:"))returnA1,A2,A3,A4,A5,B1,B2,B3,B4,B5,ndef onejie(A1,A2,A3,A4,A5,B1,B2,B3,B4,B5):#一节比赛的得分

scoreA,scoreB=0,0

list1=(2,3)for k in range(5):#设每个人在一节中能有5次投篮的机会

if random.random()<=A1:

scoreA+=random.choice(list1)#投中2分球或者3分球的几率是随机的

if random.random()<=A2:

scoreA+=random.choice(list1)if random.random()<=A3:

scoreA+=random.choice(list1)if random.random()<=A4:

scoreA+=random.choice(list1)if random.random()<=A5:

scoreA+=random.choice(list1)if random.random()<=B1:

scoreB+=random.choice(list1)if random.random()<=B2:

scoreB+=random.choice(list1)if random.random()<=B3:

scoreB+=random.choice(list1)if random.random()<=B4:

scoreB+=random.choice(list1)if random.random()<=B5:

scoreB+=random.choice(list1)returnscoreA,scoreBdef onegame(A1,A2,A3,A4,A5,B1,B2,B3,B4,B5):#一场比赛的总得分

sA1,sB1=onejie(A1,A2,A3,A4,A5,B1,B2,B3,B4,B5)

sA2,sB2=onejie(A1,A2,A3,A4,A5,B1,B2,B3,B4,B5)

sA3,sB3=onejie(A1,A2,A3,A4,A5,B1,B2,B3,B4,B5)

sA4,sB4=onejie(A1,A2,A3,A4,A5,B1,B2,B3,B4,B5)

scoreA=sA1+sA2+sA3+sA4

scoreB=sB1+sB2+sB3+sB4returnscoreA,scoreBdef allgame(A1,A2,A3,A4,A5,B1,B2,B3,B4,B5,n):#模拟所有场次比赛

teamA,teamB,p=0,0,0for i inrange(n):

scoreA,scoreB=onegame(A1,A2,A3,A4,A5,B1,B2,B3,B4,B5)if scoreA>scoreB:

teamA+=1

elif scoreA

teamB+=1

else:

t1,t2=overtime(A1,A2,A3,A4,A5,B1,B2,B3,B4,B5)

teamA+=t1

teamB+=t2returnteamA,teamBdef overtime(A1,A2,A3,A4,A5,B1,B2,B3,B4,B5):#设加时赛中,每人能投2次球

scoreA,scoreB,t1,t2,p1,p2=0,0,0,0,0,0

list1=(2,3)for k in range(2):if random.random()<=A1:

scoreA+=random.choice(list1)if random.random()<=A2:

scoreA+=random.choice(list1)if random.random()<=A3:

scoreA+=random.choice(list1)if random.random()<=A4:

scoreA+=random.choice(list1)if random.random()<=A5:

scoreA+=random.choice(list1)if random.random()<=B1:

scoreB+=random.choice(list1)if random.random()<=B2:

scoreB+=random.choice(list1)if random.random()<=B3:

scoreB+=random.choice(list1)if random.random()<=B4:

scoreB+=random.choice(list1)if random.random()<=B5:

scoreB+=random.choice(list1)if scoreA>scoreB:

t1+=1

elif scoreA

t2+=1

else:

t1,t2=overtime(A1,A2,A3,A4,A5,B1,B2,B3,B4,B5)returnt1,t2defalysis(n,teamA,teamB):print("模拟竞赛分析开始,共模拟{}场比赛".format(n))print("团队A获得{}场胜利,共占比{:.2f}%".format(teamA,teamA/n*100))print("团队B获得{}场胜利,共占比{:.2f}%".format(teamB,teamB/n*100))print("分析完毕")print()defalysis1(n,teamA,teamB):print("模拟竞赛分析开始,共模拟{}场比赛".format(n))print("团队C获得{}场胜利,共占比{:.2f}%".format(teamA,teamA/n*100))print("团队D获得{}场胜利,共占比{:.2f}%".format(teamB,teamB/n*100))print("分析完毕")print()defalysis2(n,teamA,teamB):print("模拟竞赛分析开始,共模拟{}场比赛".format(n))print("决赛队伍1获得{}场胜利,共占比{:.2f}%".format(teamA,teamA/n*100))print("决赛队伍2获得{}场胜利,共占比{:.2f}%".format(teamB,teamB/n*100))print("分析完毕")print()defmain():

x=1bsxx()while x==1:print("开始模拟请按1 结束程序请按2")

i=eval(input())if i==1:

x1=x2=x3=x4=0print("队伍A:队伍B")

A1,A2,A3,A4,A5,B1,B2,B3,B4,B5,n=getinput()

teamA,teamB=allgame(A1,A2,A3,A4,A5,B1,B2,B3,B4,B5,n)

alysis(n,teamA,teamB)print("队伍C:队伍D")

C1,C2,C3,C4,C5,D1,D2,D3,D4,D5,m=getinput()

teamC,teamD=allgame(C1,C2,C3,C4,C5,D1,D2,D3,D4,D5,m)

alysis1(m,teamC,teamD)if teamA>teamB:print("队伍A晋级")

m1,m2,m3,m4,m5=A1,A2,A3,A4,A5

x1=1

else:print("队伍B晋级")

m1,m2,m3,m4,m5=B1,B2,B3,B4,B5

x2=1

if teamC>teamD:print("队伍C晋级")

n1,n2,n3,n4,n5=C1,C2,C3,C4,C5

x3=1

else:print("队伍D晋级")

n1,n2,n3,n4,n5=D1,D2,D3,D4,D5

x4=1num1,num2=allgame(m1,m2,m3,m4,m5,n1,n2,n3,n4,n5,1000)

alysis2(1000,num1,num2)if num1>num2:if x1==1:print("队伍A取得胜利")elif x2==1:print("队伍B取得胜利")else:if x3==1:print("队伍C取得胜利")elif x4==1:print("队伍D取得胜利")print()elif i==2:break

else:print("输入错误,请重试")

main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值