井字棋盘

井字棋盘看起来像一个大的井字符号(#), 有9个空格,可以包含X、O或空。要用字典表示棋盘,可以为每个空格分配一个字符串键, 如图5-2所示。图5-2井字棋盘的空格和它们对应的键可以用字符串值来表示,棋盘上每个空格有什么:'X'、'O'或' '(空格字符)。因此,需要存储9个字符串。可以用一个字典来做这事。带有键'top-R'的字符串表示右上角,带有键'low-L'的字符串表示左下角, 带有键'mid-M'的字符串表示中间, 以此类推。这个字典就是表示井字棋盘的数据结构。将这个字典表示的棋盘保存在名为theBoard的变量中。打开一个文件编辑器窗口, 输入以下代码, 并保存为

ticTacToe.py:

theBoard = {'top-L': ' ', 'top-M': ' ', 'top-R': ' ',
'mid-L': ' ', 'mid-M': ' ', 'mid-R': ' ',
'low-L': ' ', 'low-M': ' ', 'low-R': ' '}

保存在 theBoard变量中的数据结构。

图 1 ---表示了的井字棋盘。

图 2 ----一个空的井字棋盘

因为 theBoard变量中每个键的值都是单个空格字符,所以这个字典表示一个完全干净的棋盘。如果玩家X 选择了中间的空格, 就可以用下面这个字典来表示棋盘:

theBoard = {'top-L': ' ', 'top-M': ' ', 'top-R': ' ',
'mid-L': ' ', 'mid-M': 'X', 'mid-R': ' ',
'low-L': ' ', 'low-M': ' ', 'low-R': ' '}
theBoard 变量中的数据结构现在表示图 3 中的井字棋盘。 
                                               
                                                                                图3
一个玩家 O获胜的棋盘上,他将O横贯棋盘的顶部,看起来像这样:

theBoard = {'top-L': 'O', 'top-M': 'O', 'top-R': 'O',
'mid-L': 'X', 'mid-M': 'X', 'mid-R': ' ',
'low-L': ' ', 'low-M': ' ', 'low-R': 'X'}
 图4---玩家O获胜
参考代码:
ticTacToe.py

#-*-coding:utf-8-*-theBoard = { 'top-L':' ','top-M':' ','top-R':' ','mid-L':' ','mid-M':' ','mid-R':' ','low-L':' ','low-M':' ','low-R':' ',}def printBoard(board):print(board['top-L'] + '|' + board['top-M'] + '|' + board['top-R'])print('-+-+-')print(board['mid-L'] + '|' + board['mid-M'] + '|' + board['mid-R'])print('-+-+-')print(board['low-L'] + '|' + board['low-M'] + '|' + board['low-R'])printBoard(theBoard)
turn = 'X'for i in range(9):print('Turn for ' + turn + '.Move on which space')while True:      # 检测当前输入位置是否已经被占用move = input()if(theBoard[move]!= ' '):print('This position has already been occupied! ')continueelse:breaktheBoard[move] = turnif turn == 'X':turn = 'O'else:turn = 'X'printBoard(theBoard)

这不是一个完整的井字棋游戏(例如,它并不检查玩家是否获胜), 但这已足够展示如何在程序中使用数据结构。
注意

       如果你很好奇, 完整的井字棋程序的源代码在网上有介绍, 网址是完整代码参考链接。(可能需要FQ才能进入)

python实践项目(三)相关推荐

  1. python实践项目-shop

    python实践项目-shop 练习 文件打开/保存 cmd应用 prettytable 场景 使用CMD程序,实现商店管理 python3+pycharm 源码 getPicke.py 初始化PIC ...

  2. Python实践项目——LSB隐写术

    一.项目背景 1.隐写术 隐写术是一门关于信息隐藏的技巧与科学,所谓信息隐藏指的是不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容. 2.LSB 隐写术 LSB 隐写术是一种图像隐写术技 ...

  3. 《C语言及程序设计》实践项目——三种循环语句

    返回:贺老师课程教学链接 [项目1:利用循环求和] 求1000以内所有偶数的和 要求:请编出3个程序来,分别用三种循环语句完成,注意体会各种循环语句的执行过程及语法特点. [参考解答] [项目2:求阶 ...

  4. python实践项目(九)

    项目:将一个文件夹备份到一个 ZIP 文件 假定你正在做一个项目,它的文件保存在C:\AlsPythonBook 文件夹中.你担心工作会丢失, 所以希望为整个文件夹创建一个ZIP 文件, 作为&quo ...

  5. python实践项目(七)

    项目1:生成随机的测验试卷文件 假如你是一位地理老师,班上有35 名学生, 你希望进行美国各州首府的一个小测验.不妙的是,班里有几个坏蛋,你无法确信学生不会作弊.你希望随机调整问题的次序, 这样每份试 ...

  6. python实践项目(八)

    项目:将带有美国风格日期的文件改名为欧洲风格日期 假定你的老板用电子邮件发给你上千个文件,文件名包含美国风格的日期(MM-DD-YYYY),需要将它们改名为欧洲风格的日期(DD-MM-YYYY).手工 ...

  7. python实践项目(五)

    参考书目:<Python编程快速上手-让繁琐工作自动化>,下载地址:我是下载链接,请点击 练习1:口令保管箱 你可能在许多不同网站上拥有账号,每个账号使用相同的口令是个坏习惯.如果这些网站 ...

  8. python实践项目(四)

    练习1:好玩游戏的物品清单 你在创建一个好玩的视频游戏.用于对玩家物品清单建模的数据结构是一个字典.其中键是字符串,描述清单中的物品,值是一个整型值,说明玩家有多少该物品.例如,字典值{'rope': ...

  9. python实践项目(一)

    Collatz 序列:        要求1:编写一个名为 collatz()的函数,它有一个名为 number 的参数.如果参数是偶数,那么 collatz()就打印出 number // 2, 并 ...

最新文章

  1. 【论文阅读】A social recommender system using item asymmetric correlation
  2. 艿艿连肝了几个周末,写了一篇贼长的 Spring 响应式 Web 框架 WebFlux!市面第二完整~
  3. oracle dg物理和逻辑,Oracle DG 物理Standby环境搭建
  4. 判断用户是否存在再进行新增_MySQL用户行为分析
  5. Codeforces 982 B. Bus of Characters(模拟一个栈)
  6. cisco packet tracer路由器配置_【干货】思科交换机路由器怎么配置密码?
  7. linux ls mv,04_Linux目录文件操作命令1(mv ls cd...)_我的Linux之路
  8. obj是什么数据类型 python_Python入门级第一天
  9. 1.14 关于梯度检验实现的注记
  10. 当个年轻的又不太有经验的老板有多难?
  11. 【C++】智能指针(auto_ptr,shared_ptr,unique_ptr)及 shared_ptr 强引用原理
  12. 力扣 剑指 Offer 10- I. 斐波那契数列
  13. 【空间】C++内存管理
  14. 2017CCPC哈尔滨赛区总结
  15. 佳能mp288清零软件,非常好用@
  16. 文件管理系统(开发文档)
  17. 【Linux-Windows】海康网络相机开启ONVIF协议
  18. 使用IPIP.net识别客户端真实访问地址,具体到国家,省,市
  19. Laravel中使用GuzzleHttp调用第三方服务的API接口
  20. 相干性(Coherence)和相关性(Correlation)的区别和联系

热门文章

  1. Windows平台上的Domino服务器挂起的数据收集步骤
  2. lambda表达式for_each,find_if简介
  3. 最好用的数据可视化神器,没有之一
  4. java 生日 计算_java根据生日计算当前年龄,精确到月
  5. linux安装步骤_图解 Debian 10(Buster)安装步骤 | Linux 中国
  6. python序列操作_序列操作
  7. 乐山计算机学校新歌王,星歌王第二季乐山市计算机学校专场赛决赛完美落幕!...
  8. 职高学的计算机单招考试能换专业吗,高职单招录取后可以换专业吗
  9. php yii2模块,Yii2 之 frontend 子模块实践之四:路由美化
  10. java 求两线交点_JAVA求两直线交点和三角形内外心的编程代码