|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 china25qd 于 2017-6-12 10:39 编辑
首先,我是学了24课时的汉诺塔问题后想到一个需求,如果我要计算一定片块的移动次数该如何实现?
在c#中,我可以预先定义一个static变量,然后每次调用函数时+=1即可
但python是弱类型语言,意味着我无法定义变量类型
于是我尝试用常量,然后妄图在每次打印的时候来实现:
- times = 0
- def hanoi(n,x,y,z):
- if n == 1:
- print(x, ' ==> ', z)
- else:
- hanoi(n - 1, x, z, y)
- print(x, '==>', z)
- hanoi(n - 1, y, x, z)
- n = int(input('请输入层数:'))
- print("第" + str(times += 1) + "次移动:" + hanoi(n, 'x', 'y', 'z', 0))
复制代码
事实证明这是行不通的(python连错都懒得报了)
然后我尝试用函数传值来计数
- def hanoi(n,x,y,z,times):
- times += 1
- if n == 1:
- print(x, ' ==> ', z)
- else:
- hanoi(n - 1, x, z, y, times)
- print('第%d步:' % times, x, '==>', z)
- hanoi(n - 1, y, x, z, times)
- n = int(input('请输入层数:'))
- print(hanoi(n, 'x', 'y', 'z', 0))
复制代码
倒是不会报错了,但是运行的结果灰常诡异:
- ================== RESTART: C:/Users/DELL/Desktop/hanoi.py ==================
- 请输入层数:3
- x ==> z
- 第2步: x ==> y
- z ==> y
- 第1步: x ==> z
- y ==> x
- 第2步: y ==> z
- x ==> z
- None
复制代码
希望得到大佬指点,谢谢!
@gopythoner @小甲鱼 @新手·ing @冬雪雪冬
函数外定义变量 time = 0 函数内定义 global time 声明是一个全局变量,
然后每一次移动 time+1 打印的时候直接打印time就行了
|
|