python基础-5 冒泡排序、递归
上节总结
一、上节内容补充回顾
1、lambda
func = lambda x,y: 9+x
参数: x,y
函数体:9+x ==》 return 9+x
func: 函数名 def func(x,y):
return x + 9
def func(x,y):
return x + 9 func = lambda x,y: 9+x 扩展:函数名可以当做参数传递
函数名() ==》 执行函数
函数名 ==》 代指函数 2、内置
xxx
3、open文件操作
open()
1、文件路径
2、模式
基本操作:
r,只读
w,只写(先清空)
x,不存在,创建,存在,报错: 只写
a,追加,只写,不可读
二进制
rb
wb
xb
ab
+
r+,读写:
读,0开始读取
写,先读了,往最后追加。
先读,最后追加
主动seek,写从当前指针向后写
==》 w+,读写
x+,读写
a+,读写
读,最后位置读取
写,
最后追加
主动seek,还是最后追加 r+ 最常用
3、文件操作 truncate,截取前面
read
read(1) :无b,字符,取决于打开的方式
read(1) :有b,字节,
write
str :无b,字符串
bytes :有b,字节 readline
只读取一行 readlines:
[“第一行”, "第二行"] xrealines: 2.7
for line in f.xrealines():
line f = open()
for i in f:
print(i) flush
强行刷入硬盘 close tell() 获取指针位置
seek() 跳转到某个位置 4、 whth open(xx) as f:
print 5、with open(xx) as f1 ,open(xx) as f2: 查看总结内容
函数作为参数传入另一个函数
# 2 函数参数
def f1():
return "F1"
def f2(arg):
arg()
return 'F2' # 变量 x =123
# 函数名 f1 = 对应def f1 内存地址
# 函数名 f2 = 对应def f2 内存地址
# print(f1) # 执行f2函数,f1当传参
f2(f1)
f1,代指这个函数名,没有执行。这时f1就是一个变量,可以当作参数传入另外一个函数
f1(),去执行这个函数。
filter 方法的实现
def myfilter(func, args):
#func,函数名,func=func_t
result = []
for i in args:
if func(i):#执行接收的函数,并获取返回值
result.append(i)
return result def func_t(x):
if x > 22:
return True
else:
return False r = myfilter(func_t, [11, 22, 33, 44, 55])
print(r) C:\Python35\python3.exe E:/py/55/learn-python/oldboy/5/myFilter.py
[33, 44, 55]
map方法实现
def mymap(func, args):
# func=>f1函数
# args=>[11,22,33,44,55]
result = []
for i in args:
result.append(func(i)) # func(11)=》f1(11)
return result def f1(x):
return x + 100 r = mymap(f1, [11, 22, 33, 44, 55])
print(r) C:\Python35\python3.exe E:/py/55/learn-python/oldboy/5/my_map.py
[111, 122, 133, 144, 155]
1、冒泡排序
#互换两个参数值
a1 = 123
a2 = 456 #引入temp中间值
# # temp = a1
# # a1 = a2
# # a2 = temp
# # print(a1, a2) #不引入temp
a1 = a1 + a2 #先将两个数的和赋值给其中一个
a2 = a1 - a2 #用和减去自己,就是新的值,a1
a1 = a1 - a2 #在用和减去新的另外一个数,就变换了。a2
print(a1, a2)
需求:请按照从小到大对列表 [13, 22, 6, 99, 11] 进行排序
思路:相邻两个值进行比较,将较大的值放在右侧,依次比较!
li = [13, 22, 6, 99, 11] for m in range(4): # 等价于 #for m in range(len(li)-1):
if li[m]> li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp 第一步
li = [13, 22, 6, 99, 11] for m in range(4): # 等价于 #for m in range(len(li)-1):
if li[m]> li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp for m in range(3): # 等价于 #for m in range(len(li)-2):
if li[m]> li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp for m in range(2): # 等价于 #for m in range(len(li)-3):
if li[m]> li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp for m in range(1): # 等价于 #for m in range(len(li)-4):
if li[m]> li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp
print li 第二步
li = [13, 22, 6, 99, 11] for i in range(1,5):
for m in range(len(li)-i):
if li[m] > li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp 第三步
#冒泡排序练习
li = [1, 22, 11, 55, 23, 33, 12, 56, 4, 7]
le = len(li)
while le > 0:
for i in range(le - 1):
if li[i] > li[i + 1]:
li[i] = li[i] + li[i + 1]
li[i + 1] = li[i] - li[i + 1]
li[i] = li[i] - li[i + 1]
le -= 1
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
def func(arg1,arg2):
if arg1 == 0:
print arg1, arg2
arg3 = arg1 + arg2
print arg3
func(arg2, arg3) func(0,1)
递归中的return返回值
函数是一个功能块,该功能到底执行成功与否,需要通过返回值来告知调用者。
以上要点中,比较重要有参数和返回值:
如下 n5 返回值 返回给其调用者 再返回给上一层调用者。 如果 n4 n3 n2 n1 其中一个不加return 则返回none
def n5():
return 5
def n4():
return n5()
def n3():
return n4()
def n2():
return n3()
def n1():
return n2() ret1 = n1()
print(ret1)
总结: return 函数()
先调用函数,然后在return将获取的返回这返回给调用这个函数的变量
函数返回值
递归返回值图理解、
同上图类似,只不过函数名为同一个了
练习 利用递归 打印 斐波那契数列第10个数
def func(d, a1, a2):
print(a1,a2)
if d == 10:
return a1
a3 = a1 + a2
return func(d+1, a2, a3) ret = func(1, 0, 1)
print(ret)
python基础-5 冒泡排序、递归的更多相关文章
- Python基础(函数-递归)
本章内容: 深浅拷贝 函数(全局与局部变量) 内置函数 文件处理 三元运算 lambda 表达式 递归(斐波那契数列) 冒泡排序 深浅拷贝 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝 ...
- python基础4之递归、lambda、深浅copy
内容概要: 一.递归 二.匿名函数 三.关于python中的深浅拷贝与赋值 一.递归 递归就是函数本身调用自己,直到满足指定条件之后一层层退出函数 递归特性: 必须有一个明确的结束条件 每次进入更深一 ...
- python 基础篇 16 递归和二分数查找与编码补充回顾
编码回顾补充: 回顾编码问题: 编码相当于密码本,关系到二进制与看懂的文字的的对应关系. 最早期的密码本: ascii码:只包含英文字母,数字,特殊字符. ...
- Python基础之初识递归
初识递归 递归的定义: 在一个函数里再调用这个函数本身,这种魔性的使用函数的方式就叫做递归. 递归的最大深度--997 递归函数不受外力的阻止会一直执行下去,python为了杜绝此类现象,强制将递归层 ...
- Python开发【第一篇】Python基础之函数递归
函数递归 递归的本质: 就是一个函数调用另外一个函数. def d(): return '123' def c(): r = d() return r def b(): r = c() return ...
- python基础——异常处理、递归
异常处理 while True: try: num1 = int(input('num1:')) num2 = int(input('num2:')) result = num1 + num2 exc ...
- Day3 - Python基础3 函数、递归、内置函数
Python之路,Day3 - Python基础3 本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8. ...
- Python基础(协程函数、内置函数、递归、模块和包)-day05
写在前面 上课第五天,打卡: 凭着爱,再回首: 一.协程函数(生成器:yield的表达式形式) 1.yield 的语句形式: yield 1 - 这种方式在 Python基础(函数部分)-day04 ...
- 十四. Python基础(14)--递归
十四. Python基础(14)--递归 1 ● 递归(recursion) 概念: recursive functions-functions that call themselves either ...
随机推荐
- Codeforces1234F. Yet Another Substring Reverse(状压dp)
题目链接:传送门 思路: 由于只能翻转一次子串,就相当于找出两个不连续的子串,把在后面的一个子串翻转过来,和第一个子串拼接. 因为题目仅要求子串中的字符不重复,所以字符的先后顺序无关,翻转的操作就相当 ...
- Codeforces 955 LR询问 多次幂处理
A 模拟题 #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset((a),b,sizeof(a)) ...
- index 索引
1.创建表 drop table if exists kg_fk_user;create table kg_fk_user(id int,name string)row format delimite ...
- 作用域变量 var
var没有块级作用域,定义后在当前闭包中都可以访问,如果变量名重复,就会覆盖前面定义的变量,并且也有可能被其他人更改. 变量名重复,就会覆盖前面定义的变量,并且也有可能被其他人更改: console. ...
- java:集合输出之foreach输出三
java:集合输出之foreach输出三 foreach输出: List<String> allList = new ArrayList<String>(); allList. ...
- 【NOIP2016提高A组模拟8.14】疯狂的火神
题目 火神为了检验zone的力量,他决定单挑n个人. 由于火神训练时间有限,最多只有t分钟,所以他可以选择一部分人来单挑,由于有丽子的帮助,他得到了每个人特定的价值,每个人的价值由一个三元组(a,b, ...
- 关闭DELPHI 欢迎页
打开注册表 HKEY_CURRENT_USER\Software\Embarcadero\BDS\20.0\Known IDE Packages(20.0为版本号) 将$(BDS)\Bin\start ...
- Spring——IOC与Bean容器
[IOC] (1)IOC:控制反转,控制权的转移,应用程序本身不负责依赖对象的创建和维护,而是由外部容器负责创建和维护.也就是说由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中 (2)DI: ...
- 登陆一个系统时,前端js实现的验证,记住密码等功能
记住密码部分: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <m ...
- 使用maven如何生成源代码的jar包
http://hw1287789687.iteye.com/blog/1943157 Maven build...