实例13 体育竞技分析
自顶向下,解决复杂问题的有效方法,将一个小问题表达为若干小问题组成的形式,使用同样方法进一步解决小问题直至可以用计算机简单解决;自底向上
- 理解自顶向下的设计思维:分而治之;理解自底向上的执行思维:模块化集成
#sportgames.py
from random import random
def printIntro():
print("程序模拟两个选手A和B的某种竞技比赛")
print("程序运行需要A和B的能力值")
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#谁先到15分则返回true结束while
def simOneGame(probA,probB):#一场比赛
scoreA,scoreB=0,0
serving="A"#A发球
while not gameOver(scoreA,scoreB):
if serving=="A":
if random() < probA:#生成随机数若小于A的能力值,则A加一,是概率体现
scoreA += 1
else:
serving="B"#A输球谁都不得分球权给B
else:
if random() < probB:
scoreB += 1
else:
serving="A"
return scoreA,scoreB
def simNGames(n,probA,probB):#n场比赛
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()
Python程序设计思维
计算思维与程序设计
逻辑思维(数学)—实证思维(物理)—计算思维(计算机)
计算思维基于计算机强大的算力和海量数据,抽象计算过程,关注设计和构造,而非因果,以计算机程序为实现的主要手段。
计算生态与python
开源思想深入演化和发展,形成了计算生态。没有顶层设计,以功能为单位,竞争发展、相互依存,迅速更迭。同一个功能,两个以上第三方库,自然选择。库广泛联系,逐级封装。AlphaGo深度学习算法采用Python语言开源
- 刀耕火种 -》 站在巨人肩膀
编程的起点不是算法而是系统,编程如同搭积木,利用计算生态为主要模式
优质计算生态推荐:http://python123.io
用户体验和软件产品
提高用户体验:进度展示(时间,步骤,循环);异常处理(用户输入,读写文件,输入输出);打印输出;日志文件;帮助信息
基本程序设计模式
IPO;自顶向下;模块化设计,松耦合,紧耦合;配置化设计(程序引擎+配置数据文件);
- 应用开发(产品定义,系统架构,设计实现,用户体验)
产品定义不仅是功能定义要考虑商业模式;系统架构,关注数据流,模块化,体系结构;设计实现,结合可扩展性,灵活性等进行设计优化;用户体验优先
Python第三方库安装
13万+第三方库 https://pypi.org/ 检索第三方库
实例开发区块链相关程序:pypi.org搜索blockchain;挑选合适的第三方库,完成所需功能
- 安装
使用pip (命令行下执行)pip -h
;pip install <第三方库名>
;pip install -U <库>
更新
pip uninstall <库>
卸载;pip download <库>
下载但不安;pip show <库>
看库信息
pip search <关键词>
根据关键词搜索第三方库;pip list
已安装的 - 集成安装
Anaconda集成开发工具 https://www.continuum.io 数据计算领域 支持800+库 - 文件安装方法
http://www.lfd.uci.edu/~gohlke/pythonlibs/ UCI页面 一批下载了还需要编译的库的编译后版本
模块7 os库使用
os库提供通用的、基本的操作系统交互功能
- 路径操作:os.path子库,处理文件路径及信息
os.path.abspath(path)
返回path在当前系统的绝对路径
os.path.normpath(path)
统一用\分隔路径
os.path.realpath(path)
相对路径
os.path.dirname(path)
返回path中目录名称
os.path.basename(path)
获取path中最后文件名
os.path.join(path,*paths)
组合path和paths返回一个路径字符串
os.path.exists(path)
判断文件或目录是否存在
os.path.isfile(path)
是否是已经存在文件os.path.isdir(path)
os.path.getatime(path)
返回文件或目录上次访问时间
os.path.getmtime(path)
返回文件或目录最近一次修改时间
os.path.getctime(path)
返回文件或目录创建时间
os.path.getsize(path)
文件大小 - 进程管理:启动系统其他程序
os.system(command)执行程序或命令command
import os
os.system("C:\\Windows\\System64\\calc.exe")
- 环境参数:获取系统软硬件信息等环境参数
os.chdir(path)
修改当前程序操作的路径
os.getcwd()
返回程序当前路径
os.getlogin()
获取系统登录名
os.cpu_count()
返回cpu数量
os.urandom(n)
获取n字节长度的随机字符串,用于加解密运算
实例14 第三方库自动安装脚本
NumPy N维数据表示和运算
Matplotlib 二维数据可视化
PIL 图像处理
Scikit-Learn 机器学习和数据挖掘
Requests HTTP协议访问和网络爬虫
Jieba 中文分词
Beautiful Soup HTML和XML解析器
Wheel Python第三方库文件打包工具
Django Python最流行的Web开发框架
Flask 轻量级Web开发框架
WeRoBot 微信机器人开发框架
SymPy 数学符号计算工具
Pandas 高效数据分析和计算
Networkx 复杂网络和图结构的建模和分析
编写各类自动化运行程序脚本
os.system()
三阶段:函数式编程-面向对象编程-pythonic编程
基础语法-进阶语法-高级语法
python网络爬虫与信息提取-py数据分析与展示-py机器学习应用-py科学计算三维可视化-py+大数据+人工智能-py+嵌入式+可编程硬件
网易云课程 进阶语法