构建一个 python 基于文本的游戏:我正在尝试访问字典中的特定值
building a python text-based game: im trying to access a specific value inside of a dictionary
大家好,我正在为 class 构建一个基于文本的游戏,我在房间之间移动并尝试收集所有物品而不进入恶棍的房间,在这种情况下是 Record Executive,并且我只是在直接访问该项目时遇到问题,以便我可以将其添加到我的库存列表中..
这是我的字典:
rooms = {
'Lobby':{'East': 'Bar'},
'Roof':{'South': 'Bar', 'East': 'Stage', 'Item': 'Steel guitar'},
'Bar':{'West': 'Lobby', 'North': 'Roof', 'East': 'Bathroom', 'South': 'Basement', 'Item': 'Keyboard'},
'Basement':{'North': 'Bar', 'East': 'Studio', 'Item': 'Drums'},
'Stage':{'West': 'Roof', 'Item': 'Microphone'},
'Soundcheck':{'South': 'Bathroom', 'Item': 'Bass Guitar'},
'Bathroom':{'North': 'Soundcheck', 'West': 'Bar', 'Item': 'Electric Guitar'},
'Studio': {'West': 'Basement', 'Item': 'Record Executive'}
}
这是我的移动代码:
while gameOver != True:
playerStats(currentRoom, inventory, rooms)
# currentRoom
playerMove = input('Enter your move:\n')
try:
currentRoom = rooms[currentRoom][playerMove]
except Exception:
print('Invalid move')
continue
我从大堂向东移动,我现在的房间变成了酒吧,但我不知道如何去里面的 'Item' 属性 所以我可以添加 'Keyboard' 到我的库存清单...任何帮助将不胜感激!谢谢
索引你想要的字典
currentRoom['Item']
您将在 移动之后将其添加到列表中,因此在最后(在“try”、“except”部分之后)您将添加:
inventory.append(currentRoom['Item'])
通过将其放在移动代码之后,您可以从新房间而不是现有房间中取出物品。
有些房间可能没有物品,那么您可以这样做:
try:
inventory.append(currentRoom['Item'])
except KeyError:
pass
这可以防止您在没有物品的情况下进入房间时出现错误。
另外,您可能希望在拿走物品时将其从房间中取出。这样你就可以了。
try:
inventory.append(currentRoom['Item'])
del currentRoom['Item']
except KeyError:
pass
del
从字典中删除键
顺便说一句,在你的移动代码中,你也应该改变
except Exception:
到
except KeyError:
因此,如果出现不同的异常(例如,您按 ctrl-C),则它不会捕获它。
就像这个命令
currentRoom = rooms[currentRoom][playerMove]
您可以尝试将房间中的物品附加到变量(库存)中,最好是一个列表(或者一个满足您要求的集合)
inventory = []
for i in rooms:
for j in i:
if j == 'Item':
inventory.append(rooms[i][j])
现在应该是这样的:
inventory = []
gameOver = False
rooms = {
'Lobby':{'East': 'Bar'},
'Roof':{'South': 'Bar', 'East': 'Stage', 'Item': 'Steel guitar'},
'Bar':{'West': 'Lobby', 'North': 'Roof', 'East': 'Bathroom', 'South': 'Basement', 'Item': 'Keyboard'},
'Basement':{'North': 'Bar', 'East': 'Studio', 'Item': 'Drums'},
'Stage':{'West': 'Roof', 'Item': 'Microphone'},
'Soundcheck':{'South': 'Bathroom', 'Item': 'Bass Guitar'},
'Bathroom':{'North': 'Soundcheck', 'West': 'Bar', 'Item': 'Electric Guitar'},
'Studio': {'West': 'Basement', 'Item': 'Record Executive'}
}
while not gameOver:
playerStats(currentRoom, inventory, rooms)
# currentRoom
playerMove = input('\n Enter your move: ')
if playerMove == 'pick' or playerMove == 'acquire' or playerMove == 'get':
# add to inventory if exists
for i in rooms:
for j in i:
if j == 'Item':
inventory.append(rooms[i][j])
else:
print('nothing to pick')
else:
try:
currentRoom = rooms[currentRoom][playerMove]
except Exception:
print('Invalid move')
continue
编辑:
另外,您现在应该从房间中删除该物品,因为它现在已被获取--
(@Addlestrop 在他们的回答中也指出)
for i in rooms:
for j in i:
if j == 'Item':
inventory.append(rooms[i][j])
del rooms[i][j]
# copy item to inventory and delete from the room
else:
print('nothing to pick')
大家好,我正在为 class 构建一个基于文本的游戏,我在房间之间移动并尝试收集所有物品而不进入恶棍的房间,在这种情况下是 Record Executive,并且我只是在直接访问该项目时遇到问题,以便我可以将其添加到我的库存列表中..
这是我的字典:
rooms = {
'Lobby':{'East': 'Bar'},
'Roof':{'South': 'Bar', 'East': 'Stage', 'Item': 'Steel guitar'},
'Bar':{'West': 'Lobby', 'North': 'Roof', 'East': 'Bathroom', 'South': 'Basement', 'Item': 'Keyboard'},
'Basement':{'North': 'Bar', 'East': 'Studio', 'Item': 'Drums'},
'Stage':{'West': 'Roof', 'Item': 'Microphone'},
'Soundcheck':{'South': 'Bathroom', 'Item': 'Bass Guitar'},
'Bathroom':{'North': 'Soundcheck', 'West': 'Bar', 'Item': 'Electric Guitar'},
'Studio': {'West': 'Basement', 'Item': 'Record Executive'}
}
这是我的移动代码:
while gameOver != True:
playerStats(currentRoom, inventory, rooms)
# currentRoom
playerMove = input('Enter your move:\n')
try:
currentRoom = rooms[currentRoom][playerMove]
except Exception:
print('Invalid move')
continue
我从大堂向东移动,我现在的房间变成了酒吧,但我不知道如何去里面的 'Item' 属性 所以我可以添加 'Keyboard' 到我的库存清单...任何帮助将不胜感激!谢谢
索引你想要的字典
currentRoom['Item']
您将在 移动之后将其添加到列表中,因此在最后(在“try”、“except”部分之后)您将添加:
inventory.append(currentRoom['Item'])
通过将其放在移动代码之后,您可以从新房间而不是现有房间中取出物品。
有些房间可能没有物品,那么您可以这样做:
try:
inventory.append(currentRoom['Item'])
except KeyError:
pass
这可以防止您在没有物品的情况下进入房间时出现错误。
另外,您可能希望在拿走物品时将其从房间中取出。这样你就可以了。
try:
inventory.append(currentRoom['Item'])
del currentRoom['Item']
except KeyError:
pass
del
从字典中删除键
顺便说一句,在你的移动代码中,你也应该改变
except Exception:
到
except KeyError:
因此,如果出现不同的异常(例如,您按 ctrl-C),则它不会捕获它。
就像这个命令
currentRoom = rooms[currentRoom][playerMove]
您可以尝试将房间中的物品附加到变量(库存)中,最好是一个列表(或者一个满足您要求的集合)
inventory = []
for i in rooms:
for j in i:
if j == 'Item':
inventory.append(rooms[i][j])
现在应该是这样的:
inventory = []
gameOver = False
rooms = {
'Lobby':{'East': 'Bar'},
'Roof':{'South': 'Bar', 'East': 'Stage', 'Item': 'Steel guitar'},
'Bar':{'West': 'Lobby', 'North': 'Roof', 'East': 'Bathroom', 'South': 'Basement', 'Item': 'Keyboard'},
'Basement':{'North': 'Bar', 'East': 'Studio', 'Item': 'Drums'},
'Stage':{'West': 'Roof', 'Item': 'Microphone'},
'Soundcheck':{'South': 'Bathroom', 'Item': 'Bass Guitar'},
'Bathroom':{'North': 'Soundcheck', 'West': 'Bar', 'Item': 'Electric Guitar'},
'Studio': {'West': 'Basement', 'Item': 'Record Executive'}
}
while not gameOver:
playerStats(currentRoom, inventory, rooms)
# currentRoom
playerMove = input('\n Enter your move: ')
if playerMove == 'pick' or playerMove == 'acquire' or playerMove == 'get':
# add to inventory if exists
for i in rooms:
for j in i:
if j == 'Item':
inventory.append(rooms[i][j])
else:
print('nothing to pick')
else:
try:
currentRoom = rooms[currentRoom][playerMove]
except Exception:
print('Invalid move')
continue
编辑:
另外,您现在应该从房间中删除该物品,因为它现在已被获取--
(@Addlestrop 在他们的回答中也指出)
for i in rooms:
for j in i:
if j == 'Item':
inventory.append(rooms[i][j])
del rooms[i][j]
# copy item to inventory and delete from the room
else:
print('nothing to pick')