点点蘑菇 发表于 2021-11-1 10:20:13

汉诺塔程序报错

各路大神好,请教一下,我用的是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

jhq999 发表于 2021-11-1 10:34:49

本帖最后由 jhq999 于 2021-11-1 10:36 编辑

没毛病!你不会全复制后直接按回车吧?
Python 3.8.3 (tags/v3.8.3:6f8c832, May 13 2020, 22:37:02) on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> 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("请输入汉诺塔的层数:"))
请输入汉诺塔的层数:3
>>> hanoi(n,'x','y','z')
x --> y
x --> y
z --> x
x --> z
y --> z
y --> z
x --> y
>>>

逃兵 发表于 2021-11-1 10:35:24

你是在IDLE的交互模式下运行的
不能跨行输入代码,一行一行输入
或者你在IDLE的文本模式下运行
ctrl+N 之后F5运行

myqf123 发表于 2021-11-1 10:36:31

你这移动顺序有问题,每次开头会多打一行,目前看不出有什么语法错误,程序能正常运行,结果不一定正确,
执行结果如下:请输入汉诺塔的层数:3
x --> y
x --> y
z --> x
x --> z
y --> z
y --> z
x --> y
>>>



luck78 发表于 2021-11-1 10:39:29

我的是3.9 版本的,可以运行,但是第3行写错了吧

    if n == 1:
      print(x,'-->',z)

点点蘑菇 发表于 2021-11-1 15:18:22

逃兵 发表于 2021-11-1 10:35
你是在IDLE的交互模式下运行的
不能跨行输入代码,一行一行输入
或者你在IDLE的文本模式下运行


谢谢,就是要在文本模式下运行,交互模式下运行会出错{:5_109:}

点点蘑菇 发表于 2021-11-1 15:19:01

jhq999 发表于 2021-11-1 10:34
没毛病!你不会全复制后直接按回车吧?

谢谢{:5_91:}

点点蘑菇 发表于 2021-11-1 15:19:34

luck78 发表于 2021-11-1 10:39
我的是3.9 版本的,可以运行,但是第3行写错了吧

代码没有错哦

点点蘑菇 发表于 2021-11-1 15:20:17

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

谢谢哦,程序没错,就是需要在文本模式下运行

luck78 发表于 2021-11-1 22:42:32

点点蘑菇 发表于 2021-11-1 15:19
代码没有错哦

请输入汉诺塔的层数:3
x --> y
x --> y
z --> x
x --> z
y --> z
y --> z
x --> y

按照你的代码运行就是这样的
第一步和第二步是一样的, 按规则长的要在短的下面,你这个是没法移动的

muxuehan9201 发表于 2021-11-10 02:12:49

页: [1]
查看完整版本: 汉诺塔程序报错