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


Posted in Python onOctober 30, 2020

直接上代码:

#左中右塔用一个列表存储
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()

运行结果:

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

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

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

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

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

Python 相关文章推荐
python发腾讯微博代码分享
Jan 10 Python
教你用Type Hint提高Python程序开发效率
Aug 08 Python
python合并同类型excel表格的方法
Apr 01 Python
Python实现将Excel转换成为image的方法
Oct 23 Python
Python中类的创建和实例化操作示例
Feb 27 Python
Python中print函数简单使用总结
Aug 05 Python
Python使用Pandas读写Excel实例解析
Nov 19 Python
春节到了 教你使用python来抢票回家
Jan 06 Python
查看已安装tensorflow版本的方法示例
Apr 19 Python
使用python-Jenkins批量创建及修改jobs操作
May 12 Python
Django日志及中间件模块应用案例
Sep 10 Python
Python基于tkinter canvas实现图片裁剪功能
Nov 05 Python
python boto和boto3操作bucket的示例
Oct 30 #Python
python 多进程和协程配合使用写入数据
Oct 30 #Python
python打包生成so文件的实现
Oct 30 #Python
pytorch 移动端部署之helloworld的使用
Oct 30 #Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
Oct 30 #Python
Python模拟登录和登录跳转的参考示例
Oct 30 #Python
python中watchdog文件监控与检测上传功能
Oct 30 #Python
You might like
社区(php&&mysql)四
2006/10/09 PHP
javascript 获取所有id中包含某关键字的控件的实现代码
2010/11/25 Javascript
利用JQuery的load函数动态加载其它页面的内容的实现代码
2010/12/14 Javascript
Jquery知识点二 jquery下对数组的操作
2011/01/15 Javascript
基于jquery的15款幻灯片插件
2011/04/10 Javascript
CSS鼠标响应事件经过、移动、点击示例介绍
2013/09/04 Javascript
jQuery异步获取json数据方法汇总
2014/12/22 Javascript
原生JS实现平滑回到顶部组件
2016/03/16 Javascript
BootStrap的Datepicker控件使用心得分享
2016/05/25 Javascript
Angularjs的ng-repeat中去除重复数据的方法
2016/08/05 Javascript
微信小程序 删除项目工程实现步骤
2016/11/10 Javascript
vue2.0项目中使用Ueditor富文本编辑器示例代码
2017/08/14 Javascript
Vue 2.5.2下axios + express 本地请求404的解决方法
2018/02/21 Javascript
详解Angular-ui-BootStrap组件的解释以及使用
2018/07/13 Javascript
JQuery扩展对象方法操作示例
2018/08/21 jQuery
Vuex实现数据增加和删除功能
2019/11/11 Javascript
JavaScript实现飞舞的泡泡效果
2020/02/07 Javascript
vue 监听窗口变化对页面部分元素重新渲染操作
2020/07/28 Javascript
Node 使用express-http-proxy 做api网关的实现
2020/10/15 Javascript
使用相同的Apache实例来运行Django和Media文件
2015/07/22 Python
Python实现读取字符串按列分配后按行输出示例
2018/04/17 Python
Python类装饰器实现方法详解
2018/12/21 Python
tensorflow模型转ncnn的操作方式
2020/05/25 Python
Python实现曲线拟合的最小二乘法
2021/02/19 Python
德国内衣、泳装和睡衣网上商店:Bigsize Dessous
2018/07/09 全球购物
捷克玩具商店:Bambule
2019/02/23 全球购物
来自世界各地的饮料:Flavourly
2019/05/06 全球购物
应用电子技术专业个人求职信
2013/09/21 职场文书
公积金转移接收函
2014/01/11 职场文书
学生会主席就职演讲稿
2014/01/14 职场文书
大二学生职业生涯规划书
2014/02/05 职场文书
自考毕业自我鉴定
2014/03/18 职场文书
建筑施工安全生产责任书
2014/07/22 职场文书
2014最新离职证明范本
2014/09/12 职场文书
法学专业大学生实习自我鉴定
2014/10/05 职场文书
群众路线个人剖析材料及整改措施
2014/11/04 职场文书