【python语言程序设计】程序设计方法学#181022

自顶向下和自底向上

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

自底向上
逐步组建复杂系统的有效测试方法
- 分单元测试,逐步组装
- 按照自顶向下相反的路径操作
- 直至系统各部分以组装的思路都经过测试和验证

体育竞技分析

1打印程序的介绍性信息式
printIntro()
2获得程序运行参数:proA,proB,n
getInputs()
3利用球员A和B的能力值,模拟n局比赛
simNGames()
4输出球员A和B获胜比赛的场次及概率
printSummary()
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

from random import random

def main():
    printIntro()
    probA,probB,n = getInputs()
    winsA,winsB = simNGames(n,probA,probB)
    printSummary(winsA,winsB)

def printIntro():
    print("The program is two prob A and B a game")
    print("A and B power(0-1)")

def getInputs():
    a = eval(input("please input A power:"))
    b = eval(input("please input B power:"))
    n = eval(input("The game num:"))
    return a,b,n

def printSummary(winsA,winsB):
    n = winsA + winsB
    print("start,{}".format(n))
    print("A{},{:0.1%}".format(winsA,winsA/n))
    print("B{},{:0.1%}".format(winsB,winsB/n))

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 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 gameOver(a,b):
    return a == 15 or b ==15

main()


The program is two prob A and B a game
A and B power(0-1)
please input A power:0.45
please input B power:0.55
The game num:1000
start,1000
A243,24.3%
B757,75.7%

思维

逻辑思维:推理和演绎,数学为代表,A->B B->C A->C
实证思维:实验和验证,物理为代表,引力波<-实验
计算思维:设计和构造,计算机为代表,汉诺塔递归

抽象和自动化

计算思维:Computational Thinking
抽象问题的计算过程,利用计算机自动化求解
计算思维是基于计算机的思维方式
计算思维基于计算机强大的算力及海量数据
抽象计算过程,关注设计和构造,而非因果

计算生态与Python语言

- 库之间相互关联使用,依存发展
	python库间广泛联系,逐级封装
- 社区庞大,新技术更迭迅速
	AlphaGo深度学习算法采用Python语言开源

用户体验与软件产品

提高用户体验的方法
1进度展示:
- 如果程序需要计算时间,可能产生等待,请增加进度展示
- 如果程序由若干步骤,需要提示用户,请增加进度展示
- 如果程序可能存在大量次数的循环,请增加进度展示

2异常处理
- 当获得用户输入,对合规性需要检查,需要异常处理
- 当读写文件时,对结果进行判断,需要异常处理
- 当进行输入输出时,对运算结果进行判断,需要异常处理

基本的程序设计模式

模块化设计
- 通过函数或对象封装将程序划分为模块及模块间的表达
- 具体包括:主程序、子程序和子程序间关系
- 分而治之:一种分而治之、分层抽象、体系化的设计思想
- 紧耦合:两个部分之间交流很多,无法独立存在
- 松耦合:两个部分之间交流较少,可以独立存在
- 模块内部紧耦合、模块之间松耦合
- 引擎+配置:程序执行和配置分离,将可选参数配置化
- 将程序开发变成配置文件编写,扩展功能而不修改程序
- 关键在于接口设计,清晰明了、灵活可扩展
1产品定义:对应用需求充分理解和明确定义,而不是功能定义,要考虑商业模式
2系统架构:以系统方式思考产品的技术实现,关注数据流、模块化、体系架构
3设计与实现:结合架构完成关键设计及系统实现,结合可扩展性、灵活性等进行设计优化
4用户体验:从用户角度思考应用效果,用户至上,体验有限,以用户为中心

13万个第三方库

pypi.org
PyPI:Python Package Index
PSF维护的展示全球Python计算生态的主站
学会检索并利用PyPI,找到适合的第三方库开发程序
开发与区块链相关的程序
1在pypi.org搜索blockchain
2挑选适合开发目标的第三方库作为基础
3完成自己需要的功能

三种安装

1使用pip命令
2集成安装方法
3文件安装方法
  • pip安装
pip install <第三方库名>

pip install -U <第三方库名>
- 使用-U标签更新已安装的指定第三方库(版本更新)

pip uninstall <第三方库名>
- 卸载指定的第三方库

pip download <第三方库名>
- 下载但不安装指定的第三方库

pip show <第三方库名>
- 列出某个指定的第三方库的详细信息

pip search <关键词>
- 根据关键词在名称和介绍中搜索第三方库

pip list
- 列出当前系统已经安装的第三方库
  • 集成安装
Anaconda
continuum.io
- 支持近800个第三方库
- 包含多个主流工具
- 适合数据计算领域开发
  • 文件安装
- 某些第三方库pip下载后,需要编译再安装
- 如果操作系统没有编译环境,则能下载但不能安装
www.lfd.uci.edu/~gohlke/pythonlibs/
例如搜索wordcloud

Wordcloud, a little word cloud generator.

    wordcloud‑1.5.0‑cp27‑cp27m‑win32.whl
    wordcloud‑1.5.0‑cp27‑cp27m‑win_amd64.whl
    wordcloud‑1.5.0‑cp34‑cp34m‑win32.whl
    wordcloud‑1.5.0‑cp34‑cp34m‑win_amd64.whl
    wordcloud‑1.5.0‑cp35‑cp35m‑win32.whl
    wordcloud‑1.5.0‑cp35‑cp35m‑win_amd64.whl
    wordcloud‑1.5.0‑cp36‑cp36m‑win32.whl
    wordcloud‑1.5.0‑cp36‑cp36m‑win_amd64.whl
    wordcloud‑1.5.0‑cp37‑cp37m‑win32.whl
    wordcloud‑1.5.0‑cp37‑cp37m‑win_amd64.whl

pip install <文件名>安装

os库

os库提供通用的、基本的操作系统交互功能
- 路径操作:os.path子库,处理文件路径及信息
- 进程管理:启动系统中其他程序
- 环境参数:获得系统软硬件信息等环境参数

os路径操作

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

os.path.abspath(path)返回path在当前系统中的绝对路径
>>> import os.path
>>> os.path.abspath("f.txt")
'D:\\Python\\Python37\\f.txt'

os.path.normpath(path)归一化path的表示形式,统一用\\分隔路径
>>> os.path.normpath("D://Python//Python37//f.txt")
'D:\\Python\\Python37\\f.txt'

os.path.relpath(path)返回当前程序与文件之间的相对路径(relative path)
>>> os.path.relpath("D:\hello.java")
'..\\..\\hello.java'

os.path.dirname(path)返回path中的目录名称
>>> os.path.dirname("file.txt")
''
>>> os.path.dirname("D://Python//Python37//f.txt")
'D://Python//Python37'

os.path.basename(path)返回path中最后的文件名称
>>> os.path.basename("D://Python//Python37//f.txt")
'f.txt'

os.path.join(path,*paths)组合path与paths,返回一个路径字符串
>>> os.path.join("D:/","file.txt")
'D:/file.txt'

os.path.exists(path)判断path对应文件或目录是否存在,返回True或False
>>> os.path.exists("D:/file.txt")
False
>>> os.path.exists("C:\Python3.7.0")
True
>>> os.path.exists("C:\Python3.7.0\f.txt")
False
>>> os.path.exists("C:\\Python3.7.0\\f.txt")
True

os.path.isfile(path)判断path对应文件是否存在,返回True或False
>>> os.path.isfile("C:\Python3.7.0\f.txt")
False
>>> os.path.isfile("C:\\Python3.7.0\\f.txt")
True

os.path.isdir(path)判断path对应目录是否存在,返回True或False
>>> os.path.exists("C:\\Python3.7.0")
True
>>> os.path.exists("C:\Python3.7.0")
True
>建议使用\\,或者使用normpath(path)归一化再赋值

os.path.getatime(path)返回path对应文件或目录上一次的访问时间
>>> os.path.getatime("C:\\Python3.7.0\\f.txt")
1540140413.2137096

os.path.getmtime(path)返回path对应文件或目录最近一次的修改时间
>>> os.path.getmtime("C:\\Python3.7.0\\f.txt")
1540137905.8439314

os.path.getctime(path)返回path对应文件或目录的创建时间
>>> os.path.getctime("C:\\Python3.7.0\\f.txt")
1540137903.0234592
>>> import time
>>> time.ctime(os.path.getctime("C:\\Python3.7.0\\f.txt"))
'Mon Oct 22 00:05:03 2018'

os.path.getsize(path)返回path对应文件的大小,以字节为单位
>>> os.path.getsize("C:\\Python3.7.0\\f.txt")
20

os进程管理

os.system(command)
- 执行程序或命令command

>>> import os
>>> os.system("C:\\Windows\\System32\\calc.exe")
0	#程序正在运行
>>> os.system("C:\\Windows\\System32\\cmd.exe")
-1073741510
os.system("C:\\Windows\\System32\\mspaint.exe C:\\Python3.7.0\\grwordcloud.png")	      
0
使用格式(工具 文件)

os库环境参数

获取或改变系统环境信息

os.chdir(path)修改当前程序操作的路径
>>> os.chdir("D:")

os.getcwd()返回程序的当前路径
>>> os.getcwd()
'D:\\Python\\Python37'
>>> os.chdir("C:")
>>> os.getcwd()
'C:\\'

os.getlogin()获得当前系统登录用户名称
>>> os.getlogin()
'Administrator'

os.cpu_count()返回当前系统的CPU数量
>>> os.cpu_count()
8

os.urandom(n)获得n个字节长度的随机字符串,通常用于加解密运算
>>> os.urandom(10)
b'\xb3\xa1D\xfc\xe9\xfd\xc6\xaa\xaa\x93'

第三方库自动安装脚本

NumPy		N维数据表示和运算			pip install numpy
Matplotlib	二维数据可视化			pip install matplotlib
PTL		图像处理				pip install pillow
Scikit-Learn	机器学习和数据挖掘		pip install sklearn
Requests		HTTP协议访问及网络爬虫		pip install requests
jieba 		中文分词				pip install jieba
Beautiful Soup	HTML和XML解析器			pip install beautifulsoup4
Wheel Python	第三方库文件打包工具		pip install wheel
PyInstaller	打包Python源文件为可执行文件	pip install pyinstaller
Django		Python最流行的Web开发框架		pip install django
Flask		轻量级Web开发框架		pip install flask
WeRoBot		微信机器人开发框架		pip install werobot
SymPy		数学符号计算工具			pip install sympy
Pandas		高效数据分析和计算		pip install pandas
Networkx		复杂网络和图结构的建模和分析	pip install networkx
PyQt5		基于Qt的专业级GUI开发框架		pip install pyqt5
PyOpenGL	多平台OpenGL开发接口		pip install pyopengl
PyPDF2		PDF文件内容提取及处理		pip install pypdf2
docopt		Python命令行解析			pip install docopt
PyGame		简单小游戏开发框架		pip install pygame
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

import os

libs = {"numpy","matplotlib","pillow","sklearn","requests","jieba",\
        "beautifulsoup4","wheel","pyinstaller","django","flask","werobot",\
        "sympy","pandas","networkx","pyqt5","pyopengl","pypdf2","docopt","pygame"}

try:
    for lib in libs:
        os.system("pip install " + lib)
    print("Successful")
except:
    print("Failed Somehow")



转载于:https://my.oschina.net/hellopasswd/blog/2250398

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值