python:学习自顶向下程序设计:竞技体育模拟

学习过程记录:

一,需求及框架:

二:程序代码:

 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()

程序运行结果如下:

猜你喜欢

转载自www.cnblogs.com/xier/p/10462266.html
今日推荐