Python 试图检查字典中是否存在字符串时,“str”对象没有属性“get”

Python 试图检查字典中是否存在字符串时,“str”对象没有属性“get”,python,get,Python,Get,我有三本字典,每本都有一个类似于电子游戏的目录 playerInventory = {"arrow": 12, "gold coin": 42, "rope": 1, "torch": 6, "dagger": 1} inv = {'gold coin': 42, 'rope': 1} dragonLoot2 = {"gold coin": 3, "dagger": 1, "ruby": 1} 我试图创建一个非常基本的函数,用于检查您输入的项目是否存在于您输入的另一个库存中,并且我的代码是 d

我有三本字典,每本都有一个类似于电子游戏的目录

playerInventory = {"arrow": 12, "gold coin": 42, "rope": 1, "torch": 6, "dagger": 1}
inv = {'gold coin': 42, 'rope': 1}
dragonLoot2 = {"gold coin": 3, "dagger": 1, "ruby": 1}
我试图创建一个非常基本的函数,用于检查您输入的项目是否存在于您输入的另一个库存中,并且我的代码是

def checkItem(inventory, item):
    print("You have " + str(inventory.get(item, 0)) + " of " + str(item))

kolla_item = input("Item to check: ")
kolla_inventory = input("Inventory to check: ")

checkItem(kolla_inventory, kolla_item)
这使我知道'str'对象对于checkItem的定义没有属性'get'错误。我已经尝试删除str并删除命令周围的任何括号,以获取所述项目的编号,但没有任何效果,我仍然不断收到该错误。然而,我注意到,如果我以字符串的形式手动输入条目,并且像下面这样的字典,它就可以很好地工作

checkItem(dragonLoot2, "ruby")

因此,出于某种原因,输入时项目输入不是字符串?在kolla_项目输入提示符周围放置str也无法修复此问题。

似乎您遇到的问题是,您试图从用户处输入一个字符串,并检查该字符串是否与词典名称匹配

e、 g.dragonLoot2不等于dragonLoot2,因为一个是字符串,一个是变量的名称

为此,您必须创造条件:

playerInventory = {"arrow": 12, "gold coin": 42, "rope": 1, "torch": 6, "dagger": 1}
inv = {'gold coin': 42, 'rope': 1}
dragonLoot2 = {"gold coin": 3, "dagger": 1, "ruby": 1}

def checkItem(inventory, item):
    print("You have " + str(inventory.get(item, 0)) + " of " + str(item))

kolla_item = input("Item to check: ")
kolla_inventory = input("Inventory to check: ")

if kolla_inventory == "dragonLoot2":
    checkItem(dragonLoot2, kolla_item)
elif kolla_inventory == "inv":
    checkItem(inv, kolla_item)
elif kolla_inventory == "playerInventory":
    checkItem(playerInventory, kolla_item)

似乎您遇到的问题是,您试图从用户处输入一个字符串,并检查该字符串是否与词典名称匹配

e、 g.dragonLoot2不等于dragonLoot2,因为一个是字符串,一个是变量的名称

为此,您必须创造条件:

playerInventory = {"arrow": 12, "gold coin": 42, "rope": 1, "torch": 6, "dagger": 1}
inv = {'gold coin': 42, 'rope': 1}
dragonLoot2 = {"gold coin": 3, "dagger": 1, "ruby": 1}

def checkItem(inventory, item):
    print("You have " + str(inventory.get(item, 0)) + " of " + str(item))

kolla_item = input("Item to check: ")
kolla_inventory = input("Inventory to check: ")

if kolla_inventory == "dragonLoot2":
    checkItem(dragonLoot2, kolla_item)
elif kolla_inventory == "inv":
    checkItem(inv, kolla_item)
elif kolla_inventory == "playerInventory":
    checkItem(playerInventory, kolla_item)

如果您运行此程序并输入金币,然后输入playerInventory,那么您也在运行函数checkItem,其中库存为playerInventory。然后,在函数中编写inventory.get,它本质上是playerInventory.get,您不是一个合法的表达式,因为.get只适用于字典

如果您运行此函数并输入金币,然后输入playerInventory,那么您也在运行函数checkItem,其中inventory是playerInventory。然后,在函数中,您编写inventory.get,它本质上是playerInventory.get,您不是一个合法的表达式,因为.get只适用于字典,正如其他人指出的,这是一个参数类型的问题。您的函数具有签名:

def checkItem(inventory:dict, item:str):
所以,清单必须是一个dict。每当您请求用户输入时,python默认返回一个字符串。字符串没有get方法。你想做的更像是一个开关。大概是这样的:

def select_dict(dictionary_name):
    if dictionary_name == 'playerInventory'
        return playerInventory

正如其他人指出的,这是一个论点类型的问题。您的函数具有签名:

def checkItem(inventory:dict, item:str):
所以,清单必须是一个dict。每当您请求用户输入时,python默认返回一个字符串。字符串没有get方法。你想做的更像是一个开关。大概是这样的:

def select_dict(dictionary_name):
    if dictionary_name == 'playerInventory'
        return playerInventory

可以添加整个错误跟踪吗?因为参数是字符串。你在做检查项目2,鲁比。输入总是一个字符串。你能添加整个错误跟踪吗?因为参数是一个字符串。你在做检查项目2,鲁比。输入总是一个字符串。