美文网首页
8.Python编程之自顶向下设计

8.Python编程之自顶向下设计

作者: DonkeyJason | 来源:发表于2018-03-02 10:56 被阅读0次

note:本文所有代码在python3环境下执行,可用jupyter notebook

自顶向下设计

  • 基本思想
基本思想
  • 顶层设计(第一阶段)举例
 步骤1:答应程序的介绍性信息

    printIntro()
    
 步骤2: 获得程序运行所需的参数:ProA, ProB, n,

    probA,probB, n = getInputs()
    
 步骤3: 模拟n次比赛

    winsA, winsB = simNGames(n, probA, prpbB)
    
 步骤4: 输出球员A和B获胜比赛的次数和概率

    printSummary(winsA,sinsB)
    
    
代码:

def main():
    printIntro()
    probA,probB,n = getInputs()
    winsA, winsB = simNGames(n,probA,probB)
    printSummary(winsA,winsB)
体育竞技分析程序结构图:第一阶段
  • 第二阶段:
体育竞技分析程序结构图:第二阶段段
# printIntro()函数;
def printIntro():
    print('This programe simulates a game between two')
    print('There ara two player, A and B')
    print('Probability(a number between 0 and 1)is used')
    
#getInputs()函数;
def getInputs():
    a = eval(input('What is the prob.player A wins?'))
    b = eval(input('What is the prob.player B wins?'))
    n = eval(input("How many games to simulate?"))
    return a, b, n 
    
# simNGames()函数(核心)
def simNGames(n,probA,probB):
    winsA = 0
    winsB = 0
    for i in range(n):
        scoreA,scoreB = simOneGame(probA,probB)
        if scoreA > scoreB:
            winsA = winsA + 1
        else:
            winsB = winsB + 1
    return winsA, winsB
  • 第三阶段
体育竞技分析程序结构图:第三阶段
# simOneGame()函数;
def simOneGame(probA,probB):
    scoreA = 0
    scoreB = 0
    serving = 'A'
    while <condition>:
        <todo>
# simOneGame()函数完整代码:
def simOneGame(probA,probB):
    scoreA = 0
    scoreB = 0
    serving = 'A'
    while not gameOver(scoreA,scoreB):
        if serving == 'A':
            if random() < probA:
                scoreA = scoreA + 1
            else:
                serving = 'B'
        else:
            if random() < probB:
                scoreB = scoreB + 1
            else:
                serving = 'A'
    return scoreA,scoreB
            
# gameOver()函数:
def gameOver(a,b):
    return a==15 or b==15

# printSummary()函数
def printSummary():
    n = winsA + winsB
    print('\nGames simulated:%d'%n)
    print('WinsforA:{0}({1:0.1%})'.format(winsA,winsA/n))
    print('Wins for B:{0}({1:0.1%})'.format(winsB,winsB/n))       
  • 设计过程总结
 自顶向下设计:
     步骤1:将算法表达为一系列小问题;
     步骤2:为每个小问题设计接口;
     步骤3:通过将算法表达为接口关联的多个小问题来细化算法;
     步骤4:为每个小问题重复上述过程。

相关文章

  • 8.Python编程之自顶向下设计

    note:本文所有代码在python3环境下执行,可用jupyter notebook 自顶向下设计 基本思想 顶...

  • 8.python多进程之队列

    一、队列 IPC(Inter-Process Communication)进程之间通信 队列先进先出 Queue(...

  • Python是如何进行类型转换

    8.Python是如何进行类型转换的? http://canofy.iteye.com/blog/298263 函...

  • 25. 自顶向下设计

    [TOC] 自顶向下的设计方法 先确定上层步骤,然后再逐步细化这些步骤的过程被称为自顶向下设计。这种技巧允许我们把...

  • [android] AsyncTask 理解

    AsyncTask也是用于安卓中线程之间的通讯,与Handler相比较,AsyncTask使用更加简单,不再需要编...

  • Spark 2.x 应用提交流程

    Spark的计算抽象 Spark组件间的交互流程之前,先看下它的计算抽象 1. Application 它是用户编...

  • 初识C语言 2019-06-04

    C语言特征: 自顶向下设计、结构化设计、模块化设计 高效性包括代码紧凑带来的好处存储空间小、处理速度快速、强大的控...

  • 小白学编程之HTML/CSS Day002

    小白学编程之HTML/CSS Day 002 上期回顾 在上一篇学习笔记中,主要学习了以下内容,可以翻阅《小白学编...

  • javascript 异步(一)

    在开始谈javascript异步编程之前,我们先抛出几个问题,针对问题回答问题,从而解决问题 1、为什么要有异步编...

  • 单细胞分析流程之Cell Ranger

    单细胞分析流程之Cell Ranger 大家好,我是新加入的小编Immujent,很高兴能够在这里和大家一起学习很...

网友评论

      本文标题:8.Python编程之自顶向下设计

      本文链接:https://www.haomeiwen.com/subject/dcaoxftx.html