8 Python程序设计方法学

程序设计方法学

一、实例13:体育竞技分析

1.自顶向下和自底向上

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

②自底向上:分单元测试,逐步组建复杂系统,并且能够进行有效测试的方法

2.体育竞技分析实例

①程序总体框架和步骤

  • 步骤1:打印程序的介绍性信息式(printInfo())
  • 步骤2:获得程序运行参数proA,proB,n(getInputs())
  • 步骤3:利用球员A和B的能力值,模拟n局比赛(simNGames())
  • 步骤4:输出球员A和球员B获胜比赛的场次及概率(printSummary())
#MatchAnalysis.py
from random 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 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 simNGames(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=getInputs()
    winsA,winsB=simNGames(n,probA,probB)
    printSummary(winsA,winsB)

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

二、Python程序设计思维

1.计算思维与程序设计

①人类思维特征

  • 逻辑思维:推理和演绎,数学为代表
  • 实证思维:实验和验证,物理为代表
  • 计算思维:设计和构造,计算机为代表

②计算机思维的特点:抽象和自动化

-计算思维:Computational Thinking

-抽象问题的计算过程,利用计算机自动化求解

—计算思维基于计算机强大的算力以及海量数据

—抽象计算过程,关注设计和构造,而非因果

-计算思维是基于计算机的思维方式

2.计算生态与Python语言

①计算生态:没有顶层设计、以功能为单位

  • 竞争发展
  • 相互依存
  • 迅速更迭
3.用户体验与软件产品

①提高用户体验的方法

-进度展示

-异常处理(用户输入、读写文件、输出)

-其他(打印输出、日志文件、帮助信息)

4.基本的程序设计模式

①模块化设计(紧耦合,松耦合)

②配置化设计(程序引擎+配置文件)

三、Python第三方库的安装

1.Python社区
https://pypi.org/    #Python package index
2.安装第三方库

①使用pip指令(主要)

  • pip install <第三方库>
  • pip install -u <第三方库>:更新已安装的指定第三方库
  • pip uninstall <第三方库>:卸载指定第三方库
  • pip download <第三方库>
  • pip show <第三方库>:列出指定第三方库的详情信息
  • pip search <关键词>:通过关键词搜索第三方库

②集成安装方法

  • Anaconda,支持近800个第三方库,适合数据计算领域开发

    https://www.continuum.io
    

③文件安装方法

  • UCI页面

    http://www.lfd.uci.edu/~gohlke/pythonlibs/
    

四、模块7:OS库的基本使用

1.OS库

os库提供通用的、基本的操作系统交互功能

-路径操作:os.path子库,处理文件路径及信息

-进程管理:启动系统中其他程序

-环境参数:获得系统硬件信息等环境参数

2.OS库的路径操作(os.path)
import os.path 或者 import os.path as op
  • os.path.abspath(path):返回path在当前系统中的绝对路径
  • os.path.normpath(path):归一化path的表现形式,统一用\\分隔路径
  • os.path.relpath(path):返回当前程序与文件之间的相对路径
  • os.path.dirname(path):返回path中的目录名称
  • os.path.basename(path):返回path中最后的文件名称
  • os.path.join(path,*path):组合path与paths,返回一个路径字符串
  • os.path.exists(path):判断path对应文件或目录是否存在
  • os.path.isfile(path):判断path所对应是否为已存在的文件
  • os.path.isdir(path):判断path所对应是否为已存在的目录
  • os.path.getatime(path):返回path对应文件或目录上一次的访问时间
  • os.path.getmtime(path):返回path对应文件或目录最近一次的修改时间
  • os.path.getctime(path):返回path对应文件或目录的创建时间
  • os.path.getsize(path):返回path对应文件的大小,字节
3.OS库的进程管理

os.system执行程序或命令,在windows系统中,返回值为cmd的调用返回信息

#调出计算器
>>> import os
>>> os.system("c:\\windows\\System32\\calc.exe")
0      #正确运行,返回0

在这里插入图片描述

  • os.chdir(path):修改当前程序操作的路径
  • os.getcwd():返回程序的当前路径
  • os.getlogin():获得当前系统登录用户名称
  • os.cpu_count():获得当前系统的CPU数量
  • os.urandom(n):获得n个字节长度的随机字符串,通常用于加解密运算

五、实例14:第三方库的自动安装脚本

-jiebaa:中文分词库

-Beautiful Soup:HTML和XML解析器

-Wheel:Python第三方库打包工具

-PyInstaller:打包Python源文件为可执行文件

-Django:Python最流行的Web开发框架

-Flask:轻量级Web开发框架

-WeRoBot:微信机器人开发框架

-SymPy:数学符号计算工具

-Pandas:高校数据分析和计算工具

-Networksx:复杂网络和图结构的建模和分析

-PyQt5:基于Qt的专业级GUI开发框架

-PyOpenGL:多平台OpenGL开发接口

-PyPDF2:PDF文件内容提取及处理

-docopt:Python命令行解析

-PyGame:简单小游戏开发框架

#BatchInstall.py
import os
libs = {"numpy","matplotlib","pillow","sklearn","requests",\
        "jieba","beautifulsoup4","wheel","networkx","sympy",\
        "pyinstaller","django","flask","werobot","pyqt5",\
        "pandas","pyopengl","pypdf2","docopt","pygame"}
try:
    for lib in libs:
        os.system("pip3 install "+lib)
    print("Successful")        
except:
    print("Failed Somehow")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值