模拟体育竞技分析

一、下面是一个体育竞技模拟,就是输入比赛队伍的平均能力值,就可以判断出比赛的输赢。

下面先来说一下比赛规则:(以兵乓球比赛规则为例)

1、在一局比赛中,先得11分的一方为胜方,10平后,先多得2分的一方为胜方。
2、强调:一定要有一人达到十分后,领先2分,才算胜方。如14:15不行,8:5也不行,但11:13是13分的为胜方
并且输入n为多少,就可以模拟多少场比赛,并输出各个队伍的胜利场次。

下面来看一段代码

 1 # -*- coding: utf-8 -*-
 2 from random import random
 3 def printIntro():
 4     print("这个程序模拟两个选手A和B的兵乓球比赛")
 5     print("程序运行需要A和B选手的能力值(以0到1之间的小数表示)")
 6 def getInput():
 7     probA=eval(input("请输入选手A的能力值(0-1):"))
 8     probB=eval(input("请输入选手B的能力值(0-1):"))
 9     n=eval(input("模拟比赛场次:"))
10     return probA,probB,n
11 def simGames(n,probA,probB):     #比赛双方各自胜利的场次数
12     winsA,winsB=0,0
13     for i in range (n):
14         c=simGame(probA,probB)
15         if c=='A':
16             winsA+=1
17         else:
18             winsB+=1
19     return winsA,winsB
20 def simGame(probA,probB):         #判断一场比赛的胜方
21     winsA1,winsB1=0,0
22     for i in range(7):
23         scoreA,scoreB=simoneGame(probA,probB)
24         if scoreA>scoreB:
25             winsA1+=1
26         else:
27             winsB1+=1      
28     if winsA1>=4:
29         return 'A'
30     return 'B'
31 def simoneGame(probA,probB):     #统计一场比赛下来的各自得分数
32     scoreA,scoreB=0,0
33     serving="A"
34     while not gameOver(scoreA,scoreB):
35         x=random()
36         if serving=="A":
37             if x < probA:
38                 scoreA+=1
39             else:
40                 serving="B"
41         else:
42             if x < probB:
43                 scoreB+=1
44             else:
45                 serving="A"
46     return scoreA,scoreB
47 def gameOver(a,b):            
48     if (a>=11 and b<11) or (b>=11 and a<11) or (a>9 and b>9 and ((a-b)>=2 or (b-a)>=2)):
49         return True
50     return False
51 def printsummary(winsA,winsB):
52     n=winsA+winsB
53     print("竞技开始分析,共模拟了{}场比赛".format(n))
54     print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA,winsA/n))
55     print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB,winsB/n))
56     print("分析人:Yong No.10")
57 def main():
58     printIntro()
59     probA,probB,n=getInput()
60     winsA,winsB=simGames(n,probA,probB)
61     printsummary(winsA,winsB)
62 main()    

上面代码要注意的是变量名要自己清楚,不能写错或者搞混,不然就很难找出bug。

可以观看其效果:

3、还有一个很有趣的实验就是利用pyinstaller库来打包程序,让程序可以独立执行,就像自己写了一个有趣的游戏要分享给同学玩,但是没有一定的软件是支持不了游戏的,这时就需要对程序进行打包,让其可独立执行。

下面来介绍一下pyinstaller库

安装:pyinstaller库需要在命令台(cmd)下用pip工具安装。

pip install pyinstaller

或者pip3 install pyinstaller。

或者官方网站:http://www.pyinstaller.org/

然后再输入文件路径。例如:pyinstaller game.py

执行完毕后,源文件所在目录将生成dist和build两个文件夹。其中,build目录是pyinstaller存储临时文件的目录,可以安全删除。最终的打包程序在dist内部的game目录里。

 注意事项:

文件路径中不能出现空格和英文句号;

源程序必须是UTF-8编码。

 pyinstaller 命令的常用参数:

来看看实现效果:

这样就完成了文件的独立运行!

二、下面以篮球的比赛规则

 1 # -*- coding: utf-8 -*-
 2 from random import random
 3 def printIntro():
 4     print("这个程序模拟两个队伍A和B的篮球比赛")
 5     print("程序运行需要A和B队伍的平均能力值(以0到1之间的小数表示)")
 6 def getInput():
 7     probA=eval(input("请输入队伍A的平均能力值(0-1):"))
 8     probB=eval(input("请输入队伍B的平均能力值(0-1):"))
 9     n=eval(input("模拟比赛场次:"))
10     return probA,probB,n
11 def Games(n,probA,probB):            #全部比赛场次的各胜方总数分析
12     A,B=0,0
13     for i in range(n):
14         a=fourGames(probA,probB)
15         if a=="A":
16             A+=1
17         else:
18             B+=1
19     return A,B
20 def fourGames(probA,probB):          #一场比赛的胜利方判断
21     scoreA,scoreB=0,0
22     for i in range(4):
23         scoreA,scoreB=onejieGame(probA,probB)
24     if scoreA>scoreB:
25         return 'A'
26     return 'B'
27 def onejieGame(probA,probB):         #一小节比赛的比分总结
28     scoreA,scoreB=0,0
29     serving="A"
30     while not gameOver(scoreA,scoreB):
31         a=random()
32         if serving=="A":
33             if a<probA:
34                 scoreA+=2
35             else:
36                 serving="B"
37         else:
38             if a<probB:
39                 scoreB+=2
40             else:
41                 serving="A"
42     return scoreA,scoreB
43 def gameOver(a,b):
44   return a==16 or b==16
45 def printsummary(A,B):
46     n=A+B
47     print("竞技开始分析,共模拟了{}场比赛".format(n))
48     print("选手A获胜{}场比赛,占比{:0.1%}".format(A,A/n))
49     print("选手B获胜{}场比赛,占比{:0.1%}".format(B,B/n))
50     print("分析人:Yong No.10")
51 def main():
52     printIntro()
53     probA,probB,n=getInput()
54     A,B=Games(n,probA,probB)
55     printsummary(A,B)
56 main()
57 input()

再来观看其效果:

打包的效果,也和上面一样,就是在打包时改一下文件名就可以了。

三、下面更高级的是晋级比赛(以四支队伍为例进行篮球比赛)

以下代码展示

 1 # -*- coding:utf-8 -*-
 2 from random import random
 3 def printIntro():
 4     print("这个程序模拟四支队伍A,B,C,D的篮球比赛,赛制采取晋级制")
 5     print("程序运行需要A,B,C,D队伍的平均能力值(以0到1之间的小数表示)")
 6 def getInput():
 7     probA=eval(input("请输入队伍A的平均能力值(0-1):"))
 8     probB=eval(input("请输入另一支队伍B的平均能力值(0-1):"))
 9     print("\n")
10     return probA,probB
11 def fourGames(x,y):          #一场比赛的胜利方判断
12     scoreA,scoreB=0,0
13     for i in range(4):
14         scoreA,scoreB=onejieGame(x,y)
15     if scoreA>scoreB:
16         return 'A'
17     return 'B'
18 def onejieGame(x,y):         #一小节比赛的比分总结
19     scoreA,scoreB=0,0
20     serving="A"
21     while not gameOver(scoreA,scoreB):
22         a=random()
23         if serving=="A":
24             if a<x:
25                 scoreA+=2
26             else:
27                 serving="B"
28         else:
29             if a<y:
30                 scoreB+=2
31             else:
32                 serving="A"
33     return scoreA,scoreB
34 
35 def gameOver(a,b):
36     return a==16 or b==16
37 def printmean(c):
38     print("竞技开始:")
39     print("经过激烈的比赛,最终队伍{}获得了比赛".format(c))
40     print("恭喜{}队伍晋级!".format(c))
41     print("\n")
42 printIntro()
43 x,y=getInput()
44 c=fourGames(x,y)
45 printmean(c)
46 print("请再次输入其余两支队伍的平均能力值")
47 x,y=getInput()
48 d=fourGames(x,y)
49 printmean(d)
50 print("晋级双方是{}和{}".format(c,d))
51 print("\n")
52 print("请输入两支晋级队伍平均能力值")
53 x,y=getInput()
54 e=fourGames(x,y)
55 print("恭喜{}获得本次比赛的总冠军!".format(e))

观看效果:

再看看独立执行的效果:

 好了,以上就是体育竞技的一些例子,有兴趣的童鞋可以去看看其他比赛的效果哈。

另外,以上的程序要想知道其结果是否合理或者条件是否正确,可以采用测试函数的方式对程序进行调试。例如:

以上面的gameOver函数为例,代码如下:

1 def gameOver(a,b):
2     if (a>=11 and b<11) or (b>=11 and a<11) or (a>9 and b>9 and ((a-b)>=2 or (b-a)>=2)):
3         return True
4     return False
5 try:
6     print(gameOver(11,10))
7 except:
8     print('Error')

再来看看测试的结果

返回是一个判断值,可以再更改其中的参数进行调试。

转载于:https://www.cnblogs.com/liyanyinng/p/10852790.html

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 采用乒乓球规则模拟比赛可以分析体育竞技规律。乒乓球比赛中,运动员需要具备快速反应、灵活移动、精准控制球的能力,同时还需要具备良好的心理素质和战术意识。这些都是体育竞技中常见的要素。 在比赛中,运动员需要根据对手的表现和自己的状态来调整战术,采取不同的进攻和防守策略。同时,比赛中也存在着一定的规则和裁判判罚,这些规则和判罚也会影响比赛的结果。 通过模拟乒乓球比赛,可以更好地理解体育竞技规律,包括技术、战术、心理素质和规则等方面。这有助于我们更好地认识和研究体育竞技,提高自己的竞技水平。 ### 回答2: 乒乓球是一项非常具有竞技性和戏剧性的体育项目。在乒乓球比赛中,运动员需要展现出高超的技术水平、优秀的身体素质和顽强的斗志。乒乓球规则的设计,不仅要求运动员在比赛中保持合理的体力和技术状态,更要求他们在紧张的比赛环境下,具备敏锐的分析和反应能力。 首先,乒乓球比赛中的规则设计体现了平衡和公正性。比如说,比赛双方必须在场地对角线上的相反位置发球,这样做可以保证下台球员有充足的时间准备应对对方的发球;又如说,比赛规定下台球员在发球时必须先接到对方的发球,这个规定可以让比赛双方的机会更加公平。 其次,乒乓球规则的设计要求运动员具备高超的技术水平。发球、接球、进攻、防守等动作都需要运动员精准而快速的完成,而这些技术动作的完成又只有经过长期的训练,并具备极高的技术要求,才能够完成。 最后,乒乓球比赛规则的设计还要求运动员具备强大的心理素质。比赛中双方都会遭受到对方强烈的攻击和压力,所以必须具备稳定的心理素质,以应对这种环境下的不确定性。 综上所述,乒乓球比赛规则的设计不仅考虑到参赛者的体力和技术素质,更丝毫不忽视运动员需要具备的心理素质。这样一方面保证了比赛之间的平衡、公正和竞争性,另一方面也符合体育竞技精神和规律。 ### 回答3: 乒乓球作为一项受欢迎的体育运动,其规则和竞技规律也被广泛研究和应用。采用乒乓球规则模拟比赛可以分析体育竞技的一些基本规律和特点。 首先,竞技规则的明确性是体育比赛中至关重要的一个方面。在乒乓球规则中,比赛双方需要共同遵守规则,确保比赛的公平性和合理性。这也意味着,能够获胜的不仅仅是运动员的技术水平,还包括其对规则的了解和遵守情况。这与其他运动项目类似,包括足球、篮球、网球等。 其次,在比赛过程中,技术的发挥和攻防能力的平衡也会对比赛结果产生影响。乒乓球比赛中,运动员需要灵活运用攻守技巧,不断地进行全方位的攻防和反攻,才能取得胜利。这种攻防平衡的情况在不同的运动项目中也是存在的,比如足球和篮球中需要进攻和防守,而网球中需要运动员在连续不停的回球之间掌握机会将球插入空档中。 最后,体育竞技规律中还包含着莫大的心理因素。在乒乓球比赛中,面对迫在眉睫的胜利将会让选手产生紧张和压力,可能会导致其出现失误,进而失去比赛的主动权。而对于心理承受能力和心理素质较强的运动员,他们通常能够在遇到比较紧急和困难的场面中保持冷静,并成功的挽救了比赛。这一点同样适用于其他类似的体育项目,需要选手具备很强的心理素质和心理承受能力。 综上所述,乒乓球规则通过模拟比赛的方式展现了竞技规律以及体育比赛中所涵盖的多方面因素。而选手们需要在技术,心理等方面进行全面的练习,才能在比赛场上表现出色,获得最终的胜利。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值