汉诺塔游戏用python写的步骤

本文介绍了如何用Python编程解决汉诺塔游戏问题。通过分析游戏规则,提出递归解决方案,逐步解释了如何处理不同数量的盘子,并分享了一个简单的Python程序。该程序已经通过了1至多个盘子的测试,确保正确性。
摘要由CSDN通过智能技术生成

相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。

分析:对于这样一个问题,任何人都不可能直接写出移动盘子的每一步,但我们可以利用下面的方法来解决。设移动盘子数为n,为了将这n个盘子从A杆移动到C杆,可以做以下三步:
1.当只有一个盘子的时候 直接 A–C
2.当盘子为2的时候 第一步 盘子1A–B 盘子2A–C 盘子1B–C
3.当盘子为n(n>3)的时候 我们可以把盘子里面第n个和 前面的n-1个(看成一个整体)分别看成步骤2里面的盘子2和盘子1 只要不断循环 直到最后一个盘子 就可以执行第一步了

疫情在家,想学习下python,跟着老师学了一个入门,自己写了一个汉诺塔的程序,请大家指教:
汉诺塔作为一个嵌套函数的经典例题 对于编程思想是有启发意义的 希望你可以掌握

def hannota(n,a,b,c):            
#定义一个函数叫hannota,函数有四个,盘子数n,三个柱子ABC
    if n==1:                     #如果只有一个盘子的话 步骤就只有一种
        print("第",n,"个盘子从",a,"--->",c)   #直接把盘子从A到C
    else:                          #超过1的盘子怎么办?
        hannota(n-1,a,c,b)        #如果是2个盘子的话 第一步是a到b, 第二个盘子a到c
        print("第",n,"个盘子从",a,"--->",c)
        hannota(n-1,b,a,c)
n=int(input("输入盘子数:"'\n'))
print(n,"个盘子最少步数操作如下:"'\n')
hannota(n,"A","B","C")

1个盘子的时候检验下

"D:\python project\venv\Scripts\python.exe" "D:/python project/MyWork/MyHannuota.py"
输入盘子数:
1
1 个盘子最少步数操作如下:

第 1 个盘子从 A ---> C

Process finished with exit code 0

没有问题 来继续增加

"D:\python project\venv\Scripts\python.exe" "D:/python project/MyWork/MyHannuota.py"
输入盘子数:
2
2 个盘子最少步数操作如下:

第 1 个盘子从 A ---> B
第 2 个盘子从 A ---> C
第 1 个盘子从 B ---> C

Process finished with exit code 0

第二个也没有问题

大于2的呢?

"D:\python project\venv\Scripts\python.exe" "D:/python project/MyWork/MyHannuota.py"
输入盘子数:
9
9 个盘子最少步数操作如下:

第 1 个盘子从 A ---> C
第 2 个盘子从 A ---> B
第 1 个盘子从 C ---> B
第 3 个盘子从 A ---> C
第 1 个盘子从 B ---> A
第 2 个盘子从 B ---> C
第 1 个盘子从 A ---> C
第 4 个盘子从 A ---> B
第 1 个盘子从 C ---> B
第 2 个盘子从 C ---> A
第 1 个盘子从 B ---> A
第 3 个盘子从 C ---> B
第 1 个盘子从 A ---> C
第 2 个盘子从 A ---> B
第 1 个盘子从 C ---> B
第 5 个盘子从 A ---> C
第 1 个盘子从 B ---> A
第 2 个盘子从 B ---> C
第 1 个盘子从 A ---> C
第 3 个盘子从 B ---> A
第 1 个盘子从 C ---> B
第 2 个盘子从 C ---> A
第 1 个盘子从 B ---> A
第 4 个盘子从 B ---> C
第 1 个盘子从 A ---> C
第 2 个盘子从 A ---> B
第 1 个盘子从 C ---> B
第 3 个盘子从 A ---> C
第 1 个盘子从 B ---> A
第 2 个盘子从 B ---> C
第 1 个盘子从 A ---> C
第 6 个盘子从 A ---> B
第 1 个盘子从 C ---> B
第 2 个盘子从 C ---> A
第 1 个盘子从 B ---> A
第 3 个盘子从 C ---> B
第 1 个盘子从 A ---> C
第 2 个盘子从 A ---> B
第 1 个盘子从 C ---> B
第 4 个盘子从 C ---> A
第 1 个盘子从 B ---> A
第 2 个盘子从 B ---> C
第 1 个盘子从 A ---> C
第 3 个盘子从 B ---> A
第 1 个盘子从 C ---> B
第 2 个盘子从 C ---> A
第 1 个盘子从 B ---> A
第 5 个盘子从 C ---> B
第 1 个盘子从 A ---> C
第 2 个盘子从 A ---> B
第 1 个盘子从 C ---> B
第 3 个盘子从 A ---> C
第 1 个盘子从 B ---> A
第 2 个盘子从 B ---> C
第 1 个盘子从 A ---> C
第 4 个盘子从 A ---> B
第 1 个盘子从 C ---> B
第 2 个盘子从 C ---> A
第 1 个盘子从 B ---> A
第 3 个盘子从 C ---> B
第 1 个盘子从 A ---> C
第 2 个盘子从 A ---> B
第 1 个盘子从 C ---> B
第 7 个盘子从 A ---> C
第 1 个盘子从 B ---> A
第 2 个盘子从 B ---> C
第 1 个盘子从 A ---> C
第 3 个盘子从 B ---> A
第 1 个盘子从 C ---> B
第 2 个盘子从 C ---> A
第 1 个盘子从 B ---> A
第 4 个盘子从 B ---> C
第 1 个盘子从 A ---> C
第 2 个盘子从 A ---> B
第 1 个盘子从 C ---> B
第 3 个盘子从 A ---> C
第 1 个盘子从 B ---&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值