<p>正如在评论中提到的,这确实是一个列表的工作。包括完整的字典版本。你知道吗</p>
<p>带列表:</p>
<pre><code>def get_slot_x(inventory, x):
return inventory[x]
def add_item(inventory, item):
for i, v in enumerate(inventory):
if v is None:
inventory[i] = v
break
else:
raise RuntimeError('nowhere to put item')
def empty_slot_x(inventory, x):
inventory[x] = None
inventory = [None] * 10
</code></pre>
<p>使用dict:</p>
<pre><code>slotname = lambda x: 'slot%d' % x
POSSIBLE_SLOTS = list(map(slotname, range(10)))
</code></pre>
<p>如果值为“无”,则表示为空:</p>
<pre><code>def add_item(inventory, item):
for k, v in inventory.items():
if v is None:
inventory[k] = v
break
else:
raise RuntimeError('nowhere to put item')
def get_slot_x(inventory, x):
return inventory[slotname(x)]
def empty_slot_x(inventory, x):
inventory[slotname(x)] = None
inventory = collections.OrderedDict.fromkeys(POSSIBLE_SLOTS)
</code></pre>
<p>或者,如果不希望出现任何键,则表示为空:</p>
<pre><code>def add_item(inventory, item):
for k in POSSIBLE_SLOTS:
if k not in inventory:
inventory[k] = v
break
else:
raise RuntimeError('nowhere to put item')
def get_slot_x(inventory, x):
return inventory.get(slotname(x))
def empty_slot_x(inventory, x):
inventory.pop(slotname(x), None)
inventory = {}
</code></pre>
<p>对于上述任何一项:</p>
<pre><code>add_item(inventory, 'foobar')
assert get_slot_x(inventory, 0) is None
assert get_slot_x(inventory, 0) == 'foobar'
empty_slot_x(inventory, 0) # You may want to throw errors if nothing is there
assert get_slot_x(inventory, 0) is None
</code></pre>
<p>您也可以完全删除<code>slotname</code>,如果没有按下键的原因,只使用整数作为键。你知道吗</p>