其他分享
首页 > 其他分享> > badminton

badminton

作者:互联网

学号2020310143037,罗逸凡

import random

def printIntro():
  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 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 gameOver(a, b):
  return a == 15 or b == 15

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

def simNGames(n ,probA, probB):
  winsA, winsB = 0, 0
  for i in range(n):
    scoreA, scoreB = simOneGame(probA, probB)
    if scoreA > scoreB:
      winsA += 1
    else:
      winsB += 1
  return winsA, winsB

def main():
  printIntro()
  probA, probB, n = getInputs()
  winsA, winsB = simNGames(n, probA, probB)
  printSummary(winsA, winsB)
main()

 

 

 运行结果:

 

标签:winsB,winsA,scoreA,probB,probA,badminton,def
来源: https://www.cnblogs.com/lyf238/p/15678296.html