注:笔记全部是跟着老师一起敲的代码,最近电脑瓦特了,所以只能用老爷机的日记本记下老师上课讲的东西,但我运行不了
特别感谢的是xx学院的的刘老师,我都是边看他的课,边学他一起敲代码,然后晚上自己看,自己理解,感谢老师。
汉诺塔问题
- 规则
1、每次移动一个盘子
2、任何时候大盘子在下面,小盘子在上面
- 方法
1、n=1:直接把A上的一个盘子移动到C上,A-》C
2、n=2:
1、把小盘子从A放到B上,A->B
2、把大盘子从A放到C上,A->C
3、把小盘子从B放到C上,B->C
3、n=3:
1、把A上的两个盘子,通过C移动到B上,调用递归实现
2、把A上剩下的一个最大盘子移动到C上,A->C
3、把B上两个盘子,借助于A,移动到C上去,调用递归
4、n=n:
1、把A上的n-1个大盘子,借助于C,移动到B上去,调用递归
2、把A上的最大盘子,也是唯一一个,移动到C上去,A->C
3、把B上n-1个盘子,借助于A,移动到C上去,调用递归
1 def hano(n,a,b,c): 2 ''' 3 汉诺塔的递归实现 4 n:代表几个盘子 5 a:代表第一个塔,开始的塔 6 b:代表第二个塔,中间过度的塔 7 c:代表第三个塔,目标塔 8 ''' 9 if n==1: 10 print(a, "-->", b) 11 if n==2: 12 print(a, "-->", b) 13 print(a, "-->", c) 14 print(b, "-->", c) 15 return None 16 #把n-1个盘子,从a塔借助于c塔,挪到b塔上去 17 hano(n-1,a,c,b) 18 print(a,"-->",c) 19 #把n-1个盘子,从b塔,借助于a塔,挪到c塔上去 20 hano(n-1,b,a,c) 21 22 a="A" 23 b="B" 24 c="C" 25 n=1 26 hano(n,a,b,c) 27 n=2 28 hano(n,a,b,c) 29 n=3 30 hano(n,a,b,c) 31 n=5 32 hano(n,a,b,c)
List(列表)
- del:删除命令
如果使del之后,id的值和删除前不一样,则说明生成了一个新的list
a=[1,2,3,4,5,6] prin(id(a)) del a(2) print(id(a))
del一个变量后不能继续使用此变量
del a print(a)
报错
列表运算
- 使用加号链接两个列表
a=[1,2,3,4,5] b=[5,6,7,8,9] d=['a','b','c'] c=a+b+d print(c)
使用乘号操作列表
列表直接跟一个整数相乘
相当于把N个列表接在一起
a=[1,2,3,4,5] b=a*3 print(b)
成员资格运算
-就是判断一个元素是否在list里面
a=[1,2,3,4,5] b=8 #c是一个布尔值 c= b in a print(c) b=4 print(b in a ) # not in a=[1,2,3,4,5] b=9 print(b not in a )
链表的遍历
- for - while # for in list a=[1,2,3,4,5] #挨个打印出来里面的元素 for i in a: print(i) b=["i love zhangsiqi"] for i in b: print(i)
range
in 后面的变量要求是可迭代的内容
for i in range(1,10): print(i) print(tyoe(range(1,10)))
while循环访问list
但一般不用while遍历list
a=[1,2,3,4,5,6] length = len(a) #index表示的是list的下标 index = 0 while index < length: print(a[index]) index += 1
双层列表循环
-a为嵌套列表,或者叫做双层列表
a = [["one,1"],["two",2],["three",3]] for k,v in a : print(k."---",v) jave,c++程序员写的python代码是这样的 index = 0 for i in range(0.len(a)): print(a[i]) i+=1
双层列表循环变异1
-a为嵌套列表,或者叫做双层列表
a = [["one",1,"eins"],["two",2],["three",3,4,5,6,7]] for k,v in a : print(k."---",v) 报错
双层列表循环变异2
a为嵌套列表,或者叫做双层列表
a = [["one",1,"eins"],["two",2,"zwei"],["three",3,"drei"]] #这个例子说明,k,v,w的个数应该跟解包出来的变量个数一致 for k,v ,win a : print(k."---",v,"--",w)
列表内涵:list content
- 通过简单方法创建列表
- for创建
a = ["a","b","c"] #用list a创建一个list b #下面代码的含义是,对于所有a中的元素,逐个放入新列表b中 b = [i for i in a ] print(b)
-对a中所有元素乘以10,生成一个新的list
a = [1,2,3,4,5,6] #用list a创建一个list b #下面代码的含义是,对于所有a中的元素,逐个放入新列表b中 b = [i*10 for i in a ] print(b)
-还可以过滤原来list中的内容并放入新列表中
-比如原有裂变a,需要把所有a中的偶数生成新的列表b
a = [x for x in range(1,35)] #生成一个从1到34的一个列表 #把a中所有偶数生成一个新列表b b = [m for m in a if m%2 ==0] print(b)
-列表生成式可以嵌套
-由两个列表a,b
a = [i for i in range(1,10)] #生成list a print(a) b = [i for i in range(100,400) if i%100 == 0]#求偶数 print(b) #列表生成可以嵌套,此时等于两个for循环嵌套 c = [m+n for m in a for n in b] print(c) #上面代码跟下面代码等价 for m in a : for n in b: print(m+n,end=" ") print() #嵌套的列表生成式也可以用条件表达式 c = [m+n for m in a for n in b if m+n<250] print(c)
关于列表的常用函数
#len:求列表的长度 a = [x for x in range(1,100)] print(len(a)) #max:求列表中的最大值 #min:同理 print(max(a)) b = ["man","female","python"] print(max(a)) #list:将其他格式的数据转换成list a = [1,2,3] print(list(a)) s = "i love zhangsiqi" print(list(s)) #把range产生的内容转换成list print(list(range(12,19)))