繁体   English   中英

在游戏库存中添加项目到堆栈

[英]Add item to stack in game inventory

我已经尝试过这个问题超过一个半小时了,我终于屈服了。 尽我所能,我不能像物品堆放在库存中。

详细地说,我随机生成一个'drop',它有一个存储在数组中的名称和数量。 'drops'是一个2d数组,它包含这些子数组。 我试图在一个玩家的库存中搜索这个下降,这个库存也有一个数量,当下降添加到它时它会增加...如果它完美地工作。

import random as rd

inventory = []

items = ["gunk","gear","bolt","wheel","pinion"]
drops = []



while True:
    enter = input("")
    if enter == "":
        drops = []
        quantity = 1
        drops.append([rd.choice(items),quantity])
        print("drops",drops)
        for i in range(len(drops)):
            try:
                add_to = inventory.index(drops[i])
                inventory[add_to][1] += quantity
            except:
                inventory.append(drops[i])


        print("inv",inventory)

输出(反复按Enter键):

drops [['pinion', 1]]
inv [['pinion', 1]]
drops [['gunk', 1]]
inv [['pinion', 1], ['gunk', 1]]
drops [['pinion', 1]]
inv [['pinion', 2], ['gunk', 1]]
drops [['bolt', 1]]
inv [['pinion', 2], ['gunk', 1], ['bolt', 1]]
drops [['pinion', 1]]
inv [['pinion', 2], ['gunk', 1], ['bolt', 1], ['pinion', 1]]

如您所见,由于数量与其搜索量不匹配,因此只需添加一个新数量。 知道如何解决这个问题吗?

对于这种事情,更好的数据类型是使用dict作为库存,因为它可以跟踪给定键(项目)的数量:

import random as rd

inventory = {}

items = ["gunk","gear","bolt","wheel","pinion"]
drops = []



while True:
    enter = input("")
    if enter == "":
        drops = []
        quantity = 1
        drops.append([rd.choice(items),quantity])
        print("drops",drops)

        for drop in drops:
            item = drop[0]
            qty = drop[1]
            if item in inventory:
                    inventory[item] += qty
            else:
                    inventory[item] = qty

        print("inv", [[key, inventory[key]] for key in inventory])

以下是输出示例:

drops, [['gunk', 1]]
inv, [['gunk', 1]]
drops, [['wheel', 1]]
inv, [['wheel', 1], ['gunk', 1]]
drops, [['gunk', 1]]
inv, [['wheel', 1], ['gunk', 2]] 
drops, [['gear', 1]]
inv, [['wheel', 1], ['gunk', 2], ['gear', 1]] 
drops, [['pinion', 1]]
inv, [['wheel', 1], ['pinion', 1], ['gunk', 2], ['gear', 1]] 
drops, [['gunk', 1]]
inv, [['wheel', 1], ['pinion', 1], ['gunk', 3], ['gear', 1]]

您没有说明您正在使用哪个Python版本。 根据你的print()语法,我假设它是Python 3.x,对吧?

如果是这样,这可能是来自collections模块的Counter的理想用例。 Counter对象基本上是一个将整数作为值存储的字典。 与@Alden建议的标准字典相比,优势在于您不必在第一次遇到密钥时初始化密钥:

import random as rd
import collections

# instead of a dict, use a Counter:
inventory = collections.Counter()

items = ["gunk","gear","bolt","wheel","pinion"]
drops = []



while True:
    enter = input("")
    if enter == "":
        drops = []
        quantity = 1
        drops.append([rd.choice(items),quantity])
        print("drops",drops)
        for add_to, quantity in drops:
            # if no value exists in 'inventory' for the key 
            # 'add_to', the value is assumed to be 0.
            inventory[add_to] += quantity

    print("inv", [[x, inventory[x]] for x in inventory])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM