Python学习(七)
python程序设计方法
方法论:理解并掌握一批python程序设计思维
实践能力:会编写更有设计感的程序。
实例13:体育竞技分析
- 
体育竞技分析:如何科学分析体育竞技比赛?
输入:球员水平;
输出:比赛可能的结果; - 
计算思维:模拟体育比赛,n越大结果越科学。
 - 
比赛规则:双人击球比赛,五局三胜,开始时一方先发球,直至判分,接下来胜者发球,球员只在发球局得分,先到15分则获胜。
 
自顶向下的设计:把大问题分解为小问题。
自底向上的执行:逐步执行单元,逐步组装成复杂模块再测试。
from random import random
def printIntro():
    print("这个程序模拟两个选手A和B的某种竞技比赛")
    print("程序需要获得A和B的能力值(以零到一之间的小数表示)")
def getInputs():
    a = eval(input("请输入选手A的能力值:"))
    b = eval(input("请输入选手B的能力值:"))
    n = eval(input("请输入需要模拟比赛的次数"))
    return a, b, n
    
def simNgames(n, proa, prob):
    wina = 0
    winb = 0
    for i in range(n):
        scorea, scoreb = simOnegame(proa, prob)
        if scorea > scoreb:
            wina +=1
        else:
            winb +=1
    return wina, winb
def simOnegame(proa, prob):
    scorea, scoreb = 0, 0
    while not (scorea==3 or scoreb==3):
        if simOneroundgame(proa, prob):
            scorea += 1
        else:
            scoreb += 1
    return scorea, scoreb
def simOneroundgame(proa, prob):
    scorea, scoreb = 0, 0
    serving = 'a'    
    while not (scorea==15 or scoreb==15):
        if serving == 'a':
            if proa > random():
                scorea += 1
            else:
                serving = 'b'
        else:
            if prob > random():
                scoreb += 1
            else:
                serving = 'a'
    return scorea > scoreb
def printSummary(wina, winb):
    n = wina + winb
    print("竞技分析开始,共模拟{}场比赛".format(n))
    print("选手A获得{}场比赛胜利,占比{:.1%}".format(wina, wina/n))
    print("选手B获得{}场比赛胜利,占比{:.1%}".format(winb, winb/n))
def main():
    printIntro()
    proa, prob, n = getInputs()
    wina, winb = simNgames(n, proa, prob)
    printSummary(wina, winb)
main()
我这里把五局三胜的规则补充了出来,会发现差距更大了,因为这个游戏对发球一方显然太过有利,而又固定由A来发球,从现实的比赛来分析,一旦A的能力压制了B恐怕B很难取胜。所以这个游戏规则不太公平啊。
关于课上提出的从结果反推能力值之差的问题,我认为仍然用当前函数的情况下,写一个迭代函数,确定精度,做一个固定步长的变化,不断输入ab的能力值,通过是否达到精度来判断是否跳出迭代,这样应该能得到比较好的结果。
python程序设计思维
本节的内容较为抽象。
计算思维与程序设计
逻辑思维、实证思维、计算思维。
抽象和自动化:抽象问题的计算过程,用计算机进行计算的自动化。
逻辑思维更多是逻辑推理,而计算通常都是模拟计算过程。
计算思维根植于计算机强大的算力以及海量数据,计算思维不关心因果的公式,更注重过程的模拟和描述。
抽象是对问题模型的构建,自动化是对问题的实现,
计算生态与python语言
计算生态:没有顶层设计,以功能为目的。库之间广泛调用,社区庞大。库通过野蛮生长到紫髯选择。
编程不再是算法,而是搭积木,运用计算生态。
用户体验和软件产品
关心功能实现只是第一步,关心用户体验,才是目的。
方法1: 进度显示,提示用户还有多少操作要执行
方法2:异常处理,一般要对用户输入的合规性进行检查,否则程序就会报错。
方法3:打印输出,设计日志文件,打印帮助信息等等。
基本的程序设计模式
IPO:程序需要有输入,处理,输出。
自顶向下设计:不断划分程序的设计功能
模块化设计:把程序分为不同模块,方便设置模块复用
配置化设计:将程序变为引擎,把配置变为配置文件编写,关键在于接口设计。
产品定义:对用户的需求的理解。
系统架构:在应用中的数据流动,具体的设计与实现。
用户体验:从用户的角度来考虑设计。
python第三方库的安装
Pypi: Python Package Index
利用Pypi的计算生态找到适合自己的第三方库。
第三方库的pip安装方法
pip安装方法:直接用命令行输入pip 指令进行安装
主要参数:
| 参数 | 功能 | 
|---|---|
| pip install <库名称> | 安装相应的第三方库 | 
| pip install -u <库名称> | 升级相应的第三方库 | 
| pip uninstall <库名> | 卸载相应的第三方库 | 
| pip download <库名> | 下载并不安装相应的第三方库 | 
| pip show <库名> | 展示库的详细信息 | 
| pip search <关键词> | 搜索相应的关键字 | 
| pip list | 列出已安装的第三方库 | 
第三方库的集成安装方法
Anaconda主要是针对数据处理方面。
集成安装是指针对相应的功能安装第三方库。
第三方库的文件安装方法
有时使用第三方库通过pip下载到本地之后会出现安装错误。
UCI页面:可以用相应的网页安装编译后的第三方库。
模块7 OS库的使用
OS库是标准库,提供了基本的同操作系统沟通的功能。
路径操作:OS.path 字库,处理文件路径及信息。
进程管理:启动系统中的其他程序
环境参数:提供系统的软硬件信息
OS库的路径操作
OS.path 简称op
主要函数:
| 函数 | 功能 | 
|---|---|
| os.path.abspath(path) | 返回当前目录的绝对路径 | 
| os.path.normpath() | 对一个路径名进行标准化 os.path.normpath("D:/1:/2") >>>"D:\\1\\2"  | 
| os.path.relpath() | 返回一个路径相对当前路径的相对路径 os.path.relpath("C:\\PYE\\file.txt") >>>".. \\ .. \\ .. \\ PYE\\file.txt"  | 
| os.path.dirname(path) | 返回path中的路径名 os.path.dirname("C:\\PYE\\file.txt") >>>"C: \\ PYE"  | 
| os.path.basename() | 返回path中最后的文件名 os.path.basename("C:\\PYE\\file.txt") >>>"file.txt"  | 
| os.path.join(path, *path) | 把两个路径名合并在一起 os.path.join("C:/","/PYE/file.txt") >>>"C:\\PYE\\file.txt"  | 
| os.path.exists() | 判断当前路径是否存在 | 
| os.path.isfile() | 判断当前路径是否为文件 os.path.relpath("C:\\PYE\\file.txt") >>>False  | 
| os.path.isdir() | 判断当前路径是否为路径 os.path.relpath("C:\\PYE\\file.txt") >>>True  | 
| os.path.getatime() | 返回对应文件或目录上一次的访问时间 注意返回的是系统时间,需要用time.ctime()转换为可读时间  | 
| os.path.getmtime() | 返回对应文件或目录上一次的修改时间 | 
| os.path.getctime() | 返回对应文件或目录的建立时间 | 
| os.path.getsize() | 返回一个文件或目录的容量大小以字节为单位 | 
os库的进程管理
os.system()函数
有两个参数,参数一为相应的程序的目录,参数二为希望用程序打开的文件。
import os
os.system("c:\\windows\\system32\\ospaint.exe\
		   D:\\PYE\\wordcloud.png)
os库的环境参数
可以通过os库来提取主要的环境参数
| 函数 | 功能 | 
|---|---|
| os.chdir(path) | 改变当前程序操作的路径 | 
| os.getcwd() | 返回当前程序路径 | 
| os.getlogin() | 返回当前系统登陆用户名 | 
| os.cpu_count() | 返回cpu的个数 | 
| os.unrandom(n) | 返回一个n字节的随机字符串 | 
实例14:批量安装第三方库的
import os
libs = {"numpy", "matplotlib", "pillow", "sklearn", "requests"\
       "jieba", "beautifulsoup4", "wheel", "networkx", "sympy"\
       "pyinstaller", "django", "flask", "werobot", "pyqt5"\
       "pandas", "pyopeng1", "pypdf2", "docopt", "pygame"}
try:
    for lib in libs:
        os.system("pip install"+ lib)
    print("Scuccess")
except:
    print("Error")
以上内容为学习嵩天老师的python语言程序设计第八周内容的笔记。感谢嵩天老师的团队给我们带来这样优质的课程。
                    
                
                
            
        
浙公网安备 33010602011771号