比赛模拟程序设计
模拟体育竞技分析:
a.采用乒乓球比赛规则(学号尾号为0,1,2,3同学必做及格题)。
(即:一局比赛:在一局比赛中,先得11分的一方为胜方;10平后,先多得2分的一方为胜方。
一场比赛:单打的淘汰赛采用七局四胜制,双打淘汰赛和团体赛采用五局三胜制。)
博客基本要求:
参考书上223-224。或者https://blog.csdn.net/sxingming/article/details/51235650
https://blog.csdn.net/qq_40855366/article/details/81177203
https://blog.csdn.net/qq_40390825/article/details/82467008
1.打印程序的介绍性信息式(要求包括你们学号后两位信息)
2.输入I(input):两个球员(球队)的能力值,模拟比赛的次数
3.处理P(process):模拟比赛过程
4.输出O(output):两个球员(球队)获胜的概率(输出谁做的结果截图)
5. 运用pyinstaller打包可以执行的文件。
(2)采用篮球或者足球规则模拟比赛,分析体育竞技规则,模拟比赛。(良好),基本要求同上。
(3)采用乒乓球、羽毛球、篮球、足球等规则中的一种。同时采用循环赛或者晋级赛形式,模拟分析4个队及以上体育竞技,并输出排名。建议可以采用面向对象方法或者改动上面程序。参考面向对象:https://www.cnblogs.com/wangmo/p/7751199.html
输入:
1 from random import random 2 print("学号后两位03") 3 def printIntro(): 4 print("这个程序模拟两个选手A和B的某种竞技比赛") 5 print("程序运行需要A和B的能力值(以0到1之间的小数表示)") 6 7 def getInputs(): 8 a = eval(input("请输入选手A的能力值(0-1): ")) 9 b = eval(input("请输入选手B的能力值(0-1): ")) 10 n = eval(input("模拟比赛的场次: ")) 11 return a, b, n 12 13 def simNGames(n, probA, probB): 14 winsA, winsB = 0, 0 15 for i in range(n): 16 scoreA, scoreB = simOneGame(probA, probB) 17 if scoreA > scoreB: 18 winsA += 1 19 else: 20 winsB += 1 21 return winsA, winsB 22 23 def gameOver(a, b): 24 return a == 15 or b == 15 25 26 def simOneGame(probA, probB): 27 scoreA, scoreB = 0, 0 28 serving = "A" 29 while not gameOver(scoreA, scoreB): 30 if serving == "A": 31 if random() < probA: 32 scoreA += 1 33 else: 34 serving="B" 35 else: 36 if random() < probB: 37 scoreB += 1 38 else: 39 serving="A" 40 return scoreA, scoreB 41 42 def onegamewin(pA, pB): 43 scoreA, scoreB = 0, 0 44 if scoreA == 11 and scoreB < 10: 45 scoreA = 1 46 scoreB = 0 47 elif scoreB == 11 and scoreA < 10: 48 scoreB = 1 49 scoreA = 0 50 while(scoreA > 10 and scoreB > 10): 51 if scoreA - scoreB == 2: 52 scoreA = 1 53 scoreB = 0 54 elif scoreB - scoreA == 2: 55 scoreA = 0 56 scoreB = 1 57 return scoreA, scoreB 58 59 def printSummary(winsA, winsB): 60 n = winsA + winsB 61 print("竞技分析开始,共模拟{}场比赛".format(n)) 62 print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA, winsA/n)) 63 print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB, winsB/n)) 64 def winner(winsA, winsB, n): 65 if winsA/n > 4/7: 66 print("选手A获胜") 67 elif winsB/n > 4/7: 68 print("选手B获胜") 69 70 def main(): 71 printIntro() 72 probA, probB, n = getInputs() 73 pA, pB = simOneGame(probA, probB) 74 winsA, winsB = simNGames(n, probA, probB) 75 printSummary(winsA, winsB) 76 winner(winsA, winsB, n) 77 main()
输出: