Yleina

导航

python博客作业2

采用乒乓球比赛规则

一局比赛:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬       在一局比赛中,先得11分的一方为胜方;10平后,先多得2分的一方为胜方。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬一场比赛:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭      单打的淘汰赛采用七局四胜制,双打淘汰赛和团体赛采用五局三胜制。

 1 from random import random
 2  
 3 def printInfo():    # 打印程序介绍信息
 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('模拟比赛场次(单打淘汰赛为5场,双打淘汰赛为7场):'))
11     return a, b, n
12  
13 def simOneGame(probA, probB):    # 进行一场比赛
14     scoreA, scoreB = 0, 0   # 初始化AB的得分
15     serving = 'A'         # 首先由A发球
16     while not gameOver(scoreA, scoreB):  #用while循环来执行比赛
17         if serving == 'A':
18             if random() < probA:   # random() 方法返回随机生成的一个实数,它在[0,1)范围内。
19                 scoreA += 1     # 用随机数来和能力值比较从而分出胜负
20             else:
21                 serving = 'B'
22         else:
23             if random() < probB:
24                 scoreB += 1
25             else:
26                 serving = 'A'
27     return scoreA, scoreB
28  
29 def simNGames(n, probA, probB):    #进行N场比赛
30     winsA, winsB = 0, 0    # 初始化AB的胜场数
31     for i in range(n):
32         scoreA, scoreB = simOneGame(probA, probB)
33         if scoreA > scoreB:
34             winsA += 1
35         else:
36             winsB += 1
37     return winsA, winsB
38  
39 def gameOver(c, d):    #比赛结束
40     return c==11 or d==11
41  
42 def printSummary(n ,winA, winB):    #打印比赛结果
43     print('竞技分析开始,共模拟{}场比赛'.format(n))
44     print('选手A获胜{}场比赛,占比{:.2f}%'.format(winA, winA/n*100))
45     print('选手B获胜{}场比赛,占比{:.2f}%'.format(winB, winB / n * 100))
46 def main():
47     printInfo()
48     probA, probB, n =getInputs()
49     winsA, winsB = simNGames(n, probA, probB)
50     printSummary(n, winsA, winsB)
51  
52 print("\n学号:21\n")53 main()

输出结果:

单打淘汰赛5场:

 双打淘汰赛7场:

 

posted on 2023-11-19 19:57  伊蕾娜。  阅读(12)  评论(0编辑  收藏  举报