python基础-5 冒泡排序、递归
上节总结
1 一、上节内容补充回顾 2 1、lambda 3 func = lambda x,y: 9+x 4 参数: x,y 5 函数体:9+x ==》 return 9+x 6 func: 函数名 7 8 def func(x,y): 9 return x + 9 10 def func(x,y): 11 return x + 9 12 13 func = lambda x,y: 9+x 14 15 扩展:函数名可以当做参数传递 16 函数名() ==》 执行函数 17 函数名 ==》 代指函数 18 19 2、内置 20 xxx 21 3、open文件操作 22 open() 23 1、文件路径 24 2、模式 25 基本操作: 26 r,只读 27 w,只写(先清空) 28 x,不存在,创建,存在,报错: 只写 29 a,追加,只写,不可读 30 二进制 31 rb 32 wb 33 xb 34 ab 35 + 36 r+,读写: 37 读,0开始读取 38 写,先读了,往最后追加。 39 先读,最后追加 40 主动seek,写从当前指针向后写 41 ==》 42 43 w+,读写 44 x+,读写 45 a+,读写 46 读,最后位置读取 47 写, 48 最后追加 49 主动seek,还是最后追加 50 51 r+ 最常用 52 3、文件操作 53 54 truncate,截取前面 55 read 56 read(1) :无b,字符,取决于打开的方式 57 read(1) :有b,字节, 58 write 59 str :无b,字符串 60 bytes :有b,字节 61 62 readline 63 只读取一行 64 65 readlines: 66 [“第一行”, "第二行"] 67 68 xrealines: 2.7 69 for line in f.xrealines(): 70 line 71 72 f = open() 73 for i in f: 74 print(i) 75 76 flush 77 强行刷入硬盘 78 79 close 80 81 tell() 获取指针位置 82 seek() 跳转到某个位置 83 84 4、 whth open(xx) as f: 85 print 86 87 5、with open(xx) as f1 ,open(xx) as f2: 88 89 查看总结内容
函数作为参数传入另一个函数
1 # 2 函数参数 2 def f1(): 3 return "F1" 4 def f2(arg): 5 arg() 6 return 'F2' 7 8 # 变量 x =123 9 # 函数名 f1 = 对应def f1 内存地址 10 # 函数名 f2 = 对应def f2 内存地址 11 # print(f1) 12 13 # 执行f2函数,f1当传参 14 f2(f1)
f1,代指这个函数名,没有执行。这时f1就是一个变量,可以当作参数传入另外一个函数
f1(),去执行这个函数。
filter 方法的实现
1 def myfilter(func, args): 2 #func,函数名,func=func_t 3 result = [] 4 for i in args: 5 if func(i):#执行接收的函数,并获取返回值 6 result.append(i) 7 return result 8 9 def func_t(x): 10 if x > 22: 11 return True 12 else: 13 return False 14 15 r = myfilter(func_t, [11, 22, 33, 44, 55]) 16 print(r) 17 18 C:\Python35\python3.exe E:/py/55/learn-python/oldboy/5/myFilter.py 19 [33, 44, 55]
map方法实现
1 def mymap(func, args): 2 # func=>f1函数 3 # args=>[11,22,33,44,55] 4 result = [] 5 for i in args: 6 result.append(func(i)) # func(11)=》f1(11) 7 return result 8 9 def f1(x): 10 return x + 100 11 12 r = mymap(f1, [11, 22, 33, 44, 55]) 13 print(r) 14 15 C:\Python35\python3.exe E:/py/55/learn-python/oldboy/5/my_map.py 16 [111, 122, 133, 144, 155]
1、冒泡排序
1 #互换两个参数值 2 a1 = 123 3 a2 = 456 4 5 #引入temp中间值 6 # # temp = a1 7 # # a1 = a2 8 # # a2 = temp 9 # # print(a1, a2) 10 11 #不引入temp 12 a1 = a1 + a2 #先将两个数的和赋值给其中一个 13 a2 = a1 - a2 #用和减去自己,就是新的值,a1 14 a1 = a1 - a2 #在用和减去新的另外一个数,就变换了。a2 15 print(a1, a2)
需求:请按照从小到大对列表 [13, 22, 6, 99, 11] 进行排序
思路:相邻两个值进行比较,将较大的值放在右侧,依次比较!
1 li = [13, 22, 6, 99, 11] 2 3 for m in range(4): # 等价于 #for m in range(len(li)-1): 4 if li[m]> li[m+1]: 5 temp = li[m+1] 6 li[m+1] = li[m] 7 li[m] = temp 8 9 第一步
1 li = [13, 22, 6, 99, 11] 2 3 for m in range(4): # 等价于 #for m in range(len(li)-1): 4 if li[m]> li[m+1]: 5 temp = li[m+1] 6 li[m+1] = li[m] 7 li[m] = temp 8 9 for m in range(3): # 等价于 #for m in range(len(li)-2): 10 if li[m]> li[m+1]: 11 temp = li[m+1] 12 li[m+1] = li[m] 13 li[m] = temp 14 15 for m in range(2): # 等价于 #for m in range(len(li)-3): 16 if li[m]> li[m+1]: 17 temp = li[m+1] 18 li[m+1] = li[m] 19 li[m] = temp 20 21 for m in range(1): # 等价于 #for m in range(len(li)-4): 22 if li[m]> li[m+1]: 23 temp = li[m+1] 24 li[m+1] = li[m] 25 li[m] = temp 26 print li 27 28 第二步
1 li = [13, 22, 6, 99, 11] 2 3 for i in range(1,5): 4 for m in range(len(li)-i): 5 if li[m] > li[m+1]: 6 temp = li[m+1] 7 li[m+1] = li[m] 8 li[m] = temp 9 10 第三步
1 #冒泡排序练习 2 li = [1, 22, 11, 55, 23, 33, 12, 56, 4, 7] 3 le = len(li) 4 while le > 0: 5 for i in range(le - 1): 6 if li[i] > li[i + 1]: 7 li[i] = li[i] + li[i + 1] 8 li[i + 1] = li[i] - li[i + 1] 9 li[i] = li[i] - li[i + 1] 10 le -= 1 11 print(li)
2、递归
利用函数编写如下数列:
斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368
1 def func(arg1,arg2): 2 if arg1 == 0: 3 print arg1, arg2 4 arg3 = arg1 + arg2 5 print arg3 6 func(arg2, arg3) 7 8 func(0,1)
递归中的return返回值
函数是一个功能块,该功能到底执行成功与否,需要通过返回值来告知调用者。
以上要点中,比较重要有参数和返回值:
1 如下 n5 返回值 返回给其调用者 再返回给上一层调用者。 如果 n4 n3 n2 n1 其中一个不加return 则返回none 2 def n5(): 3 return 5 4 def n4(): 5 return n5() 6 def n3(): 7 return n4() 8 def n2(): 9 return n3() 10 def n1(): 11 return n2() 12 13 ret1 = n1() 14 print(ret1)
总结: return 函数()
先调用函数,然后在return将获取的返回这返回给调用这个函数的变量
函数返回值
递归返回值图理解、
同上图类似,只不过函数名为同一个了
练习 利用递归 打印 斐波那契数列第10个数
1 def func(d, a1, a2): 2 print(a1,a2) 3 if d == 10: 4 return a1 5 a3 = a1 + a2 6 return func(d+1, a2, a3) 7 8 ret = func(1, 0, 1) 9 print(ret)