将数组内容传递给函数无法正常工作

时间:2019-04-24 20:25:21

标签: python arrays python-3.x

当试图将数组传递给函数时,它什么也不做。我的代码在下面

main.py

import items
import npcs.py

def pickup(item):
    global player_weight_max,player_weight,player_inv
    #Calculates if item's weight will make player_weight go over player_weight_max
    if player_weight + item[5] <= player_weight_max:
        player_inv.append(item)
        player_weight = player_weight + item[5]
    else:
        print("You're not able to carry this item.")

def npc(npc):
    #Prints NPC speech
    if npc[2] != None:
        print("".join(npc[1]) + ": " + "".join(npc[2]))
    else:
        pass
    for function in npc[3]:
        if function[0] == 'pickup':
            pickup(function[1])
        if function[0] == 'battle':
            battle(function[1])

npcs.py

import items

#art,name,speech,functions
test_guy = [["art"],["name"],["speech"],[
        [['pickup'],[items.armour[0]],
        [['pickup'],[items.armour[1]],
    ]
]

items.py

armour = [
    [str(""),str("Tin Helmet"),int(1),int(20),str("head"),int(2),int(0),int(2)],
    [str(""),str("Tin Chestplate"),int(1),int(20),str("torso"),int(0),int(1),int(2)],
    [str(""),str("Tin Pants"),int(1),int(20),str("legs"),int(3),int(0),int(2)],
    [str(""),str("Tin Boots"),int(1),int(20),str("feet"),int(2),int(0),int(2)],
]

pickup()为什么不附加从items.py获得的信息

我已经验证了在执行Pickup(items.armour [0])时Pickup()的工作原理应该只是将该位置的数组传递到Pickup()中,为什么不能对test_guy中包含的信息进行相同的操作[3] [0]和test_guy [3] [1]?

更新了代码,如下所示:

def npc(npc):
    #Prints NPC speech
    if npc[2] != None:
        print("".join(npc[1]) + ": " + "".join(npc[2]))
    else:
        pass
    for function in npc[3]:
        print(function[1][0])
        if function[0][0] == 'pickup':
            pickup(function[1][0])
        if function[0][0] == 'battle':
            battle(function[1][0])

运行时:

npc(npcs.test_guy)
print(player_inv)

现在输出正确:

name: speech
['', 'Tin Helmet', 1, 20, 'head', 2, 0, 2]
['', 'Tin Chestplate', 1, 20, 'torso', 0, 1, 2]
[['', 'Tin Helmet', 1, 20, 'head', 2, 0, 2], ['', 'Tin Chestplate', 1, 20, 'torso', 0, 1, 2]]

谢谢!

(是的,我知道这不是做事的最有效方法,我仍在学习,只是想让事情暂时生效)

1 个答案:

答案 0 :(得分:0)

同时避免了此代码不必要的复杂性。

您的项目在另一个数组中,因此item[0]永远不会等于pickup/battle,同样,item[1]永远不会是项目,它将是一个包含项目的数组。

因此,首先修复test_guy的函数部分中缺少的括号,然后首先引用函数内部数组

item[0][0]item[0][1]