本文尝试采用面向对象的设计方法来进行排球比赛分析

排球比赛的基本规则如下:

前4局比赛采用25分制,每个队只有赢得至少25分,并同时超过对方2分时 ,才胜1局。

正式比赛采用5局3胜制,决胜局的比赛采用15分制,一队先得8分后,两队交换场区,按原位置顺序继续比赛到结束。

在决胜局(第五局)之比赛,先获15分并领先对方2分为胜。

下面就放出代码:

1 from random import *

2

3 #定义一个Info类,功能是打印介绍性信息,并且获得用户输入的两队伍能力值,模拟场次

4 class Info:

5 def __init__(self):

6 print('19信计2班15号模拟体育竞技程序')

7 print('这个程序是模拟两支队伍A和B的排球比赛')

8 print('程序运行需要A和B的能力值(以0到1之间的小数表示)')

9 def GetInput(self):

10 A = eval(input('请输入队伍A的能力值(0-1):'))

11 B = eval(input('请输入队伍B的能力值(0-1):'))

12 N = eval(input('模拟比赛场次:'))

13 return A, B, N

14

15 #定义了一个OneGame类,功能是用来完成一场5局3胜制的比赛

16 class OneGame:

17 def simOneGame(self, probA, probB):

18 A_win, B_win, count = 0, 0, 1

19 while not (A_win == 3 or B_win == 3):

20 serving = choice(['A', 'B']) #这里我选择的是随机开球方

21 scoreA, scoreB = 0, 0

22 while not OneGame.Gameover(count, scoreA, scoreB):

23 if serving == 'A':

24 if random() < probA:

25 scoreA += 1

26 else:

27 serving = 'B'

28 else:

29 if random() < probB:

30 scoreB += 1

31 else:

32 serving = 'A'

33 if scoreA > scoreB :

34 A_win += 1

35 else:

36 B_win += 1

37 if count == 5:

38 count = 1

39 count += 1

40 return A_win, B_win

41

42 @classmethod

43 def Gameover(self, count, scoreA, scoreB): #这个函数是用来判断比赛是否结束

44 if count < 5:

45 return (scoreA >= 25 or scoreB >= 25) and abs(scoreA - scoreB) >= 2

46 else:

47 return (scoreA >= 15 or scoreB >= 15) and abs(scoreA - scoreB) >= 2

48

49 #定义了一个NGame类,继承了OneGame的属性和方法,功能是完成N场5局3胜制比赛

50 class NGame(OneGame):

51 def simNGames(self, n, A, B):

52 winsA, winsB = 0, 0

53 for i in range(n):

54 win_numA, win_numB = self.simOneGame(A, B)

55 if win_numA > win_numB:

56 winsA += 1

57 else:

58 winsB += 1

59 return winsA, winsB

60

61 #定义了一个PrintSummary类,功能是打印比赛结果

62 class PrintSummary:

63 def __init__(self, N, winA, winB):

64 print('竞技分析开始,共模拟{}场比赛'.format(N))

65 print('队伍A获胜{}场比赛,占比{:.2f}%'.format(winA, winA/N * 100))

66 print('队伍B获胜{}场比赛,占比{:.2f}%'.format(winB, winB/N * 100))

67

68 def main():

69 match_info = Info() #创建一个Info对象

70 A, B, N = match_info.GetInput() #使用Info类的GetInput方法获得能力值和场次

71 match = NGame() #创建一个NGame对象

72 A_win, B_win = match.simNGames(N, A, B) #获得A, B两队获胜的比赛场数

73 PrintSummary(N, A_win, B_win) #打印比赛结果

74 input("please input any key to exit!")

75

76 main()

接着,我使用pyinstaller库对该代码进行打包,有两种方法:

(1)、在cmd控制台输入 pyinstaller -F (文件的绝对路径)再按回车即可。

成功打包后会出现XXX completed successfully,而且会有打包结束后产生的exe文件的路径显示,如:

(2)、在需要打包的文件的当前文件夹中,按Shift+鼠标右键会出现打开power shell的选项,如:

在Powershell窗口中输入 pyinstaller -F 文件名 即可打包,同样,打包成功后会出现conpleted successfully,并且直接在当前文件夹产生exe文件。

最后就是程序效果:

来源:https://www.cnblogs.com/Lincoln-Wong/p/12935890.html

python简单体育竞技模拟_Python 作业( 模拟体育竞技比赛 )相关推荐

  1. python简单的小程序_Python简单小程序---名片简易系统

    Python简单小程序---名片简易系统 主程序功能代码 import cards_tools while True: cards_tools.show_meun() action = int(inp ...

  2. python实用脚本 知乎_Python 爬虫模拟登陆知乎

    在之前写过一篇使用python爬虫爬取电影天堂资源的文章,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...

  3. python 突破b站验证码_Python爬虫模拟登陆哔哩哔哩(bilibili)并突破点选验证码功能...

    写在前面 今天带给大家一个突破点选验证码的案例,利用爬虫模拟登陆哔哩哔哩,并且把一些采坑的地方给大家强调一下! 一.需求分析 模拟登陆哔哩哔哩 网站链接: https://passport.bilib ...

  4. python简单好看的代码_Python新手写出漂亮的爬虫代码1

    初到大数据学习圈子的同学可能对爬虫都有所耳闻,会觉得是一个高大上的东西,仿佛九阳神功和乾坤大挪移一样,和别人说"老子会爬虫",就感觉特别有逼格,但是又不知从何入手,这里,博主给大家 ...

  5. python简单绘图教程视频_Python绘图的简单教程(I)-基本元素,python,一

    python绘图简单教程(一)--基本元素 一.理解面向对象 因为我们不需要自己设计一个代码库,只要知道面向对象的调用就可以了. 1)什么是类? 一类东西的抽象名词概括 比如汽车car,概括了许多具体 ...

  6. python简单数字游戏大全_python数字游戏,让你欲罢不能!

    今天的开胃菜,让我们来模拟一个酒桌上的数字游戏--拍七:从1到100轮流报数,每逢含有7和7的倍数的人要拍一下手. 实现起来相当简单,会打字的人都会写. for i in range(1,101): ...

  7. python 下载qq群文件_python作业/练习/实战:下载QQ群所有人的头像

    步骤与提示: 1.在腾讯群网页中进入任意一个群,获取相关信息,可以用postman是试一下,可以看到我们要的是mems里面的数据,需要获取到QQ号和群名片,如果没有群名片的话取昵称 2.根据QQ号下载 ...

  8. python简单单元测试示范卷_Python 单元测试的简单示例

    这篇文章主要为大家详细介绍了Python 单元测试的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 以前我是不 ...

  9. python简单爬虫入门一_Python简单爬虫入门二

    接着上一次爬虫我们继续研究BeautifulSoup 上一次我们爬虫我们已经成功的爬下了网页的源代码,那么这一次我们将继续来写怎么抓去具体想要的元素 首先回顾以下我们BeautifulSoup的基本结 ...

最新文章

  1. Ecplise中tomcat上运行HTML文件自动加载
  2. gunzip 和 unzip 解压文件到指定的目录
  3. get占位符传多个参数_未知环境下的Lidar概率占位栅格图(Occupancy Grid Map) Python代码实现...
  4. 马斯克豁出4300员工,参与新冠研究,论文登上Nature子刊
  5. 探测Windows2K/XP/2003本机系统信息
  6. python彩票分析_数字化场景应用平台加持,开课吧学员Python挑战赛秀出代码精彩...
  7. Sass--传一个不带值的参数
  8. Jenkins 关闭和重启实现方式.
  9. Linux下ARM开发环境搭建
  10. linux服务器安装caffe(无root权限)
  11. ovirt 双机_ovirt kvm嵌套虚拟化
  12. java基础总结06-常用api类-Object和Objects
  13. 阿里互联互通再下一城,开放生态缔造新的产业蓝海?
  14. Javascript解决音频audio在IOS系统下无法播放问题
  15. xynuoj 1919 三国志
  16. 重启Oracle数据库的操作步骤
  17. 上海交大 计算机科学家,世界顶尖科学家论坛丨上海交大计算机系教授俞凯:科研经费支持应少些“风险意识”...
  18. 【LeetCode-SQL】196. 删除重复的电子邮箱
  19. 网页聊天窗口的自动输入内容及自动发送
  20. 对未来的打算和本专业的认识

热门文章

  1. 手机通讯录丢失了怎么恢复?这几个方法有必要掌握,学会可一键恢复
  2. k8s dashboard安装
  3. parameter缩略语_常用参数缩写
  4. 巧用Hosts文件杀掉IE弹出窗口(转)
  5. 分解质因数 JAVA
  6. 光纤软件测试,20m光纤速度怎么测试 20m光纤速度测试方法【详解】
  7. 结束计算机进程的快捷键,结束进程快捷键是什么?Win7结束进程快捷键介绍
  8. PostgreSQL数据库之国际化语言支持学习总结
  9. Web项目中完成百度地图GPS定位
  10. 2017京东校招终结者问题