模拟体育竞技
一、模拟排球体育竞技
代码如下:
# -*- coding: utf-8 -*- """ Created on Mon May 13 16:37:13 2019 @author: AMAO """ #e15.1MatchAnalysis.py from random import random def printIntro():#打印程序的介绍性信息 print("amao 12号程序模拟两个选手A和B的乒乓球竞技比赛") print("amao 12号程序运行需要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):#利用A,B的的能力值模拟一局比赛 winsA,winsB=0,0 for i in range(n): pingpangA,pingpangB=simOneGame(probA,probB)#simOneGame函数用于模拟每次打球得分 if(pingpangA>pingpangB):#计数循环,记录每个成员赢了分 winsA+=1 else: winsB+=1 if(winsA-winsB==2 and winsA>=10 and winsB>=10): break elif(winsB-winsA==2 and winsA>=10 and winsB>=10): break elif (winsA==11 and winsB<10 )or (winsB==11 and winsA<10): break return winsA,winsB def simOneGame(probA,probB):#用于模拟一次打球 pingpangA,pingpangB=0,0 serving="A"#先由A发球 if(serving=='A'): if random() < probA:#通过随机数和概率确定发球放是否赢得比分(random()<prob) pingpangA += 1#若A赢得比分,则发球权不变 else: serving='B'#反之发球权给B else: if random() < probB: pingpangB += 1 else: serving="A" return pingpangA,pingpangB def WholeGame(n,probA,probB):#用于模拟一场完整的球赛 c=eval(input("单人淘汰赛请输入1,团体或双人淘汰赛请输入2:"))#单人赛采取七局两胜制,团体或双人采取五局三胜制 if c==1: I,J,G=0,0,7 for i in range(G): print("第{}局比赛".format(i+1))#打印出每局比赛的结果 winsA,winsB=simNGames(n,probA,probB) printsummary(winsA,winsB) if winsA>winsB: I+=1 elif winsA<winsB: J+=1 if (I==4 and J<4) or(J==4 and I<4): break print("最终结果如下:")#打印最终结果 print("选手A总共获胜{}局比赛,占比{:0.1%}".format(I,I/G)) print("选手B总共获胜{}局比赛,占比{:0.1%}".format(J,J/G)) if c==2: I,J,G=0,0,5 for i in range(G): print("第{}局比赛:".format(i+1))#打印每局比赛结果 winsA,winsB=simNGames(n,probA,probB) printsummary(winsA,winsB) if winsA>winsB: I+=1 elif winsA<winsB: J+=1 if (I==3 and J<3) or(J==3 and I<3): break print("最终结果如下:")#打印最终比赛结果 print("团队A总共获胜{}局比赛,占比{:0.1%}".format(I,I/G)) print("团队B总共获胜{}局比赛,占比{:0.1%}".format(J,J/G)) def printsummary(winsA,winsB):#输出A,B获胜的比赛局次及概率 n=winsA+winsB print("竞技分析开始,共比赛{}次".format(n)) print("A得分为{},占比{:0.1%}".format(winsA,winsA/n)) print("B得分为{},占比{:0.1%}\n".format(winsB,winsB/n)) def main(): printIntro() probA,probB,n = getInputs() WholeGame(n,probA,probB) main()
运行结果如下:
二、程序打包
打包成功生成exe文件