python实践项目(三)

井字棋盘

       井字棋盘看起来像一个大的井字符号(#), 有9个空格,可以包含XO或空。要用字典表示棋盘,可以为每个空格分配一个字符串键, 如图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! ')
            continue
        else:
            break
    theBoard[move] = turn
    if turn == 'X':
        turn = 'O'
    else:
        turn = 'X'

printBoard(theBoard)

        这不是一个完整的井字棋游戏(例如,它并不检查玩家是否获胜), 但这已足够展示如何在程序中使用数据结构。
注意 
       如果你很好奇, 完整的井字棋程序的源代码在网上有介绍, 网址是完整代码参考链接。(可能需要FQ才能进入)

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rs勿忘初心

您的鼓励将是我的最大创动原动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值