乒乓球比赛
作者:互联网
import random def printIntro(): print("这个程序是模拟两个选手A和B的乒乓球科技竞赛=====13号=====") print("程序运行需要A和B的能力值(以0到1之间的小数表示)") def getInputs(): a = eval(input("输入选手A的能力值(0到1)")) b = eval(input("输入选手B的能力值(0到1)")) n = eval(input("模拟比赛的场次")) return a, b, n def simNGames(n, probA, probB): winsA, winsB = 0, 0 for i in range(n): while Win(winsA, winsB, n): scoreA, scoreB = simOneGame(probA, probB) if scoreA > scoreB: winsA += 1 else: winsB += 1 return winsA, winsB def Win(c, d, n): if c > int(n / 2 + 1) and (c - d) > 2: return False elif int(n / 2 + 1) and (d - c) > 2: return False else: return True def simOneGame(probA, probB): scoreA, scoreB = 0, 0 serving = "A" while not gameOver(scoreA, scoreB): if serving == "A": if random.random() < probA: scoreA += 1 else: serving = "B" else: if random.random() < probB: scoreB += 1 else: serving = "A" return scoreA, scoreB def gameOver(a, b): if a != b: if a == 11 or b == 11: return True elif a==10 or b ==10: if abs(a - b) < 2: return False else: return False def printSummary(winsA, winsB): n = winsA + winsB print("竞技分析开始,共模拟{}场比赛".format(n)) print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA, winsA / n)) print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB, winsB / n)) def main(): printIntro() probA, probB, n = getInputs() winsA, winsB = simNGames(n, probA, probB) printSummary(winsA, winsB) main()
标签:winsB,winsA,return,比赛,probB,乒乓球,probA,def 来源: https://www.cnblogs.com/wprgogogo/p/15550928.html