Python 语言程序设计 顶层设计(第一阶段)举例

it2022-05-05  150

模拟n次比赛winsA, winsB = simNGames(n,probA,probB),输出球员A和B获胜比赛的次数和概率printSummary(winsA, sinsB)  

#matchSim.py from random import * def main(): printIntro() probA,probB,n = getInputs() winsA, winsB = simNGames(n,probA,probB) PrintSummary(winsA, winsB) def printIntro(): print('This program simulates a game between two') print('There are two players, A and B') print('Probability(a number between 0 and 1)is used') def getInputs(): a = eval(input('What is the prob.player A wins?')) b = eval(input('What is the prob.player B wins?')) n = eval(input('How many games to simulate?')) return a,b,n def simNGames(n,probA,probB): winsA = 0 winsB = 0 for i in range(n): scoreA,scoreB = simOneGame(probA,probB) if scoreA >scoreB:#判断A,B的分数 winsA = winsA + 1 else: winsB = winsB + 1 return winsA,winsB#返回A,B赢得比赛的次数 def simOneGame(probA,probB): scoreA = 0 scoreB = 0 serving = "A"#A发球 while not gameOver(scoreA,scoreB):#a==15 or b==15 直到一方15分,退出循环 if serving == "A": if random() < probA:#random()方法返回随机生成的一个实数,它在[0,1)范围内。 scoreA = scoreA + 1 else: serving = "B"#输了就由B发球 else: if random() < probB: scoreB = scoreB + 1 else: serving = "A"#输了就由A发球 return scoreA,scoreB#返回值为A,B的分数 def gameOver(a,b): return a==15 or b==15 def PrintSummary(winsA, winsB): n = winsA + winsB print('\nGames simulated:%d'%n) print('Wins for A:{0}({1:0.1%})'.format(winsA,winsA/n)) print('Wins for B:{0}({1:0.1%})'.format(winsB,winsB/n)) if __name__ == '__main__': main()

 


最新回复(0)