@zhangyu756897669
2017-08-29T15:37:49.000000Z
字数 4377
阅读 677
python官方文档
在代数象棋符号中,棋盘上的空格用数字和字母坐标表示,如图5-1所示。

棋子通过字母识别:K为王,Q为女王,R为烟,B为主教,N为骑士。描述一个动作使用该片段的字母和其目的地的坐标。一对这些动作描述了一轮中发生的情况(首先是白色的);例如,符号2. Nf3 Nc6表示白色将骑士移动到f3,黑色在游戏的第二回合将骑士移动到c6。
theBoard = {'top-L': ' ', 'top-M': ' ', 'top-R': ' ','mid-L': ' ', 'mid-M': ' ', 'mid-R': ' ','low-L': ' ', 'low-M': ' ', 'low-R': ' '}
存储在板载变量中的数据结构表示图5-3中的tic-tactoe板。

theBoard = {'top-L': ' ', 'top-M': ' ', 'top-R': ' ','mid-L': ' ', 'mid-M': 'X', 'mid-R': ' ','low-L': ' ', 'low-M': ' ', 'low-R': ' '}
现在的数据结构表示图5-4中的tic-tac-toe板。
* 通过将Os放置在顶部的方式赢得玩家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'}
现在的数据结构表示图5-5中的tic-tac-toe板。

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)
当您运行此程序时,printBoard()将打印出一个空白的tic-tactoe板。
| |
-+-+-
| |
-+-+-
| |
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'}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)
现在当您运行此程序时,新的电路板将被打印到屏幕上。
O|O|O
-+-+-
X|X|
-+-+-
| |X
因为你创建了一个数据结构来表示一个tic-tac-toe板,并且在printBoard()中编写代码来解释数据结构,所以现在有一个程序可以“模拟”tic-tac-toe板。您可以以不同的方式组织数据结构(例如,使用“TOP-LEFT”而不是“top-L”)键,但只要代码与数据结构一起使用,您将具有正确的工作程序。
现在我们添加一些允许玩家进入他们的动作的代码。修改ticTacToe.py程序看起来像这样:
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'])turn = 'X'for i in range(9):printBoard(theBoard)print('Turn for ' + turn + '. Move on which space?')move = input()theBoard[move] = turnif turn == 'X':turn = 'O'else:turn = 'X'printBoard(theBoard)
| |
-+-+-
| |
-+-+-
| |
Turn for X. Move on which space?
mid-M
| |
-+-+-
|X|
-+-+-
| |
Turn for O. Move on which space?
low-L
| |
-+-+-
|X|
-+-+-
O| |--snip--
O|O|X
-+-+-
X|X|O
-+-+-
O| |X
Turn for X. Move on which space?
low-M
O|O|X
-+-+-
X|X|O
-+-+-
O|X|X
建模一个tic-tac-toe板是相当简单:该板只需要一个单一的字典值与九个键值对。当您模拟更复杂的事情时,您可能会发现需要包含其他字典和列表的字典和列表。列表可用于包含一系列有序的值,并且字典对于将键与值相关联很有用。例如,这是一个使用包含其他字典的字典的程序,以查看谁带来了野餐。 totalBrought()函数可以读取此数据结构,并计算所有guest虚拟机带来的项目总数。
allGuests = {'Alice': {'apples': 5, 'pretzels': 12},'Bob': {'ham sandwiches': 3, 'apples': 2},'Carol': {'cups': 3, 'apple pies': 1}}def totalBrought(guests, item):numBrought = 0for k, v in guests.items():numBrought = numBrought + v.get(item, 0)return numBroughtprint('Number of things being brought:')print(' - Apples ' + str(totalBrought(allGuests, 'apples')))print(' - Cups ' + str(totalBrought(allGuests, 'cups')))print(' - Cakes ' + str(totalBrought(allGuests, 'cakes')))print(' - Ham Sandwiches ' + str(totalBrought(allGuests, 'ham sandwiches')))print(' - Apple Pies ' + str(totalBrought(allGuests, 'apple pies')))
Number of things being brought:
- Apples 7
- Cups 3
- Cakes 0
- Ham Sandwiches 3
- Apple Pies 1