学习过程记录:
一,需求及框架:
二:程序代码:
1 #sports.py 2 from random import random 3 4 def main(): #熟悉函数的调用 5 printInfo() 6 probA,probB,n = getInputs() 7 winsA,winsB = simNGames(n,probA,probB) 8 printSummary(winsA,winsB) 9 10 def printInfo():11 print("本程序是竞技体育模拟分析系统")12 print("需要输入选手双方的能力值(0到1之间的小数)")13 14 def getInputs():15 a = eval(input("输入选手A的能力值(0到1的小数):"))16 b = eval(input("输入选手B的能力值(0到1的小数):"))17 n = eval(input("输入比赛场次:"))18 return a,b,n19 20 def gameover(scoreA,scoreB): #任意一方比分达到15球,结束本局比赛21 return scoreA == 15 or scoreB == 1522 23 def simOneGame(probA,probB): #模拟单局比赛,15球一局,输球则换发24 scoreA,scoreB = 0,025 serving = "A" #这里是赋值,不是等于(提醒自己)26 while not gameover(scoreA,scoreB):27 if serving == "A":28 if random() < probA:29 scoreA += 130 else:31 serving = "B"32 else:33 if random() < probB:34 scoreB += 135 else:36 serving = "A"37 return scoreA,scoreB 38 39 def simNGames(n,probA,probB): #模拟n场比赛,返回选手双方输赢场次40 winsA,winsB = 0,041 for i in range(n):42 a,b = simOneGame(probA,probB)#模拟每一场比赛,都要调用这个单场的43 if a > b: #函数计算随机结果44 winsA += 145 else:46 winsB += 147 return winsA,winsB48 def printSummary(winsA,winsB):49 summ = winsA + winsB50 print("模拟{}场比赛".format(summ))51 print("选手A胜{}场,胜率为{:0.1%}".format(winsA,winsA/summ))52 print("选手B胜{}场,胜率为{:0.1%}".format(winsB,winsB/summ))53 main()
程序运行结果如下: