汉诺塔python代码解释_详解python百行有效代码实现汉诺塔小游戏(简约版)

直接上代码:

#左中右塔用一个列表存储

left = list()

center = list()

right = list()

"""

初始化函数

"""

def init():

size = input("(请友善输入整数,未写判断!)请输入层数:")

#初始化塔列表,如5层 左边塔放 1-3-5-7-9,中间和右边放5个-1

for i in range(1,int(size) + 1):

left.append(i*2-1)

center.append(-1)

right.append(-1)

return int(size)

"""

打印样式函数

"""

def printStyling(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 show(size):

#修饰

print("-"*35)

#循环层数等于size

for i in range(size):

# 打印左边塔

printStyling(i,size,left)

# 打印中间塔

printStyling(i,size,center)

# 打印右边塔

printStyling(i,size,right)

#每行打印一个换行

print()

#修饰

print("-" * 35)

"""

判断可不可以移动

takeOff减少,putOn增加,size层数,tSize和pSize剩余空间

"""

def judge(takeOff,putOn,size,tSize,pSize,count):

# 如果左塔的空间空的,就是没有元素可移动

if takeOff == size:

print("操作无效!")

return 0

# 如果中塔为空,可以移动

if pSize == size:

# 中间的最后一个元素赋上左塔的第一个元素的值

putOn[pSize - 1] = takeOff[tSize]

# 左塔的第一个元素赋值-1

takeOff[tSize] = -1

# 左塔的剩余空间+1

tSize += 1

# 中塔的剩余空间-1

pSize -= 1

#步数+1

count += 1

#移动成功,返回剩余空间和步数

return tSize,pSize,count

# 如果中塔最上方元素比左塔最上方元素大,即可以移动

elif putOn[pSize] > takeOff[tSize]:

# 中塔当前最上方元素的再上一个元素(-1)赋上左塔最上方元素的值

putOn[pSize - 1] = takeOff[tSize]

# 左塔最上方元素赋值-1

takeOff[tSize] = -1

# 左塔剩余空间+1

tSize += 1

# 中塔剩余空间-1

pSize -= 1

#步数+1

count += 1

# 移动成功,返回剩余空间和步数

return tSize,pSize,count

# 否则不可以移动

else:

print("操作无效!")

return 0

"""

主要运行函数

"""

def main():

#初始化游戏

size = init()

# 存放最初的盘剩余空间 lSize左塔 cSize中塔 rSize右塔

lSize = 0

cSize = size

rSize = size

#存放操作步数

count = 0

#打印游戏介绍

print("将左塔完整地移到右塔就是胜利!")

print("左-1 中-2 右-3 退出请输入:quit")

print('例如输入:"1-2"就是将左塔的最上元素放到中塔')

print("%d层的最佳步数是%d"%(size,pow(2,size)-1))

#游戏进行

while True:

print("当前移动了%d步"%(count))

#显示当前塔的状态

show(size)

#判断右塔是否没有剩余空间,没有即胜利,并退出游戏

if rSize == 0:

if count == pow(2,size)-1:

print("恭喜你使用最少步数完成汉诺塔!")

else:

print("恭喜你只移动了%d步完成汉诺塔小游戏!"%(count))

break

#获取玩家操作

select = input("请操作:")

#左塔移中塔

if select == "1-2":

result = judge(left,center,size,lSize,cSize,count)

if result == 0:

continue

else:

lSize,cSize,count = result

#左塔移右塔,下面同样

elif select == "1-3":

result = judge(left, right, size, lSize, rSize,count)

if result == 0:

continue

else:

lSize, rSize,count = result

elif select == "2-1":

result = judge(center, left, size, cSize, lSize,count)

if result == 0:

continue

else:

cSize, lSize,count = result

elif select == "2-3":

result = judge(center, right, size, cSize, rSize,count)

if result == 0:

continue

else:

cSize, rSize,count = result

elif select == "3-1":

result = judge(right, left, size, rSize, lSize,count)

if result == 0:

continue

else:

rSize, lSize,count = result

elif select == "3-2":

result = judge(right, center, size, rSize, cSize,count)

if result == 0:

continue

else:

rSize, cSize ,count= result

#输入quit退出游戏

elif select == "quit":

break

#如果输入的是其他不识别的文字,就拜拜

else:

print("操作有误!")

continue

main()

运行结果:

jptozapzsmd.png

uomk1wxcr1v.png

y20yfisbgit.png

s22top5apb4.png

到此这篇关于详解python百行有效代码实现汉诺塔小游戏(简约版)的文章就介绍到这了,更多相关python 汉诺塔 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

本文标题: 详解python百行有效代码实现汉诺塔小游戏(简约版)

本文地址: http://www.cppcns.com/jiaoben/python/359851.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值