程序设计方法学


'''
1.自顶向下:不断细化分解问题的方法
2.自底向上:不断组合基础方法形成系统

计算思维:抽象 自动化

计算生态:以开源项目为组织形式,充分利用“共识原则”和“社会利他”组织人员,在竞争发展、
         相互依存和迅速更迭中完成信息技术的更新换代,形成了技术的自我演化路径。

Python计算生态:>15万个第三方库
https://pypi.org/:      输入功能英文--->获取库--->查看方法并应用




'''
#-------------------------------------------------------------------------------------------------------------
#自顶向下实例:
from random import random

def printIntro():#初始化提示输入
    print('该程序模拟某两个竞技选手A和B之间的比赛')
    print('请输入两选手的能力值(0-1之间的小数表示)以及竞技场次数')

def getIputs():#获取选手输入
    a,b,n=list(map(eval,input().split(' ')))
    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()<probA:
                scoreA+=1
            else:
                serving='B'
        else:
            if random()<probB:
                scoreB+=1
            else:
                serving='A'
    return scoreA,scoreB

def simuNGames(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=getIputs()
    winsA,winsB=simuNGames(n,probA,probB)
    printSummary(winsA,winsB)
main()

相关