from random import random def printTntro(): print("typist : 23") print("模拟比赛") print("需要A和B的能力值(以0到1之间的小数表示)") def getInputs(): a = eval(input("请输入A的能力值(0-1):")) b = eval(input("请输入B的能力值(0-1):")) return a,b def printSummary(winsA,winsB): if winsA==2: print("A获胜") return True else: print("B获胜") return False def gameOver(a,b): return a==11 or b==11 def simOneGame(probA,probB): scoreA,scoreB = 0,0 s1,s2 = 0,0 serving = ‘A‘ while not gameOver(scoreA,scoreB): if scoreB==scoreA and scoreA==10: while not s1==2 or s2==2: if serving == ‘A‘: if random()<probA: serving = ‘B‘ else: s2 += 1 else: if random()<probB: serving = ‘A‘ else: s1 += 1 if serving == ‘A‘: if random()<probA: serving = ‘B‘ else: scoreB += 1 else: if random()<probB: serving = ‘A‘ else: scoreA += 1 if s1==2: s2=0 else: s1=0 return scoreA+s1,scoreB+s2 def simNGames(probA,probB): winsA,winsB = 0,0 for i in range(3): scoreA,scoreB = simOneGame(probA,probB) print("第{}局".format(i+1)) print("{} --- {}".format(scoreA,scoreB)) if scoreA>scoreB: winsA += 1 if winsA==2: break else: winsB += 1 if winsB==2: break return winsA,winsB class player: def __init__(self,name,prob): self.name = name self.prob = prob def gameBetwen(pA,pB): print(‘参赛双方:‘+pA.name + ‘-‘ + pB.name) winsA, winsB = simNGames(pA.prob, pB.prob) if printSummary(winsA, winsB): return True else: return False def main(): printTntro() playerA = player(input(‘输入该选手名字:‘), eval(input(‘输入该选手的能力值:‘))) playerB = player(input(‘输入该选手名字:‘), eval(input(‘输入该选手的能力值:‘))) playerC = player(input(‘输入该选手名字:‘), eval(input(‘输入该选手的能力值:‘))) playerD = player(input(‘输入该选手名字:‘), eval(input(‘输入该选手的能力值:‘))) players = [playerA,playerB,playerC,playerD] scores = [0,0,0,0] for i in range(4): for j in range(4-i-1): if gameBetwen(players[i],players[i+j+1]): scores[i] += 1 else: scores[i+j+1] += 1 print(‘总分如下:‘) for score in scores: print(score) main()
原文:https://www.cnblogs.com/eastlord/p/14022494.html