使用函数作为字典的value. 看代码很直观。
该代码出自The Python Master一书.
点击(此处)折叠或打开
- def labyrinth(position, alive):
- print('You are in a maze of twisty passages, all alike.')
- return position, alive
- def dark_forest_road(position, alive):
- print("You are on a road in a dark forest. To"
- " The north you can see a tower.")
- return position, alive
-
- def tall_tower(position, alive):
- print("There is a tall tower here, with no obvious door. "
- "A path leads east.")
- return position, alive
- def rabbit_hole(position, alive):
- print("You fall down a rabbit hole into a labyrinth.")
- return (0,0), alive
- def lava_pit(position, alive):
- print("You fall into a lava pit.")
- return position, False
- def go_north(position):
- i, j = position
- new_position = (i, j + 1)
- return new_position
- def go_east(position):
- i, j = position
- new_position = (i + 1, j)
- return new_position
- def go_south(position):
- i, j = position
- new_position = (i, j - 1)
- return new_position
- def go_west(position):
- i, j = position
- new_position = (i - 1, j)
- return new_position
- def look(position):
- return position
- def quit(position):
- return None
- locations = {
- (0, 0): labyrinth,
- (1, 0): dark_forest_road,
- (1, 1): tall_tower,
- (2, 1): rabbit_hole,
- (1, 2): lava_pit,
- }
-
- actions = {
- 'N': go_north,
- 'E': go_east,
- 'S': go_south,
- 'W': go_west,
- 'L': look,
- 'Q': quit,
- }
- def play():
-
- position = (0, 0)
- alive = True
-
- while position:
-
- try:
- location_action = locations[position]
- except KeyError:
- print("There is nothing here.")
- else:
- position, alive = location_action(position, alive)
- if not alive:
- print("You're dead")
- break
-
- command = input()
-
- try:
- command_action = actions[command]
- except KeyError:
- print("I don't understand")
- else:
- position = command_action(position)
-
- else: #nobreak
- print("You have chosen to leave the game")
-
- print("Game Over")
-
- play()
执行起来结果如下:
点击(此处)折叠或打开
- root@kali:/usr/local/src/py/project_dirs# ./emulate_switch_3.py
You are in a maze of twisty passages, all alike.
E
You are on a road in a dark forest. To The north you can see a tower.
N
There is a tall tower here, with no obvious door. A path leads east.
N
You fall into a lava pit.
You're dead
Game Over
root@kali:/usr/local/src/py/project_dirs# ./emulate_switch_3.py
You are in a maze of twisty passages, all alike.
E
You are on a road in a dark forest. To The north you can see a tower.
N
There is a tall tower here, with no obvious door. A path leads east.
E
You fall down a rabbit hole into a labyrinth.
E
You are on a road in a dark forest. To The north you can see a tower.
N
There is a tall tower here, with no obvious door. A path leads east.
E
You fall down a rabbit hole into a labyrinth.
Q
You have chosen to leave the game
Game Over