鱼C论坛

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

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

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

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

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

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

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

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


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


  12. def simOnegame(probA, probB):
  13.     scoreA, scoreB = 0, 0
  14.     serving = "A"
  15.     while not gameOver(scoreA, scoreB):
  16.         if serving == "A":
  17.             if rd.random() < probA:
  18.                 scoreA += 1
  19.             else:
  20.                 serving = "B"
  21.         else:
  22.             if rd.random() < probB:
  23.                 scoreB += 1
  24.             else:
  25.                 serving = "A"
  26.     return scoreA, scoreB


  27. def simNgames(n, probA, probB):
  28.     winA, winB = 0, 0
  29.     for i in range(n):
  30.         scoreA, scoreB = simOnegame(probA, probB)
  31.         if scoreA > scoreB:
  32.             winA += 1
  33.         else:
  34.             winB += 1
  35.     return winA, winB


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


  41. def main():
  42.     printInfo()
  43.     probA, probB, n = getInputs()
  44.     winA, winB = simNgames(n, probA, probB)
  45.     printSummary(winA, winB)


  46. main()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-30 20:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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