详解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 相关文章推荐
下载给定网页上图片的方法
Feb 18 Python
python web框架学习笔记
May 03 Python
python 获取网页编码方式实现代码
Mar 11 Python
200 行python 代码实现 2048 游戏
Jan 12 Python
Python字符串格式化%s%d%f详解
Feb 02 Python
Python网络编程使用select实现socket全双工异步通信功能示例
Apr 09 Python
python爬虫租房信息在地图上显示的方法
May 13 Python
python 弹窗提示警告框MessageBox的实例
Jun 18 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
Aug 27 Python
Python实现括号匹配方法详解
Feb 10 Python
python实现ftp文件传输系统(案例分析)
Mar 20 Python
Python集合的基础操作
Nov 01 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 MemCached 高级缓存应用代码
2010/08/05 PHP
探讨php中防止SQL注入最好的方法是什么
2013/06/10 PHP
PHP使用缓存即时输出内容(output buffering)的方法
2015/08/03 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
2017/11/17 PHP
PHP面向对象程序设计中的self、static、parent关键字用法分析
2019/08/14 PHP
javascript教程之不完整的继承(js原型链)
2014/01/13 Javascript
JavaScript中用字面量创建对象介绍
2014/12/31 Javascript
js实现分享到随页面滚动而滑动效果的方法
2015/04/10 Javascript
jQuery内存泄露解决办法
2016/12/13 Javascript
HTML5canvas 绘制一个圆环形的进度表示实例
2016/12/16 Javascript
jQuery简单获取DIV和A标签元素位置的方法
2017/02/07 Javascript
JS jQuery使用正则表达式去空字符的简单实现代码
2017/05/20 jQuery
微信小程序图片自适应支持多图实例详解
2017/06/21 Javascript
vue 中 beforeRouteEnter 死循环的问题
2019/04/23 Javascript
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
Python备份Mysql脚本
2008/08/11 Python
使用python编写监听端
2018/04/12 Python
Python实现确认字符串是否包含指定字符串的实例
2018/05/02 Python
Python3中lambda表达式与函数式编程讲解
2019/01/14 Python
Django rstful登陆认证并检查session是否过期代码实例
2019/08/13 Python
浅谈keras保存模型中的save()和save_weights()区别
2020/05/21 Python
Django框架请求生命周期实现原理
2020/11/13 Python
python 实现aes256加密
2020/11/27 Python
python反编译教程之2048小游戏实例
2021/03/03 Python
纯CSS绘制漂亮的圆形图案效果
2014/05/07 HTML / CSS
美国最顶级的精品店之一:Hampden Clothing
2016/12/22 全球购物
Snapfish英国:在线照片打印和个性化照片礼品
2017/01/13 全球购物
Clarria化妆品官方网站:购买天然和有机化妆品系列
2018/04/08 全球购物
C#中类(class)与结构(struct)的异同
2013/11/03 面试题
如何开启linux的ssh服务
2015/02/14 面试题
期末评语大全
2014/05/04 职场文书
会计求职信
2014/05/29 职场文书
室内趣味活动方案
2014/08/24 职场文书
2019运动会广播加油稿汇总
2019/08/21 职场文书
MySQL多表查询机制
2022/03/17 MySQL
mysql 获取相邻数据项
2022/05/11 MySQL