鱼C论坛

 找回密码
 立即注册
查看: 1726|回复: 10

[已解决]汉诺塔程序报错

[复制链接]
发表于 2021-11-1 10:20:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
各路大神好,请教一下,我用的是Python 3.10.0版本,写了汉诺塔递归程序,不知道怎么出错了


def hanoi(n,x,y,z):
    if n == 1:
        print(x,'-->',y)
    else:
        hanoi(n-1,x,z,y)#将前n-1个盘子从x移动到y上
        print(x,'-->',z) #将最底下的最后一个盘子从x移动到z上
        hanoi(n-1,y,x,z)#将y上的n-1个盘子移动到z上
n = int(input("请输入汉诺塔的层数:"))
hanoi(n,'x','y','z')


报错:SyntaxError: invalid syntax
最佳答案
2021-11-1 10:35:24
你是在IDLE的交互模式下运行的
不能跨行输入代码,一行一行输入
或者你在IDLE的文本模式下运行
ctrl+N 之后F5运行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-1 10:34:49 | 显示全部楼层
本帖最后由 jhq999 于 2021-11-1 10:36 编辑

没毛病!你不会全复制后直接按回车吧?
  1. Python 3.8.3 (tags/v3.8.3:6f8c832, May 13 2020, 22:37:02) [MSC v.1924 64 bit (AMD64)] on win32
  2. Type "help", "copyright", "credits" or "license()" for more information.
  3. >>> def hanoi(n,x,y,z):
  4.     if n == 1:
  5.         print(x,'-->',y)
  6.     else:
  7.         hanoi(n-1,x,z,y)#将前n-1个盘子从x移动到y上
  8.         print(x,'-->',z) #将最底下的最后一个盘子从x移动到z上
  9.         hanoi(n-1,y,x,z)#将y上的n-1个盘子移动到z上

  10.         
  11. >>> n = int(input("请输入汉诺塔的层数:"))
  12. 请输入汉诺塔的层数:3
  13. >>> hanoi(n,'x','y','z')
  14. x --> y
  15. x --> y
  16. z --> x
  17. x --> z
  18. y --> z
  19. y --> z
  20. x --> y
  21. >>>
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-1 10:35:24 | 显示全部楼层    本楼为最佳答案   
你是在IDLE的交互模式下运行的
不能跨行输入代码,一行一行输入
或者你在IDLE的文本模式下运行
ctrl+N 之后F5运行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-1 10:36:31 | 显示全部楼层
你这移动顺序有问题,每次开头会多打一行,目前看不出有什么语法错误,程序能正常运行,结果不一定正确,
执行结果如下:
  1. 请输入汉诺塔的层数:3
  2. x --> y
  3. x --> y
  4. z --> x
  5. x --> z
  6. y --> z
  7. y --> z
  8. x --> y
  9. >>>
复制代码




想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-1 10:39:29 | 显示全部楼层
我的是3.9 版本的,可以运行,但是第3行写错了吧

  1.     if n == 1:
  2.         print(x,'-->',z)
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-1 15:18:22 | 显示全部楼层
逃兵 发表于 2021-11-1 10:35
你是在IDLE的交互模式下运行的
不能跨行输入代码,一行一行输入
或者你在IDLE的文本模式下运行

谢谢,就是要在文本模式下运行,交互模式下运行会出错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-1 15:19:01 | 显示全部楼层
jhq999 发表于 2021-11-1 10:34
没毛病!你不会全复制后直接按回车吧?

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-1 15:19:34 | 显示全部楼层
luck78 发表于 2021-11-1 10:39
我的是3.9 版本的,可以运行,但是第3行写错了吧

代码没有错哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-1 15:20:17 | 显示全部楼层
myqf123 发表于 2021-11-1 10:36
你这移动顺序有问题,每次开头会多打一行,目前看不出有什么语法错误,程序能正常运行,结果不一定正确,
...

谢谢哦,程序没错,就是需要在文本模式下运行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-1 22:42:32 | 显示全部楼层

  1. 请输入汉诺塔的层数:3
  2. x --> y
  3. x --> y
  4. z --> x
  5. x --> z
  6. y --> z
  7. y --> z
  8. x --> y
复制代码

按照你的代码运行就是这样的
第一步和第二步是一样的, 按规则长的要在短的下面,你这个是没法移动的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2021-11-10 02:12:49 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 13:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表