python实现汉诺塔游戏
highlighter- python
lt = list() #左边的空列表
rt = list() #右边的空列表
ct = list() #中间的空列表
#初始化函数
def init():
size = int(input("请输入你要挑战的高度:"))
# 建立左边的汉诺塔
for i in range(1,size+1):
lt.append(i*2-1);
ct.append(-1)
rt.append(-1)
#这里我们是一个倒放,后续需要处理一下
return size #最后我们将层数返回
def Rule():
print("将最左边的塔完整的移动到右边就是胜利")
print("操作方式为:")
print("left-1,right-3,center-2,退出就输出quit")
print("例子:如果想将左边最上面的元素移动到最右边就输入1-3")
#显示函数
def Show(size):
print("-"*20)
for i in range(size):
Print(i,size,lt)
Print(i,size,ct)
Print(i,size,rt)
print()
print("-"*20)
# 打印函数
def Print(i,size,ta):
if ta[i] != -1:
# 打印前空格
for kong in range(int(size - (ta[i] - 1) / 2)):
print(" ", end="")
# 打印塔元素
for le in range(ta[i]):
print("X", end="")
# 打印后空格
for kong in range(int(size - (ta[i] - 1) / 2)):
print(" ", end="")
# 左塔这一层为空格
else:
# 打印前面空格
for kong in range(size):
print(" ", end="")
# 打印中间的棒棒
print("|", end="")
# 打印后面的空格
for kong in range(size):
print(" ", end="")
def Judge(tk,pt,size,tsize,psize,ans):
if tsize == size:
print("已经空了!!!")
return 0
if psize == size:
x = tk[tsize]
pt[psize-1] = x
tk[tsize] = -1
tsize += 1 #多了一个剩余空间
psize -= 1 #少了一个空间
ans += 1
return tsize,psize,ans
elif pt[psize] >tk[tsize]:
x = tk[tsize]
pt[psize - 1] = x
tk[tsize] = -1
tsize += 1 # 多了一个剩余空间
psize -= 1 # 少了一个空间
ans += 1
return tsize,psize,ans
else:
print("不可执行的操作")
return 0
# main函数(主函数)
def main():
size = init()
#存放剩余层数
lsize = 0
rsize = size
csize = size
#存放操作步数
ans = 0
#游戏规则
Rule()
print(lsize,rsize,csize)
#输入最佳游戏步数
print(f"{size}层的最佳步数是{pow(2,size)-1}")
print("挑战开始")
while True:
print(f"当前移动了{ans}步")
Show(size)
if rsize == 0:
if ans ==pow(2,size)-1:
print("恭喜你挑战成功")
else:
print(f"虽然不是最优方案,但是您仍然用了{ans}步来完成")
break
operater = input("请输入你的操作:")
if operater =='1-2':
result = Judge(lt,ct,size,lsize,csize,ans)
if result == 0:
continue
else:
lsize,csize,ans = result
elif operater =='1-3':
result = Judge(lt,rt,size,lsize,rsize,ans)
if result == 0:
continue
else:
lsize,rsize,ans = result
elif operater =='2-1':
result = Judge(ct,lt,size,csize,lsize,ans)
if result == 0:
continue
else:
csize,lsize,ans = result
elif operater =='2-3':
result = Judge(ct,rt,size,csize,rsize,ans)
if result == 0:
continue
else:
csize,rsize,ans = result
elif operater =='3-1':
result = Judge(rt,lt,size,rsize,lsize,ans)
if result == 0:
continue
else:
rsize,lsize,ans = result
elif operater =='3-2':
result = Judge(rt,ct,size,rsize,csize,ans)
if result == 0:
continue
else:
rsize,csize,ans = result
elif operater =='quit':
x=input("你确定要退出吗(Y/N)")
break
if x=='Y':
print("已经成功退出")
else:
continue
else:
print("无效指令,请重试")
continue
#主函数运行
if __name__ == '__main__':
main()
PYTHON 复制 全屏
__EOF__
【出处】:https://www.cnblogs.com/du463/p/17930820.html
=======================================================================================
关注我】。(●'◡'●)
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的【因为,我的写作热情也离不开您的肯定与支持,感谢您的阅读,我是【Jack_孟】!
本文来自博客园,作者:jack_Meng,转载请注明原文链接:https://www.cnblogs.com/mq0036/p/17930879.html
【免责声明】本文来自源于网络,如涉及版权或侵权问题,请及时联系我们,我们将第一时间删除或更改!