@zhangyu756897669
2017-08-29T15:37:49.000000Z
字数 4377
阅读 589
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] = turn
if 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 = 0
for k, v in guests.items():
numBrought = numBrought + v.get(item, 0)
return numBrought
print('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