• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
汤圆喵喵
博客园    首页    新随笔    联系   管理    订阅  订阅
ym球
# 体育竞技
from random import random


def printInfo():
    print("模拟两个选手A和B的羽毛球竞技比赛")
    print("程序需要两个选手的能力值0-1")
    print("规则:三局两胜--21分制")
    print("作者:37李长宇")


def getInput():
    a = eval(input("请输入选手A的能力值(0-1):"))

    b = eval(input("请输入选手B的能力值(0-1):"))

    m = eval(input("比赛的局数:"))

    n = eval(input("模拟比赛的场次:"))
    return a, b, m, n


def printSummary(winsA, winsB):
    n = winsA + winsB

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

    print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA, winsA / n))

    print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB, winsB / n))


def simNGames(m, n, probA, probB):
    winsA, winsB = 0, 0
    wa, wb = 0, 0

    for i in range(n):
        for i in range(m):

            scoreA, scoreB = simOneGame(probA, probB)

            if scoreA > scoreB:
                wa += 1
            else:
                wb += 1

            if wa == 2:
                winsA += 1
                wa, wb = 0, 0
                break
            if wb == 2:
                winsB += 1
                wa, wb = 0, 0
                break

    return winsA, winsB


def simOneGame(probA, probB):
    scoreA, scoreB = 0, 0

    serving = "A"
    while not gameOver(scoreA, scoreB):

        if serving == "A":

            if random() < probA:

                scoreA += 1
            else:
                serving = "B"
        else:
            if random() < probB:
                scoreB += 1
            else:
                serving = "A"
    return scoreA, scoreB


def gameOver(a, b):
    if (a >= 20 or b >= 20):
        if (abs(a - b) == 2 and a <= 29 and b <= 29):
            return True
        else:
            return a == 30 or b == 30
    else:
        return False


def main():
    printInfo()
    probA, probB, m, n = getInput()
    winsA, winsB = simNGames(m, n, probA, probB)
    printSummary(winsA, winsB)


main()

 

 

 

 

 

 

posted on 2020-11-21 19:49  汤圆喵喵  阅读(27)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3