球队比赛预测

一,乒乓球预测:

比赛规则:(1)一局比赛:在一局比赛中,先得11分的一方为胜方:10平后,先多得2分的一方为胜方。

(2)一场比赛:单打的淘汰赛为七局四胜制,双打淘汰赛或团体赛为五局三胜制

解答:1、将体育竞技分析分解为以下几个小步骤

1.1打印程序的介绍性信息式

1.2获得程序运行参数:probA(A的能力值),probB(B的能力值),n(比赛场次)

1.3利用球员AB的能力值,模拟n场比赛

1.4输出球员AB获胜的场次及概率

1.5用pyinstaller打包可执行文件

2、将各个步骤定义成函数来实现:

3.1主体函数:

1 def main():
2     printIntro()
3     probA, probB, n = printInputs()
4     winsA, winsB = simNGames(n, probA, probB)
5     printSummary(winsA, winsB)

3.2自定义函数:

 1 #打印程序介绍信息
 2 def printIntro():
 3     print("19信1 002号李源淇")
 4     print("这个程序模拟两个选手A和B的乒乓球比赛")
 5     print("程序运行需要A和B的能力值(以0到1之间的小数表示)")
 6
 7 #获得程序运行参数
 8 def printInputs():
 9     a = eval(input("请输入选手A的能力值(0-1): "))
10     b = eval(input("请输入选手B的能力值(0-1): "))
11     n = eval(input("模拟比赛的场次: "))
12     return a, b, n
13
14 # 进行N场比赛
15 def simNGames(n, probA, probB):
16     winsA, winsB = 0, 0
17     for i in range(n):
18         for j in range(7):           #进行7局4胜的比赛
19             scoreA, scoreB = simOneGame(probA, probB)
20             if scoreA > scoreB:
21                 winsA += 1
22             else:
23                 winsB += 1
24     return winsA,winsB
25
26
27  #进行一场比赛
28 def simOneGame(probA, probB):
29     scoreA, scoreB = 0, 0           #初始化AB的得分
30     serving = "A"
31     while not gameOver(scoreA, scoreB):     #用while循环来执行比赛
32         if scoreA==10 and scoreB==10:
33             return(simOneGame2(probA,probB))
34         if serving == "A":
35             if random() < probA:            ##用随机数生成胜负
36                 scoreA += 1
37             else:
38                 serving="B"
39         else:
40             if random() < probB:
41                 scoreB += 1
42             else:
43                 serving="A"
44     return scoreA, scoreB
45
46 def simOneGame2(probA,probB):
47     scoreA,scoreB=10,10
48     serving = "A"
49     while not gameOver2(scoreA, scoreB):
50         if serving == "A":
51             if random() < probA:
52                 scoreA += 1
53             else:
54                 serving="B"
55         else:
56             if random() < probB:
57                 scoreB += 1
58             else:
59                 serving="A"
60     return scoreA, scoreB
61
62 #比赛结束
63 def gameOver(a,b):               #正常比赛结束
64     return a==11 or b==11
65 def gameOver2(a,b):              #进行抢12比赛结束
66    if abs((a-b))>=2:
67        return a,b
68
69
70 #输出数据
71 def printSummary(winsA, winsB):
72     n = winsA + winsB
73     print("竞技分析开始,共模拟{}场比赛".format(n))
74     print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA, winsA/n))
75     print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB, winsB/n))

3.3合并:

 1 from random import random
 2
 3 #打印程序介绍信息
 4 def printIntro():
 5     print("19信计2班23号邓若言")
 6     print("这个程序模拟两个选手A和B的乒乓球比赛")
 7     print("程序运行需要A和B的能力值(以0到1之间的小数表示)")
 8
 9 #获得程序运行参数
10 def printInputs():
11     a = eval(input("请输入选手A的能力值(0-1): "))
12     b = eval(input("请输入选手B的能力值(0-1): "))
13     n = eval(input("模拟比赛的场次: "))
14     return a, b, n
15
16 # 进行N场比赛
17 def simNGames(n, probA, probB):
18     winsA, winsB = 0, 0
19     for i in range(n):
20         for j in range(7):           #进行7局4胜的比赛
21             scoreA, scoreB = simOneGame(probA, probB)
22             if scoreA > scoreB:
23                 winsA += 1
24             else:
25                 winsB += 1
26     return winsA,winsB
27
28
29  #进行一场比赛
30 def simOneGame(probA, probB):
31     scoreA, scoreB = 0, 0           #初始化AB的得分
32     serving = "A"
33     while not gameOver(scoreA, scoreB):     #用while循环来执行比赛
34         if scoreA==10 and scoreB==10:
35             return(simOneGame2(probA,probB))
36         if serving == "A":
37             if random() < probA:            ##用随机数生成胜负
38                 scoreA += 1
39             else:
40                 serving="B"
41         else:
42             if random() < probB:
43                 scoreB += 1
44             else:
45                 serving="A"
46     return scoreA, scoreB
47
48 def simOneGame2(probA,probB):
49     scoreA,scoreB=10,10
50     serving = "A"
51     while not gameOver2(scoreA, scoreB):
52         if serving == "A":
53             if random() < probA:
54                 scoreA += 1
55             else:
56                 serving="B"
57         else:
58             if random() < probB:
59                 scoreB += 1
60             else:
61                 serving="A"
62     return scoreA, scoreB
63
64 #比赛结束
65 def gameOver(a,b):               #正常比赛结束
66     return a==11 or b==11
67 def gameOver2(a,b):              #进行抢12比赛结束
68    if abs((a-b))>=2:
69        return a,b
70
71
72 #输出数据
73 def printSummary(winsA, winsB):
74     n = winsA + winsB
75     print("竞技分析开始,共模拟{}场比赛".format(n))
76     print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA, winsA/n))
77     print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB, winsB/n))
78
79 #主体函数
80 def main():
81     printIntro()
82     probA, probB, n = printInputs()
83     winsA, winsB = simNGames(n, probA, probB)
84     printSummary(winsA, winsB)
85
86 main()

结果预测如下:

球队比赛预测

3.4打包可执行文件:

打包的程序在上图路径可找到:

球队比赛预测

二、采用篮球比赛规则:

(1)篮球比赛由两个队参加,每队出场5名队员。每队目标是在对方球篮得分,并阻止对方队在本方球篮得分。

(2)篮球比赛由裁判员、记录台人员和技术代表(如到场)管理。

(3)被某队进攻的球篮是对方的球篮,由某队防守的球篮是本方的球篮。

(4)在比赛时间结束时得分较多的队,将是比赛的胜者。

分析:

大体相同,自定义函数稍作改动:

 1 # 进行N场比赛
 2 def simNGames(n, probA, probB):
 3     winsA, winsB = 0, 0
 4     for i in range(n):
 5         scoreA, scoreB = simOneGame(probA, probB)
 6         if scoreA > scoreB:
 7             winsA += 1
 8         else:
 9             winsB += 1
10     return winsA,winsB
11
12
13  #进行一场比赛
14 def simOneGame(probA, probB):
15     scoreA, scoreB = 0, 0           #初始化AB的得分
16     serving = "A"
17     while not gameOver(scoreA, scoreB):     #用while循环来执行比赛
18         if serving == "A":
19             if random() < probA:            ##用随机数生成胜负
20                 scoreA += 1
21             else:
22                 serving="B"
23         else:
24             if random() < probB:
25                 scoreB += 1
26             else:
27                 serving="A"
28     return scoreA, scoreB
29
30
31 #比赛结束
32 def gameOver(a,b):
33     return a>b or b>a

合并后结果如下:

球队比赛预测

Original: https://www.cnblogs.com/zzalovelyq/p/13181856.html
Author: 赖金明的大爹
Title: 球队比赛预测

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/575400/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • JBoss AS7(Application Server 7)的Standalone模式和Domain模式

    JBoss AS7(Application Server 7)支持两种引导模式:standalone和domain(域)。 Standalone模式对于很多应用,并不需要domai…

    Java 2023年6月6日
    093
  • sql开发规范

    SQL编写规约 SQL编写总原则 声明: 在没有把握或者根本没意识时,遵守规约可以保障你的程序不会”越界”。 所以规约并不代表一种最优方案或者某种教条。 当…

    Java 2023年6月9日
    089
  • Duplicate entry ** for key **

    Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplica…

    Java 2023年6月5日
    069
  • Mysql Explain 详解

    转载: http://www.cnitblog.com/aliyiyi08/archive/2008/09/09/48878.html Mysql Explain 详解 一.语法 …

    Java 2023年6月5日
    080
  • Python基础

    1.为什么学习Python 2.Python和其他语言的区别 从三个方面看Python 语言特点 语言类型 第三方库 3.Python的优势 4.Python的解释器种类? 5.p…

    Java 2023年6月7日
    071
  • Kafka基本理论

    基本特点 异步解耦、削峰填谷 Topic 分区/分区备份,集群互为某分区备份 broker控制,分区leader/follower 单分区保证消息时间顺序 offset,分区内消息…

    Java 2023年6月9日
    082
  • 基于协同过滤算法实现选课推荐系统

    1.系统功能 1、用户账户管理2、学生个人信息的查看与修改3、学生的网上选课与课程的评分4、教师个人信息的查看与修改5、教师对学生课程评价结果的查看6、管理员对学生信息与教师信息的…

    Java 2023年6月8日
    0171
  • 【GIT-精讲】从零玩转Git-基础理论

    关于版本控制 一、什么是版本控制 版本控制(Version Control Systems)版本控制(Revision control)是一种软件工程技巧 在开发的过程中,确保由不…

    Java 2023年6月9日
    088
  • 几种流行的AJAX框架jQuery,Mootools,Dojo,Ext JS的对比

    AJAX是 web2.0的基石,现在网上流行几种开源的AJAX框架,比如:jQuery,Mootools,Dojo,Ext JS等等,那么我们到底在什么情况下该使用那个框架? 让我…

    Java 2023年6月9日
    090
  • Hexo博客部署到腾讯云服务器全过程(Nginx,证书,HTTPS),你要的这里都有

    背景 说来也惭愧,博客已经搭建很久了,一直免费的部署在 Coding 和 Github Pages 上,前者迁移到腾讯云 Serverless,导致原有的配置始终有问题,没时间仔细…

    Java 2023年6月7日
    081
  • MySQL中的事务和MVCC

    本篇博客参考掘金小册——MySQL 是怎样运行的:从根儿上理解 MySQL 以及极客时间——MySQL实战45讲。 虽然我们不是DBA,可能对数据库没那么了解,但是对于数据库中的索…

    Java 2023年6月5日
    094
  • 22.1.18 前缀树,贪心算法,暴力递归,堆

    22.1.18 前缀树,贪心算法,暴力递归,堆 Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符…

    Java 2023年6月13日
    082
  • SQLyog连接MySQL8.0报2058错误的解决方法

    SQLyog连接MySQL8.0报2058错误的解决方法 原因: MySQL8.0密码的加密方法发生了改变 解决方法: 进入mysql执行以下语句 ALTER USER ‘root…

    Java 2023年6月5日
    073
  • 从零开始实现放置游戏(五)——实现后台管理系统(3)实现切面日志

    上一章,我们初步实现了后台管理系统的增删查改功能。然而还有很多功能不完善。这一章,我们先把系统日志搭建起来,不管是生产问题排查,还是方便开发调试,日志都是必不可少的核心功能。所谓切…

    Java 2023年6月5日
    092
  • 碎碎念五九

    04.01 我曾有一台华硕 F8P,是本科毕业时哥哥给我买的。虽然有点笨重,却陪我度过了近十年。它陪我度过读研三年(学习技术基础和师兄们做项目)、找到第一份不错的工作及在阿里云度过…

    Java 2023年6月9日
    092
  • 计算机网络—应用层

    本文基于《计算机网络自定向下》以及作者在学习计算机网络的总结,且当作自我学习的笔记 计算机网络的三种交换方式 电路交换 报文交换 分组交换 电路交换 报文交换 分组交换之间的对比 …

    Java 2023年6月6日
    071
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球