模拟体育竞技

  1. 排球训练

为了使用方便可以安装pyinstaller来方便自己使用

在cmd下输入

pip install pyinstaller

就可以自动安装

目的:模仿不同的两个队伍进行模拟比赛

原理:通过输入各自的能力值(Ⅰ),模拟比赛的进行( P ),最后输出模拟的结果( O )

P 简介:通过产生随机数得到每局比赛的难度,若小于能力值则表示赢得本局比赛,反之输掉本局比赛。

规则:① 每场比赛采用 5局3胜制。

② 前四局采用25分制,每个队只有在赢得至少25分,且同时超过对方2分时才胜一局。

③ 决胜局(第五局)采用15分制,先获得15分,且同时超过对方2分为胜。

# -*- coding: utf-8 -*-
"""
Created on Sun May 12 23:15:03 2019

@author:zyp
"""

import random
import os
def printInfo():
    print("zyp的这个程序模拟两个选手A和B的某种竞技比赛 : ")
    print("需要A和B的能力值(以0到1之间的小数表示):")
def getInputs():
    proA=eval(input("请输入选手A的能力值(0-1):"))
    proB=eval(input("请输入选手B的能力值(0-1):"))
    n=eval(input("模拟比赛的场次:"))
    return proA,proB,n
def simNGames(proA, proB, n):
    countA,countB=0,0
    for i in range(n):          
        if SimOneGame(proA, proB)==1:     
            countA+=1
        else:       
            countB+=1
    return countA, countB
def SimOneGame(proA, proB):
    temp=0.5
    while temp==0.5:
        temp=random.random()
    if temp<0.5:
        serve="A"  
    else:
        serve="B"
    setA,setB=0,0
    while not gameOver(setA,setB):
        scoreA,scoreB=0, 0       
        while not setOver(scoreA, scoreB,setA+setB+1):      
            if serve=="A":
                if random.random()<proA:      
                    scoreA+=1
                else:
                    scoreB+=1
                    serve="B"
            else:
                if random.random()<proB:      
                    scoreB+=1
                else:
                    scoreA+=1
                    serve="A"
 
        if scoreA>scoreB:
            setA+=1
        else:
            setB+=1
    return (1 if (setA > setB) else 0)
def setOver(scoreA, scoreB,sets):
    if sets==5:         
        if scoreA>=15 or scoreB>=15:
            if(abs(scoreA-scoreB)>=2):      
                return True
            else:       
                return False
        else:
            return False
    else:           
        if scoreA>=25 or scoreB>=25:
            if(abs(scoreA-scoreB)>=2):       
                return True
            else:
                return False
        else:       
            return False
def gameOver(setA,setB):
    if setA==3 or setB==3:      
        return True
    else:
        return False
def printSummary(countA, countB):
    print("选手A获胜{0}场比赛,占比{1:.2f}%".format(countA, countA/(countA + countB)*100))
    print("选手B获胜{0}场比赛,占比{1:.2f}%".format(countB, countB/(countA + countB)*100))
if __name__ == "__main__":
    printInfo()
    proA, proB, n = getInputs()
    print("竞技分析开始,共模拟{}场比赛".format(n))
    countA, countB = simNGames(proA, proB, n)
    printSummary(countA, countB)

 结果

  1. 足球训练

与排球相似的设计

此代码与上述主要不同之处在于: GameOver(),其他函数都类似

3.晋级模拟

猜你喜欢

转载自www.cnblogs.com/z2273533704/p/10872999.html