汉诺塔问题
- 规则:
- 每次只能移动一个盘子
- 任意一次移动,三个塔的状态必须是小盘子在上,大盘子在上
- 方法:
- n=1:直接把A上的一个盘子移动到C上,A->C
- n=2:
- 把小盘子从A放到B上,A->B
- 把大盘子从A放到C上,A->C
- 把小盘子从B放到C上,B->C
- n=3:
- 把A上的两个盘子,通过C移动到B上去,调用递归实现
- 把A上剩下的一个最大盘子移动到C上,A->C
- 把B上两个盘子,借助于A,挪到C上去,调用递归
- n=n:
- 把A上的n-1个盘子,借助于C,移动到B上去,调用递归
- 把A上的最大盘子,也是唯一一个,移动到C上去,A->C
- 把B上n-1个盘子,借助于A,移动到C上去,调用递归
def hano(n, a, b, c):
'''
汉诺塔的递归实现
n:代表几个塔
a:代表第一个塔,开始的塔
b:代表第二个塔,中间过渡的塔
c:代表第三个塔,目标塔
'''
if n == 1:
print(a, "-->", c)
return None
'''
if n== 2:
print(a, "-->", b)
print(a, "-->", c)
print(b, "-->", c)
return None
'''
hano(n-1, a, c, b)
print(a, "-->", c)
hano(n-1, b, a, c)
a = 'A'
b = 'B'
c = 'C'
n = 1
hano(n, a, b, c)
A --> C
n = 2
hano(n, a, b, c)
A --> B
A --> C
B --> C
n = 3
hano(n, a, b, c)
A --> C
A --> B
C --> B
A --> C
B --> A
B --> C
A --> C
n = 5
hano(n, a, b, c)
A --> C
A --> B
C --> B
A --> C
B --> A
B --> C
A --> C
A --> B
C --> B
C --> A
B --> A
C --> B
A --> C
A --> B
C --> B
A --> C
B --> A
B --> C
A --> C
B --> A
C --> B
C --> A
B --> A
B --> C
A --> C
A --> B
C --> B
A --> C
B --> A
B --> C
A --> C
List(列表)
a = [1,2,3,4,5,6]
del a[2]
print(a)
[1, 2, 4, 5, 6]
a = [1,2,3,4,5,6]
print(id(a))
del a[2]
print(id(a))
print(a)
1787345100360
1787345100360
[1, 2, 4, 5, 6]
del a
print(a)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-15-a09b634934b2> in <module>
1 # del一个变量后不能再继续使用此变量
----> 2 del a
3 print(a)
NameError: name 'a' is not defined
列表相加
a = [1,2,3,4,5]
b = [5,6,7,8,9]
d = ['a', 'b', 'c']
c = a + b + d
print(c)
[1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 'a', 'b', 'c']
a = [1,2,3,4,5]
b = a * 3
print(b)
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
a = [1,2,3,4,5,6]
b = 8
c = b in a
print(c)
b = 4
print(b in a)
False
True
a = [1,2,3,4,5]
b = 9
print(b not in a)
True
列表的遍历
a = [1,2,3,4,5]
for i in a:
print(i)
1
2
3
4
5
for i in range(0,len(a)):
print(a[i])
i += 1
1
2
3
4
5
b = ["I love you"]
for i in b:
print(i)
I love you
for i in range(1,10):
print(i)
print(type(range(1,10)))
1
2
3
4
5
6
7
8
9
<class 'range'>
a = [1,2,3,4,5,6]
length = len(a)
indx = 0
while indx < length:
print(a[indx])
indx += 1
1
2
3
4
5
6
a = [["one", 1], ["two", 2], ["three", 3]]
for k,v in a:
print(k, "--", v)
one
two
three
a = [["one", 1, "enis"], ["two", 2], ["three", 3,4,5,6,8]]
for k,v in a:
print(k, "--", v)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-44-db702adbc386> in <module>
4 a = [["one", 1, "enis"], ["two", 2], ["three", 3,4,5,6,8]]
5
----> 6 for k,v in a:
7 print(k, "--", v)
ValueError: too many values to unpack (expected 2)
a = [["one", 1, "enis"], ["two", 2, "zwei"], ["three", 3, "drei"]]
for k,v,w in a:
print(k, "--", v, "--", w)
one
two
three
列表内涵:List content
a = ['a', 'b', 'c']
b = [i for i in a]
print(b)
['a', 'b', 'c']
a = [1, 2, 3, 4, 5]
b = [i*10 for i in a]
print(b)
[10, 20, 30, 40, 50]
a = [x for x in range(1,35)]
b = [m for m in a if m % 2 == 0]
print(b)
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34]
a = [i for i in range(1,4)]
print(a)
b = [i for i in range(100,400) if i % 100 == 0]
print(b)
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)
[1, 2, 3]
[100, 200, 300]
[101, 201, 301, 102, 202, 302, 103, 203, 303]
101 201 301 102 202 302 103 203 303
[101, 201, 102, 202, 103, 203]
关于列表的常用函数
a = [x for x in range(1,100)]
print(len(a))
print(max(a))
b = ["man", "film", "python"]
print(max(b))
99
99
python
a = [1,2,3]
print(list(a))
[1, 2, 3]
s = "I love you"
print(list(s))
['I', ' ', 'l', 'o', 'v', 'e', ' ', 'y', 'o', 'u']
print(list(range(12,19)))
[12, 13, 14, 15, 16, 17, 18]