think in python
我们使用过的内置函数中,有一部分会返回结果,比如 math的
我们写一个有返回值的函数,计算给定半径的圆的面积,例如这个:
def area(raduis):
temp = math.pi * radius*2
return temp
当然可以简化这个版本
def area(raduis):
return math.pi * radius * 2 #省去temp变量这个步骤
有时候会有不同分支,根据不同分支返回不同的结果:
def absoulte_value(x):
if x<0:
return -x
else:
return x
每次只增加和测试一小部分代码,来避免长时间的调试过程
一个增量开发的示例(查找2点之间的距离,给定坐标 x1,y1 和 x2,y2):
# 第一步可以点定义函数形参以及返回值
def distance(x1,y1,x2,y2):
return 0.0
#第二步 可以开始计算2个点之间距离差了
def distance(x1,y1,x2,y2):
dx = x2-x1
dy = y2-y2
print dx
print dy
return 0.0
#第三步 计算dx dy的平方
def distance(x1,y1,x2,y2):
dx = x2-x1
dy = y2-y2
dsquared = dx**2+dy**2
print dsquared
return 0.0
#第四步 可以返回结果了
def distance(x1,y1,x2,y2):
dx = x2-x1
dy = y2-y2
dsquared = dx**2+dy**2
result = math.sqrt( dsquared)
return result
这种开发过程的关键点是:
在函数中可以调用其他函数。这个能力被称为组合
我们写个函数,接收2个点,圆心和圆周上的一点,计算圆的面积, 这里用到组合以前的函数。
def distance(x1,y1,x2,y2):
dx = x2-x1
dy = y2-y2
dsquared = dx**2+dy**2
result = math.sqrt( dsquared)
return result
def area(raduis):
return math.pi * radius * 2
def circle_area(xc,yc,xp,yp):
radius = distance(sx,yc,xp,yp)
return area(radius)
返回布尔值
def is_divisible(x,y):
if x%y==0:
return True
else :
return False
阶乘函数可以通过return
值和递归自己 来完成任务。
def factorial(n):
if n==0:
return 1
else:
recurse = factorial(n-1)
result = n*recurse
return result
另一个是 斐波那契数列:
def fibonacci(n):
if n==0:
return 0
elif n==1:
return 1
else:
return fibonacci(n-1)+fibonacci(n-2)
如果不检查传入参数的类型,很多时候会让程序报错
如果我们给factorial(1.5)
这样执行,那么会报错。
我们有2个方法:
None
def factorial2(n): if not isinstance(n,int): print "非整数" return None elif n<0: print "不能为负数" return None elif n==0: return 1 else: return n*factorial2(n-1)
给函数添加print 往往能帮我们调试很多问题
例子:
def debug_factorial(n):
space = ' '*(4*n)
print space, "factorial",n
if n==0:
print space, "returning 1"
return 1
else:
recurse = debug_factorial(n-1)
result = n*recurse
print space, "returning",result
return result
写一个compare
函数,如果x>y
返回1,如果x==y
返回0 ,如果x<y
返回-1
```
def compare(x,y):
if x>y:
return 1
elif x==y:
return 0
else:
return -1
hypotenuse
给定直角三角形的两个直角边的长度时,它返回斜边的长度。def hypotenuse(x,y): return math.sqrt(x**2+y**2)
is_between
当x<=y<=z
返回True 其他返回Falsedef is_between(x,y,z): if x<=y<=z: return True else: return False
noon
或者asdf
可以通过该函数判断是否回文。def check_hui(w): def first(word): return word[0] def last(word): return word[-1] def middle(word): return word[1:-1] if len(w)<=1: return True if first(w) != last(w): return False return check_hui(middle(w))
is_power
接受形参a和b 当a是b的乘方时返回True.def is_power(a,b): if a%b==0 and (a/b)%b==0: return True else: return False
求a和b的最大公约数(GCD)
def gcd(a, b): if a < b: a, b = b, a while b != 0: temp = a % b a = b b = temp return a