1.将羽毛球比赛分析分解为以下几个小步骤
1.1打印程序的介绍性信息式
1.2获得程序运行参数:A(A的能力值),B(B的能力值),n(比赛场次)
1.3利用球员AB的能力值,模拟n场比赛
1.4输出球员AB获胜的场次及概率
2.将各个步骤定义成函数来实现:
代码如下:
# -*- coding: utf-8 -*- """ Spyder Editor This is a temporary script file. author@foldline 学号:2018310143029 """ from random import * #顶层设计 def main(): printIntroduce()#打印程序的介绍信息 probabilityA,probabilityB,n=getInputs()#通过getsInputs函数来获取2个球员的能力值和比赛次数 winsA,winsB=simulateNGames(n,probabilityA,probabilityB)#通过simulateNGames()求得2个球员在n次比赛中获胜的次数 printSummary(winsA,winsB)#通过printSummary()来输出比赛的结果信息 #第二阶段 def printIntroduce(): print(\'学号:2018310143029\') print(\'这个程序模拟两个选手A和B的羽毛球竞技比赛\') print(\'程序运行需要A和B的能力值\') def getInputs(): a=eval(input(\'请输入选手A的能力值(0~1):\')) b=eval(input(\'请输入选手A的能力值(0~1):\')) n=eval(input(\'比赛胜利至少需要的局数:\')) return a,b,n def simulateNGames(n,probabilityA,probabilityB): \'\'\'定义球员A,B赢得比赛的次数,初始值为0, 通过for循环来模拟n次比赛 用simulateOneGame()来模拟一场比赛\'\'\' winsA,winsB=0,0 while not judge(n,winsA,winsB): \'\'\'返回本场比赛2个球员的得分,根据得分来确定本场比赛的胜负\'\'\' scoreA,scoreB=simulateOneGame(probabilityA,probabilityB) if scoreA>scoreB: winsA+=1 else: winsB+=1 return winsA,winsB def printSummary(winsA,winsB): n=winsA+winsB print(\'\n比赛开始,共模拟%d场比赛\'%n) print(\'选手A获胜{}场比赛,占比{:0.1%}\'.format(winsA,winsA/n)) print(\'选手B获胜{}场比赛,占比{:0.1%}\'.format(winsB,winsB/n)) #第三阶段 def simulateOneGame(probabilityA,probabilityB): \'\'\'每场比赛,2个球员的得分初始为0,设定每场比赛总是A先发球, 用random函数生成一个随机小数,范围在【0,1)内\'\'\' scoreA,scoreB=0,0 starting=\'A\' while not gameOver(scoreA,scoreB): if starting==\'A\': if random()<probabilityA: scoreA+=1 else: scoreB+=1 starting=\'B\' else: if random()<probabilityB: scoreB+=1 else: scoreB+=1 starting=\'A\' return scoreA,scoreB def gameOver(a,b): \'\'\'任意一方达到20分就结束比赛\'\'\' if a>29 or b>29: return True elif a>20 or b>20: if abs(a-b)>1: return True else: return False def judge(n,winsA,winsB): if winsA==n or winsB==n: return True else: return False main()
3.运行结果如图:
3.1.能力值高:
3.2.能力值低:
4.用pyinstaller打包可执行文件: