当试图将数组传递给函数时,它什么也不做。我的代码在下面
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]]
谢谢!
(是的,我知道这不是做事的最有效方法,我仍在学习,只是想让事情暂时生效)
答案 0 :(得分:0)
同时避免了此代码不必要的复杂性。
您的项目在另一个数组中,因此item[0]
永远不会等于pickup/battle
,同样,item[1]
永远不会是项目,它将是一个包含项目的数组。
因此,首先修复test_guy
的函数部分中缺少的括号,然后首先引用函数内部数组
item[0][0]
和item[0][1]