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)

 

posted @ 2017-02-25 18:41  崔崔0624  阅读(448)  评论(0编辑  收藏  举报
TOP