python 足球模拟
# 比赛规则: # 1. 比赛分为两场,每场为45分钟 # 上半场: 一方挑选进攻的球门,另一方获得开球权 # 下半场: 互换攻守方向,上半场没获得开球权的一方获得开球权 # 2. 在进球后开球时,开球方为失球一方 # 3. 在没有违反任何比赛规则时,进攻球队得分。 # 4. 比赛结束时得分多的球队获胜,如果两队得分相同或均未得分,比赛为平局。 from random import random, randint from time import time def printInfo(): ''' function: 打印程序的介绍信息 ''' print("{:*^70}".format("产品简介")) print("足球竞技模拟") print("通过输入2个队伍A和B的能力值(0到1之间的小数表示),能够模拟多次2个队伍A和B的排球竞技比赛,从而得出各自的胜率!") print("06号詹曼青") print("{:*^70}".format("模拟开始")) def getInputs(): ''' function: 获得用户输入的参数 ''' probA = eval(input("请输入队伍A的能力值(0~1):")) probB = eval(input("请输入队伍B的能力值(0~1):")) n = eval(input("请输入需要模拟比赛的场次数:")) return probA, probB, n def printResult(n, via, winsA, winsB): ''' function: 输出模拟比赛的结果 ''' print("{:*^70}".format("模拟结束")) print("竞技分析开始,共模拟{}场比赛。".format(n)) print(">>>队伍A获胜{}场比赛,占比{:0.1%}".format(winsA,winsA/n)) print(">>>队伍B获胜{}场比赛,占比{:0.1%}".format(winsB,winsB/n)) print(">>>两队平局{}场,占比{:0.1%}".format(via,via/n)) def simNGames(n, probA, probB): ''' function: 模拟n场比赛 n: 模拟n场比赛 probA, probB: 分别为队伍A和B的能力值 winsA, winsB: 队伍A和B赢得比赛的场数,总共n场 ''' via, winsA, winsB = 0, 0, 0 for _ in range(n): scoreA, scoreB = simOneGame(probA, probB) if scoreA == scoreB: via += 1 elif scoreA > scoreB: winsA += 1 else: winsB += 1 return via, winsA, winsB def simOneGame(probA, probB): ''' function: 模拟一场比赛, 分上半场和下半场 probA, probB: 分别为队伍A和B的能力值 scoreA, scoreB: 分别为队伍A和B一场比赛的分数 return: 返回队伍A和B在本场比赛中获得的分数 ''' winA, winB = 0, 0 for N in range(2): scoreA, scoreB = simAGame(N, probA, probB) winA += scoreA winB += scoreB return winA, winB def simAGame(N, probA, probB): ''' function: 模拟半场比赛 probA, probB: 分别为队伍A和B的能力值 scoreA, scoreB: 分别为队伍A和B半场比赛的分数 return: 返回队伍A和B在本半场比赛中获得的分数 ''' scoreA, scoreB = 0, 0 if N == 0: serving = 'A' # 发球方 else: serving = 'B' for _ in range(gameOver()): if serving == 'A': if random() < probA: scoreA += 1 serving = 'B' else: if random() < probB: scoreB += 1 serving = 'A' return scoreA, scoreB def gameOver(): ''' function: 定义半场比赛的结束条件 通过randint产生一个随机数作为半场比赛的回合数, 若达到半场比赛的回合数则结束比赛 return: 若比赛结束的条件成立返回真,否则为假 ''' return randint(3, 10) if __name__ == "__main__": printInfo() probA, probB, n = getInputs() Time = time() via, winsA, winsB = simNGames(n, probA, probB) print("模拟用时: {:.1f}s".format(time()-Time)) printResult(n, via, winsA, winsB)
运行结果: