think python学习笔记(4)

重构
当我们书写circle时,可以复用polygon,因为多边形和圆形非常相似,但是arc(弧形)就会有所不同
因为前者计算运用了中心角360,但是弧度并不是

第一种代替方案:
是在arc函数中直接书写出画图的运算,不使用函数

def arc(t,n,angle):
	arc_length = 2*math.pi*r*angle/360
	n = int(arc_length/3) + 1
	#n要取整数
	step_length = arc_length/n
	step_angle = angle/n
	for i in range(n):
		t.fd(step_length)
		t.lt(step_angle)

这个函数后半部分跟polygon重合程度较高,所以单独创造一个更通用的函数,相对于polygon增加一个形参,创建polyline

def polyline(t,n,length,angle):
	for i in range(n):
		t.fd(length)
		t.lt(angle)

想要保留原函数的接口,又想要更加通用的函数,所以将其内部变为更小的单元组成
利用新写的polyline重写polygon和arc

def polygon(t,n,length):
	angle = 360.0/n
	polyline(t,n,length,angle)

def arc(t,r,angle):
	arc_length = 2*math.pi*r*angle/360
	n = int(arc_length/3)+1
	step_length = arc_length/n
	step_angle = float(angle)/n
	polyline(t,n,step_length,step_angle)
#最后用arc重写circle
def circle(t,r):
	arc(t,r,360)	

重新整理一个程序以改进函数接口的促进代码复用的这个过程,被称作重构。在书写过程中,发现arc和polygon的代码有高重合度的部分,所以我们把它单独挑出来写成一个函数

开发方案
开发计划是一种编写程序的过程,我们在这个例子中使用了封装和泛化
1.从没有函数但是能正常运行开始
2.挑选重合的部分转化为函数
3.通过适当的增加形参,泛化该函数
4.寻找适当的部分重构函数,将函数变为更小的单元

重点在于一边编程一边设计,简化自己的程序

文档字符串
文档字符串是位于函数开始位置的一个字符串,解释了函数的接口(多行注释)
按照惯例,所有的文档字符串都是三重引号的字符串,也被称为多行字符串,因为三重引导允许字符串超过一行
用于解释函数的关键信息
文档字符串是接口设计中重要的一部分,一个良好的接口应该很好解释,不然需要重新设计

调试
接口像是函数和调用者之间的合同,调用者同意提供合适的参数,函数同意完成相应的工作
例:polyline函数需要四个实参,t必须是一个Turtle,n必须是一个整型数,length应该是一个正数,angle必须是一个数,单位是度数
这些要求被称为先决条件,因为在函数执行前就成立了。函数结束时的条件是后置条件,后置条件包括函数预期的效果以及任何其他附带效果
先决条件不满足是调用一方bug
后置条件不满足是函数内部bug

条件和递归
能够根据程序的状态执行不同命令的if语句
首先介绍两个新的运算符:地板除(floor division)和求余(modulus)

地板除和求余
地板除运算符先做除法,然后将结果保留到正数
求余运算符
会将两个数相除,然后返回余数

hours = minutes//60
#求余
remainder = minutes%60

求余常用于判断能否整除,或者用于提取个位或十位的数字

布尔表达式
返回值是真或者假
如果为真是True,假是False
(与C++不同,c++本质是0或1,返回值也是0或1)
true和false是bool类型的特殊值,并不是字符串

关系运算符

逻辑运算符
有三个逻辑运算符:and,or和not。
在python中任何非0的数字都被解释为真

有条件的执行
最简单的形式是if语句

if x>0:
	print(x)

if之后的布尔表达式被称为条件语句,如果为真,缩进的语句会被执行,如果为假,那么会跳过
if语句也是由一个句头跟着一个缩进的语句体,类似的语句被称为复合语句
有时一条语句都没有的语句体也是有用的,这种情况下可以使用pass,这样程序就什么都不会做

if x<0:
	pass

二选一执行
if语句的第二种形式是二选一执行
这些选择被称为分支

if x%2 == 0:
	print(1)
else:
	print(0)	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值