方法论:理解并掌握一批python程序设计思维
实践能力:会编写更有设计感的程序。
体育竞技分析:如何科学分析体育竞技比赛?
输入:球员水平;
输出:比赛可能的结果;
计算思维:模拟体育比赛,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的能力值,通过是否达到精度来判断是否跳出迭代,这样应该能得到比较好的结果。
本节的内容较为抽象。
逻辑思维、实证思维、计算思维。
抽象和自动化:抽象问题的计算过程,用计算机进行计算的自动化。
逻辑思维更多是逻辑推理,而计算通常都是模拟计算过程。
计算思维根植于计算机强大的算力以及海量数据,计算思维不关心因果的公式,更注重过程的模拟和描述。
抽象是对问题模型的构建,自动化是对问题的实现,
计算生态:没有顶层设计,以功能为目的。库之间广泛调用,社区庞大。库通过野蛮生长到紫髯选择。
编程不再是算法,而是搭积木,运用计算生态。
关心功能实现只是第一步,关心用户体验,才是目的。
方法1: 进度显示,提示用户还有多少操作要执行
方法2:异常处理,一般要对用户输入的合规性进行检查,否则程序就会报错。
方法3:打印输出,设计日志文件,打印帮助信息等等。
IPO:程序需要有输入,处理,输出。
自顶向下设计:不断划分程序的设计功能
模块化设计:把程序分为不同模块,方便设置模块复用
配置化设计:将程序变为引擎,把配置变为配置文件编写,关键在于接口设计。
产品定义:对用户的需求的理解。
系统架构:在应用中的数据流动,具体的设计与实现。
用户体验:从用户的角度来考虑设计。
Pypi: Python Package Index
利用Pypi的计算生态找到适合自己的第三方库。
pip安装方法:直接用命令行输入pip 指令进行安装
主要参数:
参数 | 功能 |
---|---|
pip install <库名称> | 安装相应的第三方库 |
pip install -u <库名称> | 升级相应的第三方库 |
pip uninstall <库名> | 卸载相应的第三方库 |
pip download <库名> | 下载并不安装相应的第三方库 |
pip show <库名> | 展示库的详细信息 |
pip search <关键词> | 搜索相应的关键字 |
pip list | 列出已安装的第三方库 |
Anaconda主要是针对数据处理方面。
集成安装是指针对相应的功能安装第三方库。
有时使用第三方库通过pip下载到本地之后会出现安装错误。
UCI页面:可以用相应的网页安装编译后的第三方库。
OS库是标准库,提供了基本的同操作系统沟通的功能。
路径操作:OS.path 字库,处理文件路径及信息。
进程管理:启动系统中的其他程序
环境参数:提供系统的软硬件信息
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.system()函数
有两个参数,参数一为相应的程序的目录,参数二为希望用程序打开的文件。
import os
os.system("c:\\windows\\system32\\ospaint.exe D:\\PYE\\wordcloud.png)
可以通过os库来提取主要的环境参数
函数 | 功能 |
---|---|
os.chdir(path) | 改变当前程序操作的路径 |
os.getcwd() | 返回当前程序路径 |
os.getlogin() | 返回当前系统登陆用户名 |
os.cpu_count() | 返回cpu的个数 |
os.unrandom(n) | 返回一个n字节的随机字符串 |
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语言程序设计第八周内容的笔记。感谢嵩天老师的团队给我们带来这样优质的课程。
原文:https://www.cnblogs.com/modered-study/p/14654488.html