为什么“ AddOre”功能不起作用?

时间:2019-04-26 12:49:56

标签: python-3.x

我一直在阅读《用Python自动化无聊的东西》一书,并尝试自己学习Python,我决定练习在第一章中学到的东西,并对这段代码及其原因感到困惑不起作用。 坐在那里试图找出答案,但还是没有成功。

我也尝试过切换函数和其他内容的给定值,但是如果我说实话,我真的不知道我在做什么,如果有人解释会导致问题以及如何解决,我将非常高兴。修复它,这是代码:

Mine = {'Bronze': 10,'Iron': 40,'Gold': 2,'Diamonds':2}

def ShowMine(cave):

    for k, v in cave.items():
        Total_Res = 0
        print("There is : " + str(k))
        print("And there is : " + str(v) + " of it")
        Total_Res += int(v)
    print("total ores in the cave : " + str(Total_Res))
def AddOre(cave, ore):

    for k,v in cave.items():
       cave += ore.values()

Mine1 = {'Bronzze': 10,'Iron': 0,'Gold': 2,'Diamonds':4}

ShowMine(Mine)

AddOre(Mine,Mine1)

ShowMine(Mine)

我希望代码将Mine1的附加值输出到程序开始时创建的原始Mine。

1 个答案:

答案 0 :(得分:0)

函数cave的两个参数oreAddOre都是字典。然后,该函数迭代第一个自变量的项,并在每次迭代中尝试将返回值ore.values()(它是一个列表)添加到字典cave中。这行不通,而且我不确定该操作的结果应该是什么。

我猜,您要执行的操作是将第二个参数的值添加到第一个参数的值(通过键来标识它们)。可以通过以下代码完成:

def AddOre(cave, ore):
    for k, _ in cave.items():
        if k in ore:
            cave[k] += ore[k]
    for k, v in ore.items():
        if k not in cave:
            cave[k] = v

第一个循环添加洞穴中已经存在的矿石的值,第二个循环添加所有新的矿石。使用列表和字典类型的本机加法操作可能有一种更简单的方法来执行相同的操作,但是我现在想不起来。