python实践项目(三)

来源:互联网 发布:猪八戒的网络推广 编辑:程序博客网 时间:2024/06/05 14:55
井字棋盘

       井字棋盘看起来像一个大的井字符号(#), 有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才能进入)

原创粉丝点击