鱼C论坛

 找回密码
 立即注册
查看: 2288|回复: 0

[技术交流] 体育竞技分析

[复制链接]
发表于 2020-12-7 14:23:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
# 选手发球同时赢得比赛才得一分,发球但输掉比赛则换对手发球
# 先获得15分的选手获胜
import random as rd

def printInfo():
    print("这个程序模拟两个选手A和B的某种竞技比赛")
    print("程序运行需要A和B的能力值(以0到1之间的小数表示)")

def getInputs():
    a = eval(input("请输入选手A的能力值(0-1):"))
    b = eval(input("请输入选手B的能力值(0-1):"))
    n = eval(input("模拟比赛的次数:"))
    return a, b, n


def gameOver(scoreA, scoreB):
    return scoreA == 15 or scoreB == 15


def simOnegame(probA, probB):
    scoreA, scoreB = 0, 0
    serving = "A"
    while not gameOver(scoreA, scoreB):
        if serving == "A":
            if rd.random() < probA:
                scoreA += 1
            else:
                serving = "B"
        else:
            if rd.random() < probB:
                scoreB += 1
            else:
                serving = "A"
    return scoreA, scoreB


def simNgames(n, probA, probB):
    winA, winB = 0, 0
    for i in range(n):
        scoreA, scoreB = simOnegame(probA, probB)
        if scoreA > scoreB:
            winA += 1
        else:
            winB += 1
    return winA, winB


def printSummary(winA, winB):
    n = winA + winB
    print("竞技分析开始,共模拟%d场比赛" % n)
    print("选手A获胜%d场比赛,占比%.3f" % (winA, winA / n))
    print("选手B获胜%d场比赛,占比%.3f" % (winB, winB / n))


def main():
    printInfo()
    probA, probB, n = getInputs()
    winA, winB = simNgames(n, probA, probB)
    printSummary(winA, winB)


main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-17 06:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表