一、基础知识

模拟决赛现场得分计算python 比赛评分python_python


模拟决赛现场得分计算python 比赛评分python_程序设计方法_02


模拟决赛现场得分计算python 比赛评分python_程序运行_03


模拟决赛现场得分计算python 比赛评分python_模拟决赛现场得分计算python_04


模拟决赛现场得分计算python 比赛评分python_程序设计方法_05


模拟决赛现场得分计算python 比赛评分python_python_06


模拟决赛现场得分计算python 比赛评分python_python_07


模拟决赛现场得分计算python 比赛评分python_模拟决赛现场得分计算python_08


模拟决赛现场得分计算python 比赛评分python_程序设计方法_09


模拟决赛现场得分计算python 比赛评分python_python_10


模拟决赛现场得分计算python 比赛评分python_python_11


模拟决赛现场得分计算python 比赛评分python_模拟决赛现场得分计算python_12

二、程序设计方法学

模拟决赛现场得分计算python 比赛评分python_程序设计方法_13


模拟决赛现场得分计算python 比赛评分python_程序运行_14


模拟决赛现场得分计算python 比赛评分python_模拟决赛现场得分计算python_15


模拟决赛现场得分计算python 比赛评分python_模拟决赛现场得分计算python_16


模拟决赛现场得分计算python 比赛评分python_程序运行_17

模拟决赛现场得分计算python 比赛评分python_程序设计方法_18


模拟决赛现场得分计算python 比赛评分python_python_19


模拟决赛现场得分计算python 比赛评分python_程序设计方法_20


模拟决赛现场得分计算python 比赛评分python_python_21


模拟决赛现场得分计算python 比赛评分python_程序运行_22


模拟决赛现场得分计算python 比赛评分python_模拟决赛现场得分计算python_23


模拟决赛现场得分计算python 比赛评分python_程序运行_24


模拟决赛现场得分计算python 比赛评分python_程序设计方法_25


模拟决赛现场得分计算python 比赛评分python_程序设计方法_26


模拟决赛现场得分计算python 比赛评分python_模拟决赛现场得分计算python_27


模拟决赛现场得分计算python 比赛评分python_程序运行_28


模拟决赛现场得分计算python 比赛评分python_程序设计方法_29


模拟决赛现场得分计算python 比赛评分python_python_30


模拟决赛现场得分计算python 比赛评分python_程序运行_31


模拟决赛现场得分计算python 比赛评分python_程序运行_32

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 gameOver(Ascore, Bscore):
    return Ascore == 15 or Bscore == 15
def simOneGame(probA, probB):
    scoreA, scoreB = 0, 0
    serving = "A"
    while not gameOver(scoreA, scoreB):
        if serving == "A":
            if random.random() < probA / (probA + probB):
                scoreA += 1
            else:
                serving = "B"
        else:
            if random.random() < probB / (probA + probB):
                scoreB += 1
            else:
                serving = "A"
    return scoreA, scoreB
def simNGames(n, probA, probB):
    winsA, winsB = 0, 0  # winsA,winsB为各自获胜场次数目
    for i in range(n):   # 总共进行了n场比赛
        scoreA, scoreB = simOneGame(probA, probB)
        if scoreA > scoreB:
            winsA += 1
        else:
            winsB += 1
    return winsA, winsB
def printSummary(winsA, winsB):
    n = winsA + winsB
    print("竞技分析开始,共模拟{}场比赛".format(n))
    print("选手A获胜{}场比赛,占比{:.1%}".format(winsA, winsA/n))
    print("选手B获胜{}场比赛,占比{:.1%}".format(winsB, winsB/n))
def main():
    printIntro()
    probA, probB, n = getInputs()
    winsA, winsB = simNGames(n, probA, probB)
    printSummary(winsA, winsB)
main()


输出:
这个程序模拟两个选手A和B的某种竞技比赛
程序运行需要A和B的能力值(以0到1之间的小数表示)
请输入选手A的能力值(0-1):0.45
请输入选手B的能力值(0-1):0.5
模拟比赛的场次:1000
竞技分析开始,共模拟1000场比赛
选手A获胜362场比赛,占比36.2%
选手B获胜638场比赛,占比63.8%

A和B能力差别只有10%,胜负差别却相差近一倍

相反,如果A和B胜负差别只有10%,可以预期它们的能力差别将会很小很小

模拟决赛现场得分计算python 比赛评分python_python_33


模拟决赛现场得分计算python 比赛评分python_python_34

PS: source, python123