学习过程记录:
一,需求及框架:
二:程序代码:
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,n 19 20 def gameover(scoreA,scoreB): #任意一方比分达到15球,结束本局比赛 21 return scoreA == 15 or scoreB == 15 22 23 def simOneGame(probA,probB): #模拟单局比赛,15球一局,输球则换发 24 scoreA,scoreB = 0,0 25 serving = "A" #这里是赋值,不是等于(提醒自己) 26 while not gameover(scoreA,scoreB): 27 if serving == "A": 28 if random() < probA: 29 scoreA += 1 30 else: 31 serving = "B" 32 else: 33 if random() < probB: 34 scoreB += 1 35 else: 36 serving = "A" 37 return scoreA,scoreB 38 39 def simNGames(n,probA,probB): #模拟n场比赛,返回选手双方输赢场次 40 winsA,winsB = 0,0 41 for i in range(n): 42 a,b = simOneGame(probA,probB)#模拟每一场比赛,都要调用这个单场的 43 if a > b: #函数计算随机结果 44 winsA += 1 45 else: 46 winsB += 1 47 return winsA,winsB 48 def printSummary(winsA,winsB): 49 summ = winsA + winsB 50 print("模拟{}场比赛".format(summ)) 51 print("选手A胜{}场,胜率为{:0.1%}".format(winsA,winsA/summ)) 52 print("选手B胜{}场,胜率为{:0.1%}".format(winsB,winsB/summ)) 53 main()
程序运行结果如下: