zoukankan      html  css  js  c++  java
  • 球队比赛预测

    一,乒乓球预测:

    比赛规则:(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

    合并后结果如下:

  • 相关阅读:
    kafka 学习笔记
    awk命令详解
    apache 的 配置项
    Apache 的 httpd.conf 详解
    如何设置httpd-mpm-conf的参数
    apache 服务器概述--安装(一)
    centos 修改时区
    docker(三)docker镜像和镜像发布方法
    docker(二)部署docker容器虚拟化平台
    sql的存储过程使用详解--基本语法
  • 原文地址:https://www.cnblogs.com/zzalovelyq/p/13181856.html
Copyright © 2011-2022 走看看