|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
今天在论坛看到汉诺塔递归的问题,就试着写了一个,但是在想把步数加进去时,变量引用出错。其实这个问题一直也困扰着我,就是我在函数里面使用外部的变量,究竟应该怎么定义,使用global全局关键字还是提示错误。求解答啊
- def move(n,from1,to1):
- i += 1
- print('第%d步将%d号盘子从%s移动到%s'%(i,n,from1,to1))
- def hanoi(n,from1,middle,to1):
- if(n==1):
- move(1,from1,to1)
- else:
- hanoi(n-1,from1,to1,middle)
- move(n,from1,to1)
- hanoi(n-1,middle,from1,to1)
- global i
- n = int(input('请输入碟子个数:'))
- x = 'A'
- y = 'B'
- z ='C'
- hanoi(n,x,y,z)
复制代码
然后报错就是提示这个i在使用时没有定义。如下:
- UnboundLocalError: local variable 'i' referenced before assignment
复制代码
然后我把i定义到hanoi()这个函数中还是不行。求指点
不废话,先上代码:
- def move(n,from1,to1):
- global i
- i += 1
- print('第%d步将%d号盘子从%s移动到%s'%(i,n,from1,to1))
- def hanoi(n,from1,middle,to1):
- if(n==1):
- move(1,from1,to1)
- else:
- hanoi(n-1,from1,to1,middle)
- move(n,from1,to1)
- hanoi(n-1,middle,from1,to1)
- i = 0
- n = int(input('请输入碟子个数:'))
- x = 'A'
- y = 'B'
- z ='C'
- hanoi(n,x,y,z)
复制代码
是这样子的:如果你坚持要在函数中使用全局变量,首先你要先定义全局变量,然后在函数中你想修改这个全局变量,你可以使用关键字global,这表示你要让函数中和全局变量同名的局部变量变成全局变量(这可能说得比较难懂),也就是说,关键字global的作用就是让函数中的局部变量变成全局变量(前提是你这个局部变量和全局变量同名)。
您主要的问题是:1、你不清楚关键字global的作用,2、i 变量没有定义赋值
|
|