汉诺塔问题

规则:

每次只能移动一个盘子

任意一次移动,三个塔的状态必须是小盘子在上,大盘子在上

方法:

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

'''

# 把n-1个塔,从a塔借助于c塔,挪到b塔上去

hano(n-1, a, c, b)

print(a, "-->", c)

# 把n-1个塔,从b塔,借助于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(列表)

del:删除命令

# del 删除

a = [1,2,3,4,5,6]

del a[2]

print(a)

[1, 2, 4, 5, 6]

# del 删除

# 如果使用del之后,id的值和删除前不一样,则说明删除生成了一个新的List

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一个变量后不能再继续使用此变量

del a

print(a)

---------------------------------------------------------------------------

NameError Traceback (most recent call last)

in

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']

# 使用乘号操作列表

# 列表直接跟一个整数想乘

# 相当于把n个列表接在一起

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]

# 成员资格运算

# 就是判断一个元素是否在列表list里边

a = [1,2,3,4,5,6]

b = 8

# c的值是一个布尔值

c = b in a

print(c)

b = 4

print(b in a)

False

True

# not in

a = [1,2,3,4,5]

b = 9

print(b not in a)

True

列表的遍历

for

while

# for in list

a = [1,2,3,4,5]

# 挨个打印a里边的元素

for i in a:

print(i)

1

2

3

4

5

# java, c++ 程序员写的python代码是这样的

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

# range

# in 后面的变量要求是可以迭代的内容

for i in range(1,10):

print(i)

print(type(range(1,10)))

1

2

3

4

5

6

7

8

9

# while循环访问list

# 一般不用while遍历list

a = [1,2,3,4,5,6]

length = len(a)

# indx表示的是list的下标

indx = 0

while indx < length:

print(a[indx])

indx += 1

1

2

3

4

5

6

# 双层列表循环

# a为嵌套列表,或者叫双层列表

a = [["one", 1], ["two", 2], ["three", 3]]

for k,v in a:

print(k, "--", v)

one -- 1

two -- 2

three -- 3

# 双层列表循环变异

# a为嵌套列表,或者叫双层列表

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)

in

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为嵌套列表,或者叫双层列表

a = [["one", 1, "enis"], ["two", 2, "zwei"], ["three", 3, "drei"]]

# 这个例子说明:k,v,w的个数应该跟解包出来的变量个数一致

for k,v,w in a:

print(k, "--", v, "--", w)

one -- 1 -- enis

two -- 2 -- zwei

three -- 3 -- drei

列表内涵:List content

通过简单的方法创作列表

# for 创建

a = ['a', 'b', 'c']

# 用List a创建一个List b

# 下面的代码的含义是,对于所有a中的元素,逐个放入新列表b中

b = [i for i in a]

print(b)

['a', 'b', 'c']

# 对a中所有元素乘以10,生成一个新List

a = [1, 2, 3, 4, 5]

# 用List a创建一个List b

# 下面的代码的含义是,对于所有a中的元素,逐个放入新列表b中

b = [i*10 for i in a]

print(b)

[10, 20, 30, 40, 50]

# 还可以过滤原来List中的内容并放入新列表

# 比如原有列表,需要把所有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)

[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34]

# 列表生成式可以嵌套

# 有两个列表a,b

a = [i for i in range(1,4)] # 生成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)

[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]

关于列表的常用函数

# len:求列表长度

a = [x for x in range(1,100)]

print(len(a))

# max:求列表中的最大值

# min:同理

print(max(a))

b = ["man", "film", "python"]

print(max(b))

99

99

python

# List:将其他格式的数据转换成List

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']

# 把range产生的内容转换成list

print(list(range(12,19)))

[12, 13, 14, 15, 16, 17, 18]

python 遍历内嵌tuple_python内置数据结构list、set、dict、tuple(一)相关推荐

  1. 内嵌iframe_内嵌页面session超时,内嵌页面显示登录界面问题解决方案

    内嵌页面session超时,内嵌页面显示登录界面问题解决方案 我们在开发web项目的时候 经常用到iframe嵌套,这里的话 不管是开发的时候,还是正式环境使用.当session超时,或者重启项目,内 ...

  2. java内嵌_Java内嵌类

    1.1. 内嵌类 1.1.1. 代码 /* * To change this template, choose Tools | Templates * and open the template in ...

  3. 【Redis源代码剖析】 - Redis内置数据结构之压缩字典zipmap

    原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/51111230 今天为大家带来Redis中zipmap数据结构的分析,该结构定义在 ...

  4. Go语言学习 二十一 内嵌

    本文最初发表在我的个人博客,查看原文,获得更好的阅读体验 在像Java这种语言中,有子类(或者继承)的概念,通过继承复用已有的功能或属性,与继承不同,Go中使用组合的方式来完成已有实现的复用,这种做法 ...

  5. 8.局部变量/全局变量global/内嵌函数/闭包nonlocal

    函数:有返回值 过程:无返回值 注解:在python中,只有函数(每个函数都有返回值),没有过程>>> def hello():print("first")> ...

  6. X86_64 GNU汇编、寄存器、内嵌汇编

    文章目录 一.汇编语言 二.指令 数据传输指令 栈操作指令 push pop 运算指令 位操作 比较操作指令 标志寄存器 流控制指令 三.伪指令 .equ .rept .endr .lcomm .gl ...

  7. 【数据库】oracle数据库----内嵌视图

    关系视图是数据库对象,创建关系视图实际是对查询定义可重用的需求.但有时,查询定义并不会被重用.此时,创建关系视图便不再适宜------过多的关系视图势必增加数据库的维护成本.oracle提供了内嵌视图 ...

  8. 更改span标签样式_CSS 内嵌样式

    前面一节我们讲了行内样式,但是行内样式的缺点就是样式不能重用.例如当有好多个 标签,我们希望所有的 标签的样式都一致,那么需要在每个标签中都写一遍,这么会很麻烦,也会增加很多代码. 那么为了解决这个问 ...

  9. html5内嵌式格式,如何使用内嵌式引入css样式表

    引入方法:将CSS代码集中写在HTML文档的" "头部标签中,并且用"". 本教程操作环境:windows7系统.CSS3&&HTML5版.De ...

最新文章

  1. 二、Java面向对象(7)_封装思想——this关键字
  2. 在sublime text 3中安装中文支持
  3. Socket.io 深入理解
  4. win10设置Python程序定时运行(设置计划任务)
  5. element-UI table自定义表头
  6. 1196971406
  7. plsql的异常提示怎么定位_PLSQL 异常处理(转)
  8. 程序员干货学习资源(持续更新)
  9. ECTOUCH系统默认模板是有显示销量的,但是销量一直为0,第二种方法OK
  10. 计算机系统时microsoft账号是,电脑microsoft账户登不进去
  11. SQL考点之存储过程、存储函数、游标
  12. R语言 重命名指定列
  13. STM32CubeMX学习笔记(44)——USB接口使用(HID按键)
  14. Comet OJ - 2019国庆欢乐赛 D1 入学考试 (简单版)
  15. 【力扣周赛】第343场周赛
  16. 将jpg图片转换成yuv420(NV12)数据文件
  17. 81000306 MSN不能登录
  18. 移动前端—图片压缩上传实践
  19. Python的PyYAML模块详解
  20. crsctl start/stop  crs 和 crsctl start/stop cluster

热门文章

  1. 解决XP的IIS HTTP 500”内部服务器错误
  2. 第12章类和动态内存分配
  3. python连接传感器_树莓派4B之光敏传感器模块(python3)
  4. mysql 1.6安装_centos 6.6编译安装nginx1.6.2+mysql5.6.21+php5.6.3.docx
  5. baidumap vue 判断范围_vue中百度地图API的调用
  6. php 添加cdata,PHP cdata 处理 PHP cdata 处理(仔细讲解)
  7. HttpServletResponse类
  8. 速度极大提升,Arch Linux 计划将 zstd 作为默认压缩算法
  9. 线上Mysql重大事故快速应急解决办法
  10. Ghost配置2——添加代码高亮