汉诺塔问题规则:一次只能移动一个盘子任何一个移动,三个塔的状态必须是小盘在上,大盘在上方法:n=1:直接移动一个plateonAtoC,A->Cn=2:PutthesmallplatefromAtoB,A->BputthebigplatefromAtoC,A->CputthesmallplatefromBtoC,B->Cn=3:将A上的两个盘子通过C移动到B上,递归调用将A上剩余最大的盘子移动到C上,A->C将B上的两个盘子移动,借助A,MovetoC,调用递归n=n:借助C将A上的n-1个盘子移动到B,调用递归将A上最大的盘子移动到C,A->C移动n-1在A的帮助下在B上plate到C,并调用递归defhano(n,a,b,c):'''递归实现河内塔n:代表几个塔a:代表第一个塔,起始塔b:代表第二塔,中间过渡塔c:代表第三塔,目标塔'''如果n==1:print(a,"-->",c)返回None'''如果n==2:print(a,"-->",b)print(a,"-->",c)print(b,"-->",c)returnNone'''#在塔c的帮助下将n-1个塔从塔a移动到塔bhano(n-1,a,c,b)print(a,"-->",c)#在塔a的帮助下将n-1个塔从塔b移动到塔chano(n-1,b,a,c)a='A'b='B'c='C'n=1hano(n,a,b,c)A-->Cn=2hano(n,a,b,c)A-->BA-->CB-->Cn=3hano(n,a,b,c)A-->CA-->BC-->BA-->CB-->AB-->CA-->Cn=5hano(n,a,b,c)A-->CA-->BC-->BA-->CB-->AB-->CA-->CA-->BC-->BC-->AB-->AC-->BA-->CA-->BC-->BA-->CB-->AB-->CA-->CB-->AC-->BC-->AB-->AB-->CA-->CA-->BC-->BA-->CB-->AB-->CA-->CList(list)del:deletecommand#deldeletea=[1,2,3,4,5,6]dela[2]print(a)[1,2,4,5,6]#deldelete#如果使用del后,id的值与删除前不一样,说明删除产生了新的Lista=[1,2,3,4,5,6]print(id(a))dela[2]print(id(a))print(a)17873451003601787345100360[1,2,4,5,6]#del一个变量后不能再继续使用这个变量delaprint(a)--------------------------------------------------------------------------NameErrorTraceback(大多数recentcalllast)in1#dela变量后不能再使用这个变量---->2dela3print(a)NameError:name'a'未定义列表加法#使用加法连接两个列表a=[1,2,3,4,5]b=[5,6,7,8,9]d=['a','b','c']c=a+b+dprint(c)[1,2,3,4,5,5,6,7,8,9,'a','b','c']#使用乘号对列表进行运算#列表直接乘以一个整数#相当于将n个列表拼接起来a=[1,2,3,4,5]b=a*3print(b)[1,2,3,4,5,1,2,3,4,5,1,2,3,4,5]#隶属度运算#是判断一个元素是否在列表lista=[1,2,3,4,5,6]b=8#c的值为布尔值c=binaprint(c)b=4print(bina)FalseTrue#notina=[1,2,3,4,5]b=9print(bnotina)真列表遍历forwhile#forinlista=[1,2,3,4,5]#打印其中的元素a一个一个foriina:print(i)12345#java,c++程序员写这样的python代码foriinrange(0,len(a)):print(a[i])i+=112345b=["Iloveyou"]foriinb:print(i)Iloveyou#range#in以下变量要求为可迭代内容foriinrange(1,10):print(i)print(type(range(1,10)))123456789#while循环访问list#一般不用while遍历lista=[1,2,3,4,5,6]length=len(a)#indx代表第elist下标indx=0whileindxin4a=[["one",1,"enis"],["two",2],["three",3,4,5,6,8]]5---->6fork,vina:7print(k,"--",v)ValueError:值太多tounpack(expected2)#double-layerlistloopvariation#a是嵌套列表,或者是双层列表a=[["one",1,"enis"],["two",2,"zwei"],["three",3,"drei"]]#这个例子说明:k,v,w的个数应该和a中k,v,w的解包变量个数相同:print(k,"--",v,"--",w)one--1--enistwo--2--zweithree--3--drei列表内涵:Listcontentcreatesalistthroughasimplemethod#forcreatea=['a','b','c']#使用Lista创建一个Listb#下面代码的意思是,对于a中的所有元素,将它们一一放入新的列表b中b=[iforiina]print(b)['a','b','c']#Multiplya中的所有元素乘以10生成一个新的Lista=[1,2,3,4,5]#CreateaListwithListab#下面代码的意思是,对于a中的所有元素,将它们放入newlistb一个一个b=[i*10foriina]print(b)[10,20,30,40,50]#也可以过滤掉原来List里面的内容,然后把输入一个新的列表#比如原来的列表需要生成一个新的列表,其中包含a中所有的偶数ba=[xforxinrange(1,35)]#生成一个从1到34的列表#生成所有的偶数在一个新列表中bb=[mforminaifm%2==0]print(b)[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34]#列表生成可以嵌套#有两个列表a,ba=[iforiinrange(1,4)]#生成列表aprint(a)b=[iforiinrange(100,400)ifi%100==0]print(b)#List生成可以嵌套,等于嵌套两次for循环c=[m+nforminaforninb]print(c)#上面的代码等同于下面的代码formina:forninb:print(m+n,end="")print()#嵌套列表的生成也可以使用条件表达式c=[m+nforminaforninbifm+n<250]print(c)[1,2,3][100,200,300][101,201,301,102,202,302,103,203,303]101201301102202302103203303[101,201,102,202,103,203]关于列表的常用函数#len:Findt列表的长度a=[xforxinrange(1,100)]print(len(a))#max:找到列表中的最大值#min:类似地print(max(a))b=["man","film","python"]print(max(b))9999python#List:将其他格式的数据转换成Lista=[1,2,3]print(list(a))[1,2,3]s="我爱你"print(list(s))['I','','l','o','v','e','','y','o','u']#放置范围结果内容转换为listprint(list(range(12,19)))[12,13,14,15,16,17,18]