[关闭]
@zhangyu756897669 2017-08-29T15:37:49.000000Z 字数 4377 阅读 589

python 官方文档15.0

python官方文档


使用数据结构来模拟现实世界的事物

Tic-Tac-Toe董事会

  1. theBoard = {'top-L': ' ', 'top-M': ' ', 'top-R': ' ',
  2. 'mid-L': ' ', 'mid-M': ' ', 'mid-R': ' ',
  3. 'low-L': ' ', 'low-M': ' ', 'low-R': ' '}

存储在板载变量中的数据结构表示图5-3中的tic-tactoe板。
000003.png-11.7kB

  1. theBoard = {'top-L': ' ', 'top-M': ' ', 'top-R': ' ',
  2. 'mid-L': ' ', 'mid-M': 'X', 'mid-R': ' ',
  3. 'low-L': ' ', 'low-M': ' ', 'low-R': ' '}

现在的数据结构表示图5-4中的tic-tac-toe板。
5-4.png-7.7kB
* 通过将Os放置在顶部的方式赢得玩家O的董事会可能如下所示:

  1. theBoard = {'top-L': 'O', 'top-M': 'O', 'top-R': 'O',
  2. 'mid-L': 'X', 'mid-M': 'X', 'mid-R': ' ',
  3. 'low-L': ' ', 'low-M': ' ', 'low-R': 'X'}

现在的数据结构表示图5-5中的tic-tac-toe板。
5-5.png-15.7kB

  1. theBoard = {'top-L': ' ', 'top-M': ' ', 'top-R': ' ',
  2. 'mid-L': ' ', 'mid-M': ' ', 'mid-R': ' ',
  3. 'low-L': ' ', 'low-M': ' ', 'low-R': ' '}
  4. def printBoard(board):
  5. print(board['top-L'] + '|' + board['top-M'] + '|' + board['top-R'])
  6. print('-+-+-')
  7. print(board['mid-L'] + '|' + board['mid-M'] + '|' + board['mid-R'])
  8. print('-+-+-')
  9. print(board['low-L'] + '|' + board['low-M'] + '|' + board['low-R'])
  10. printBoard(theBoard)

当您运行此程序时,printBoard()将打印出一个空白的tic-tactoe板。

| |
-+-+-
| |
-+-+-
| |

  1. theBoard = {'top-L': 'O', 'top-M': 'O', 'top-R': 'O', 'mid-L': 'X', 'mid-M':
  2. 'X', 'mid-R': ' ', 'low-L': ' ', 'low-M': ' ', 'low-R': 'X'}
  3. def printBoard(board):
  4. print(board['top-L'] + '|' + board['top-M'] + '|' + board['top-R'])
  5. print('-+-+-')
  6. print(board['mid-L'] + '|' + board['mid-M'] + '|' + board['mid-R'])
  7. print('-+-+-')
  8. print(board['low-L'] + '|' + board['low-M'] + '|' + board['low-R'])
  9. printBoard(theBoard)

现在当您运行此程序时,新的电路板将被打印到屏幕上。

O|O|O
-+-+-
X|X|
-+-+-
| |X

因为你创建了一个数据结构来表示一个tic-tac-toe板,并且在printBoard()中编写代码来解释数据结构,所以现在有一个程序可以“模拟”tic-tac-toe板。您可以以不同的方式组织数据结构(例如,使用“TOP-LEFT”而不是“top-L”)键,但只要代码与数据结构一起使用,您将具有正确的工作程序。

现在我们添加一些允许玩家进入他们的动作的代码。修改ticTacToe.py程序看起来像这样:

  1. theBoard = {'top-L': ' ', 'top-M': ' ', 'top-R': ' ', 'mid-L': ' ', 'mid-M': ' ', 'mid-R': ' ', 'low-L': ' ', 'low-M': ' ', 'low-R': ' '}
  2. def printBoard(board):
  3. print(board['top-L'] + '|' + board['top-M'] + '|' + board['top-R'])
  4. print('-+-+-')
  5. print(board['mid-L'] + '|' + board['mid-M'] + '|' + board['mid-R'])
  6. print('-+-+-')
  7. print(board['low-L'] + '|' + board['low-M'] + '|' + board['low-R'])
  8. turn = 'X'
  9. for i in range(9):
  10. printBoard(theBoard)
  11. print('Turn for ' + turn + '. Move on which space?')
  12. move = input()
  13. theBoard[move] = turn
  14. if turn == 'X':
  15. turn = 'O'
  16. else:
  17. turn = 'X'
  18. 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虚拟机带来的项目总数。

  1. allGuests = {'Alice': {'apples': 5, 'pretzels': 12},
  2. 'Bob': {'ham sandwiches': 3, 'apples': 2},
  3. 'Carol': {'cups': 3, 'apple pies': 1}}
  4. def totalBrought(guests, item):
  5. numBrought = 0
  6. for k, v in guests.items():
  7. numBrought = numBrought + v.get(item, 0)
  8. return numBrought
  9. print('Number of things being brought:')
  10. print(' - Apples ' + str(totalBrought(allGuests, 'apples')))
  11. print(' - Cups ' + str(totalBrought(allGuests, 'cups')))
  12. print(' - Cakes ' + str(totalBrought(allGuests, 'cakes')))
  13. print(' - Ham Sandwiches ' + str(totalBrought(allGuests, 'ham sandwiches')))
  14. 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

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注