当试图将一个数组传递给一个函数时,它根本不做任何事情。我的代码如下
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()在执行pickup(items.armour)时是否有效,它应该只是将该位置的数组传递到pickup()中,为什么不能对test_guy3和test_guy3中包含的信息执行同样的操作
更新代码如下:
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]]
谢谢!
(是的,我知道这不是最有效的方法,我现在还在学习,只是想让事情运转起来)
发布于 2019-04-25 04:48:18
同时避免这段代码不必要的复杂性。
您的项在另一个数组中,因此item[0]
永远不会等于pickup/battle
,同样,item[1]
也永远不会是项,它将是一个包含项的数组。
因此,首先修复test_guy
中缺少的函数部分的括号,然后首先引用函数内部数组
item[0][0]
和item[0][1]
https://stackoverflow.com/questions/55838034
复制相似问题