【Python程序设计(八)】程序设计方法学

1 实例: 体育竞技分析

问题分析:体育竞技分析python

  • 需求:毫厘是多少?如何科学分析体育竞技比赛?
  • 输入:球员的水平
  • 输出:可预测的比赛成绩

比赛规则:交换发球,开始时一方先发球,发球方获胜,发球放得 1 分,接球放不得分。发球方输,双方均不得分。如 A 发球,A 胜得 1 分,B 不得分;A 输两人都不得分。而后换 B 发球。先得 15 分胜出。django

自顶向下和自底向上flask

  • 自顶向下:解决复杂问题的有效方法。将一个总问题表达为若干个小问题组成的形式,使用一样方法进一步分解小问题,直至小问题能够用计算机简单明了的解决。
  • 自底向上(执行):逐步组建复杂系统的有效测试方法。分单元测试,逐步组装,按照自顶向下相反的路径操做,直至系统各部分以组装的思路都通过测试和验证。

程序整体框架及步骤微信

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

程序分为四个部分,打印介绍信息,得到运行参数,模拟 n 局比赛,输出结果。模拟 n 场比赛能够分解为模拟一场比赛 n 次,同时模拟一场比赛的每局比赛须要判断当前比赛是否已经决出胜负。网络

在这里插入图片描述

from random import *
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获胜{}场比赛,占比{:.1%}".format(winsA, winsA/n))
    print("选手B获胜{}场比赛,占比{:.1%}".format(winsB, winsB/n))

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

def simOneGame(proA, proB):
    scoreA, scoreB = 0, 0
    serving = "A"
    while not gameover(scoreA, scoreB):
        if serving == "A":
            if random() < proA:
                scoreA += 1
            else:
                serving = "B"
        else:
            if random() < proB:
                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()

2 Python 第三方库安装

优质得三方库平台:框架

python123 平台能够学习,也整理了不少三方库,整理了国内得镜像 https://python123.io/
Python 社区 PyPI(Python Package Index),13 万个第三方库 https://pypi.org/dom

2.1 第三方库的pip安装方法

经常使用的 pip 命令机器学习

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

2.2 第三方库的集成安装方法

集成安装:结合特定 Python 开发工具的批量安装
Anaconda
https://www.continuum.io
支持近 800 个第三方库,包含多个主流工具,适合数据计算领域开发ide

2.3 第三方库的文件安装方法

安装文件下载地址
http://www.lfd.uci.edu/~gohlke/pythonlibs/
在这里插入图片描述
文件安装方法函数

  • 步骤1:在UCI页面上搜索文件
  • 步骤2:下载对应版本的文件
  • 步骤3:使用pip install <文件名>安装

3 os 库的使用

os库提供通用的、基本的操做系统交互功能,os库是Python标准库,包含几百个函数。经常使用路径操做、进程管理、环境参数等几类

3.1 os 库之路径操做

os.path 子库以 path 为入口,用于操做和处理文件路径
import os.path 或 import os.path as op

函数 描述
os.path.abspath(path) 返回 path 在当前系统中的绝对路径
>>>os.path.abspath( “file.txt” )
‘C:\\Users\\Tian Song\\Python36-32\\file.txt’
os.path.normpath(path) 归一化 path 的表示形式,统一用 \\ 分隔路径
>>>os.path.normpath( “D://PYE//file.txt” )
‘D:\\PYE\\file.txt’
os.path.relpath(path) 返回当前程序与文件之间的相对路径 (relative path)
>>>os.path.relpath( “C://PYE//file.txt” )
’…\\…\\…\\…\\…\\…\\…\\PYE\\file.txt’
os.path.dirname(path) 返回 path 中的目录名称
>>>os.path.dirname( “C://PYE//file.txt” )
‘D://PYE’
os.path.basename(path) 返回 path 中最后的文件名称
>>>os.path.basename( “C://PYE//file.txt” )
‘file.txt’
os.path.join(path, *paths) 组合 path 与 paths,返回一个路径字符串
>>>os.path.join( “D:/”, “PYE/file.txt” )
‘D:/PYE/file.txt’
os.path.exists(path) 判断 path 对应文件或目录是否存在,返回 True 或 False
>>>os.path.exists( “D://PYE//file.txt” )
False
os.path.isfile(path) 判断 path 所对应是否为已存在的文件,返回 True 或 False
>>>os.path.isfile( “D://PYE//file.txt” )
True
os.path.isdir(path) 判断 path 所对应是否为已存在的目录,返回 True 或 False
>>>os.path.isdir( “D://PYE//file.txt” )
False
os.path.getatime(path) 返回 path 对应文件或目录上一次的访问时间
>>>os.path.getatime( “D:/PYE/file.txt” )
1518356633.7551725
os.path.getmtime(path) 返回 path 对应文件或目录最近一次的修改时间
>>>os.path.getmtime( “D:/PYE/file.txt” )
1518356633.7551725
os.path.getctime(path) 返回 path 对应文件或目录的建立时间
>>>time.ctime(os.path.getctime( “D:/PYE/file.txt” ))
‘Sun Feb 11 21:43:53 2018’
os.path.getsize(path) 返回 path 对应文件的大小,以字节为单位
>>>os.path.getsize( “D:/PYE/file.txt” )
180768

3.2 os 库之进程管理

os.system(command)

  • 执行程序或命令 command
  • 在 Windows 系统中,返回值为 cmd 的调用返回信息
import os
os.system("C:\\Windows\\System32\\calc.exe")
>>>0

3.3 os 库之环境参数

获取或改变系统环境信息

函数 描述
os.chdir(path) 修改当前程序操做的路径
>>>os.chdir(“D:”)
os.getcwd() 返回程序的当前路径
>>>os.getcwd()
‘D:\’

获取操做系统环境信息

函数 描述
os.getlogin() 得到当前系统登陆用户名称
>>>os.getlogin()
‘Tian Song’
os.cpu_count() 得到当前系统的 CPU 数量
>>>os.cpu_count()
8

获取操做系统环境信息

函数 描述
os.urandom(n) 得到 n 个字节长度的随机字符串,一般用于加解密运算
>>>os.urandom(10)
b’=l>7}\xca\x7f\x14\xe3\x0b’

4 经常使用第三方库

库名 用途
NumPy N 维数据表示和运算
Matplotlib 二维数据可视化
PIL 图像处理
Scikit-Learn 机器学习和数据挖掘
Requests HTTP 协议访问及网络爬虫
Jieba 中文分词
Beautiful Soup HTML 和 XML 解析器
Wheel Python 第三方库文件打包工具
PyInstaller 打包 Python 源文件为可执行文件
Django Python最流行的 Web 开发框架
Flask 轻量级 Web 开发框架
WeRoBot 微信机器人开发框架
SymPy 数学符号计算工具
Pandas 高效数据分析和计算
Networkx 复杂网络和图结构的建模和分析

5 实例: 第三方库安装脚本

需求:批量安装第三方库,实现自动安装?

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("pip install " + lib)
    print("Successful")
except:
    print("Failed Somehow")