Python语言程序设计----【第8周 程序设计方法学】之8.1 实例13: 体育竞技分析

一、自顶向下和自底向上

1、自顶向下

解决复杂问题的有效方法

- 将一个总问题表达为若干个小问题组成的形式
- 使用同样方法进一步分解小问题
- 直至,小问题可以用计算机简单明了的解决

2、自底向上(执行)

逐步组建复杂系统的有效测试方法

- 分单元测试,逐步组装
- 按照自顶向下相反的路径操作
- 直至,系统各部分以组装的思路都经过测试和验证

二、"体育竞技分析"实例讲解

1、程序总体框架及步骤

- 步骤1:打印程序的介绍性信息                             - printInfo()
- 步骤2:获得程序运行参数:proA, proB, n           - getInputs()
- 步骤3:利用球员A和B的能力值,模拟n局比赛    - simNGames()
- 步骤4:输出球员A和B获胜比赛的场次及概率      - printSummary()

第一阶段:程序总体框架及步骤

def main():#主函数
    printIntro()
    probA, probB, n = getInputs()
    winsA, winsB = simNGames(n, probA, probB)
    printSummary(winsA, winsB)
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

第二阶段:步骤3 模拟N局比赛

def simNGames(n, probA, probB):#模拟N局比赛,通过N次调用1局比赛来完成
    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 simOneGame(probA, probB):#模拟1局比赛的胜负情况
    scoreA, scoreB = 0, 0
    serving = "A"#表示选手A先发球
    while not gameOver(scoreA, scoreB):
        if serving == "A":
            if random() < probA:#通过A能力与随机数的比较,来判断是否得分
                scoreA += 1
            else:
                serving="B"#A没得分,则B发球,且进入下一轮
        else:
            if random() < probB:
                scoreB += 1
            else:
                serving="A"
    return scoreA, scoreB
def gameOver(a,b):#有一方得分达到15分,则游戏结束
    return a==15 or b==15#注意这里返回的不是15!,而是true 或 false
    pass

运行结果:

注意:别忘了在程序开头和结尾分别引用库和主函数哦

from random import random

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cheeky_man

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值