Python基础(八):程序设计方法学

程序设计方法学

8.1 自顶向下和自底向上

自顶向下设计:分而治之

  1. 将一个总问题分解为若干个小问题
  2. 使用同样的方法进一步分解小问题
  3. 直到小问题可以用计算机简单明了的解决

自底向上执行:模块化集成

  1. 分单元测试,逐步向上组装
  2. 直到系统各部分以组装的思路都经过测试和验证

实例:体育竞技分析

  1. 整体框架

    • 步骤1:打印程序的介绍信息
    • 步骤2:获取参数 proA,proB,n
    • 步骤3:利用球员 A 和 B 的能力值 proA 和 proB,模拟 n 局比赛
    • 步骤4:输出球员 A 和 B 获胜比赛的场次及概率
  2. 自顶向下设计

    Untitled
  3. 自底向上执行

代码:

import random


def printInfo():
    print("体育竞技分析问题".center(30, "*"))
    print("需要输入选手A和选手B的能力值".center(25, "*"))


def getInput():
    a = eval(input("请输入选手A的能力值(0-1): "))
    b = eval(input("请输入选手B的能力值(0-1): "))
    n = eval(input("请输入比赛场数: "))
    return a, b, n


def gameOver(scoreA, scoreB):
    return scoreA == 15 or scoreB == 15


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


def simNGames(proA, proB, n):
    winCountA, winCountB = 0, 0
    for i in range(n):
        scoreA, scoreB = simOneGame(proA, proB)
        if scoreA > scoreB:
            winCountA += 1
        elif scoreA < scoreB:
            winCountB += 1
    return winCountA, winCountB


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():
    printInfo()
    proA, proB, n = getInput()
    winsA, winsB = simNGames(proA, proB, n)
    printSummary(winsA, winsB)


main()

运行:

***********体育竞技分析问题***********
*****需要输入选手A和选手B的能力值*****
请输入选手A的能力值(0-1): 0.5
请输入选手B的能力值(0-1): 0.47
请输入比赛场数: 101
共模拟101场比赛
A获胜场数为69, 获胜概率为68.3%
B获胜场数为32, 获胜概率为31.7%

8.2 python程序设计思维

  1. 计算思维

    • 计算思维被称为人类第三种思维特征

      • 逻辑思维:推理和演绎,数学为代表
      • 实证思维:实验和验证,物理为代表
      • 计算思维:抽象和自动化,基于计算机的思维方式
    • 抽象问题的计算过程,利用计算机自动化求解

  2. 计算生态

    • Python提供 >15 万个第三方库,库的建设经过野蛮生长和自然选择。
    • Python 库之间竞争发展、相互依存、快速更迭。
    • 编写程序不再是探究每个算法的具体实现,而是尽可能利用第三方库进行代码复用。
  3. 用户体验

  4. 基本的程序设计模式

    • IPO:Input-Process-Output
    • 自顶向下设计
    • 模块化设计:模块内部紧耦合、模块之间松耦合
    • 配置化设计:程序执行和配置分离,将可选参数写入配置文件

Tips

python 第三方库的安装

  1. PyPI · The Python Package Index:https://pypi.org/

    • Python Package Index (PyPI) 是 Python 编程语言的软件存储库。

    • PyPI 可帮助您查找和安装由 Python 社区开发和共享的软件。

    • Package 作者使用 PyPI 来分发他们的软件。

  2. pip 安装方法

    命令 作用
    pip install <第三方库名> 安装指定的第 3 三方库
    pip install -U <第三方库名> 使用 -U 更新已安装的指定第三方库
    pip uninstall <第三方库名> 卸载指定的第三方库
    pip download <第三方库名> 下载但不安装指定的第三方库
    pip show <第三方库名> 列出某个指定第三方库的详细信息
    pip search <关键词> 根据关键词在名称和介绍中搜索第三方库
    pip list 列出当前系统已经安装的第 3 三方库
  3. 集成安装方法

    • 结合特定 Python 开发工具的批量安装,如 Anaconda

      Anaconda 提供了在一台机器上执行 Python/R 数据科学和机器学习的最简单方法。

  4. 文件安装方法

    • 由于 Python 某些第三方库仅提供源代码,通过 pip 下载后无法在 Windows 系统编译安装。
    • 可直接下载已经编译后的第三方库文件,再使用 pip install <文件名> 安装。
    • 下载地址:http://www.lfd.uci.edu/~gohlke/pythonlibs/

Python基础(八):程序设计方法学
https://luminous-ee.github.io/2023/01/28/Python基础(八):程序设计方法学/
作者
落与
发布于
2023年1月28日
许可协议