计算机二级python备考笔记(八)

Python计算生态

计算思维
实证思维:实验和验证,物理
逻辑思维:推理和演绎,数学
计算思维:设计和构造,计算机
计算思维的本质是抽象abstraction和自动化automation

程序设计方法论
最为有效的方法:自顶而下设计
总问题-小问题-碎片化-组合

羽毛球规则分析:
两个球员在一个有四面边界的场地上用球拍击球。开始 比赛时,其中一个球员首先发球。接下来球员交替击球, 直到可以判定得分为止,这个过程称为回合。当一名球 员未能进行一次合法击打时,回合结束。 n 未能打中球的球员输掉这个回合。如果输掉这个回合的 是发球方,那么发球权交给另一方;如果输掉的是接球 方,则仍然由这个回合的发球方继续发球。 n 总之,每回合结束,由赢得该回合的一方发球。球员只 能在他们自己的发球局中得分。首先达到15分的球员赢 得一局比赛。

①打印程序介绍,main(),printIntro()

#MatchAnalysis.py
def printIntro():
	print('模拟羽毛球比赛')
	print('程序需要A,B能力值,比赛场数')

②程序参数:probA,probB,n,goal
获得用户输入,getInputs()

def getInputs():
	a = eval(input('A能力值')
	b = eval(input('B能力值')
	n = eval(input('场次n')
	return a, b, n

③利用能力值probA,probB,模拟n场比赛,simNgames()是整个程序的核心

def simNgames(n, probA, probB):
	winA, winB = 0, 0
	for i in range(0, n):
		scoreA, scoreB = simOnegame(probA, probB)
		if scoreA > scoreB:
			winA += 1
		else :
			winB += 1
	return winA, winB	
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(scoreA, scoreB):
	return scoreA == 15 or scoreB == 15

④输出A,B获胜场数和概率,printOutputs()
原问题化为四个独立函数,每层设计确定参数和返回值为重点,忽略其他细节的过程叫抽象,总体为发现功能并抽象功能的过程

def pritnOutputs(winA, winB):
	n = winA + winB
	print('共{}比赛'.format(n))
	print('A获胜{},获胜概率{}'.format(winA, winA / n))
	print('B获胜{},获胜概率{}'.format(winB, winB / n))

自底而上执行
执行中等程序最好的办法是从结构层最底层开始,逐步上升。
先运行和测试每一个基本函数,再测试基础组成的整体函数。
Python使用import保留字辅助开展单元测试
测试gameover()

import MatchAnalysis
MatchAnalysis.gameover(10, 15)	#True
MatchAnalysis.gameover(10, 1)	#False

测试simOnegame()

MatchAnalysis.simOnegame(.45, .5)
#(9, 15)
MatchAnalysis.simOnegame(.45, .5)
#(15, 13)

计算生态
标准库270
第三方库

基本内置函数
68个内置函数
abs(x)
all(x)
any(x)
bin(x)
bool(x)
chr(x)
complex(i,j)
dict(x)
divmod(x,y)
eval(s)
exec(s) exec(‘a=1+9’) a=10
float(x)
hex(x)
input(x)
int(x)
list(x)
max()
min()
oct(x)
open(filename, r)
ord(x) 返回UNcode值
pow(x, y)
print()
range(1,5,2)
reversed(x) 逆序遍历
round(x)
set([1,1,1]) 转换集合类型
sorted(x) 排序
str()
sum()
type()

web页面元素提取
四个步骤:
读取html文件,getHTMLlines()
解析并提取图片链接,extractImageUrls()
提取到屏幕,showResults()
保存为文件,saveResult()

def main():
	inputfile = 'wzry.html'
	outputfile = 'wzry_urls.txt'
	htmllines = getHTMLlines(inputfile)
	imageurls = extractImageUrls(htmllines)
	showResult(imageurls)
	saveResult(outputfile, imageurls)

getHtmLlines()读取HTML文件内容,将结果转变为分行列表,在open()中加入encoding,采用utf-8打开文件

def getHTMLlines(htmlpath):
	f = open(htmlpath, 'r', encoding = 'utf-8')
	ls = f.readlines()
	f.close()
	return ls

extractImageUrls()是程序的核心,用于解析文件并提取图像的Url,观察发现,图像采用img标签显示,例如:<img data-src=“http://shp.qpic.cn/ishow/2735092717/1601197657_84828260_29111_sProdImgNo_1.jpg/200” src=“http://shp.qpic.cn/ishow/2735092717/1601197657_84828260_29111_sProdImgNo_1.jpg/0” width=“215” height=“120” alt=“小乔-天鹅之梦”>

<img开头是图像标签的特点,src=所引导的URL是这个图像的真实位置,通过字符串操作提取其中的图像链接

def extractImageUrls(htmllist):
	urls = []
	for line in htmllist:
		if 'img' in line:
			url = line.split('src')[-1].split('"')[1]
			if 'http' in url:
				urls.append(url)
	return urls

showResult()将连接输出到屏幕上

def showResult(urls):
	count = 0
	for url in urls:
		print('第{:2}个url:{}'.format(count, url))
		count += 1

saveResult()保存结果到文件

def saveResult(filepath, urls):
	f = open(filepath, 'w')
	for url in urls:
		f.write(url + '\n')
	f.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值