如何多次返回变量并创建一个数组

时间:2016-04-25 04:06:41

标签: python arrays

我正在为python RPG创建一个商店/库存系统,并从我店里的一个函数返回几个变量。我每次访问商店时都会创建3-5个项目,所以如果您打印我的一个返回变量,它将打印最后一个项目的信息。我需要能够将每个唯一的项值存储在一个数组中,这样每个项目都可以被调用,而不仅仅是最后一个。

if plus == 0: #if item made has a plus equal to nothing
                        if has_add == 'yes': #if it has an add
                            if item_type == 'weapon':  #if it is a weapon (no plus, has add, is weapon)   
                                created_item = print(str(count) + ". " + quality + " " + wep_adj + " " + "" + weapon_type + " of " + wep_add + "..........Attack: " + str(weapon_attack) + " Price: " + str(wep_price)) #print this
                            if item_type == 'armor': #if it is an armor (no plus, has add, is armor)
                                created_item = print(str(count) + ". " + quality + " " + arm_adj + " " + " " + armor_piece + " of " + arm_add + "..........Armor: " + str(armor_defense) + " HP: " + str(armor_hp) + " Price: " + str(arm_price)) #print this
                        else: # if item doesnt have add
                            if item_type == 'weapon':  #if it is a weapon (no plus, no add, is weapon)
                                created_item = print(str(count) + ". " + quality + " " + wep_adj + " " + "" + weapon_type + "..........Attack: " + str(weapon_attack) + " Price: " + str(wep_price)) #print this
                            if item_type == 'armor': # if it is an armor (no plus, no add, is armor)
                                created_item = print(str(count) + ". " + quality + " " + arm_adj + " " + " " + armor_piece  + "..........Armor: " + str(armor_defense) + " HP: " + str(armor_hp) + " Price: " + str(arm_price)) #print this
                    else: #if item made has a plus 
                        if has_add == 'yes': # if it has an add
                            if item_type == 'weapon': # if it is a weapon (has plus, has add, is weapon)
                                created_item = print(str(count) + ". " + quality + " " + wep_adj + " " + "" + weapon_type + " of " + wep_add + " +" + str(plus) + "..........Attack: " + str(weapon_attack) + " Price: " + str(wep_price)) #print this
                            if item_type == 'armor': #if it is an armor (has plus, has add, is armor)
                                created_item = print(str(count) + ". " + quality + " " + arm_adj + " " + " " + armor_piece + " of " + arm_add + " +" + str(plus)  + "..........Armor: " + str(armor_defense) + " HP: " + str(armor_hp) + " Price: " + str(arm_price)) #print this
                        else: # if it doesnt have an add
                            if item_type == 'weapon': #if it is a weapon (has plus, no add, is weapon)
                                created_item = print(str(count) + ". " + quality + " " + wep_adj + " " + "" + weapon_type + " +" +  str(plus) + "..........Attack: " + str(weapon_attack) + " Price: " + str(wep_price)) #print this
                            if item_type == 'armor': #if it is an armor (has plus, no add, is armor)
                                created_item = print(str(count) + ". " + quality + " " + arm_adj + " " + " " + armor_piece + " +" + str(plus)  + "..........Armor: " + str(armor_defense) + " HP: " + str(armor_hp) + " Price: " + str(arm_price)) #print this

                    if item_type == 'weapon': #allows us to get info out of function
                        return (created_item, count, quality, wep_adj, weapon_type, wep_add, plus, weapon_attack, wep_price, randvar)
                    else:
                        return (created_item, count, quality, arm_adj, armor_piece, arm_add, plus, armor_defense, arm_price, armor_hp)



                while items_amount > items_made: #if we've made 3-5 items, stop making them
                    new_item, count, quality, adj, piece, add, plus, stat, price, other_stat = make_item()
                    items_made += 1 #increase items made every time one is made
                    count += 1
                return (new_item, count, quality, adj, piece, add, plus, stat, price, other_stat)      



            new_item, count, quality, adj, piece, add, plus, stat, price, other_stat = generate_items() #call function to make all items when shop is visited
            print(new_item, count, quality, adj, piece, add, plus, stat, price, other_stat)

由于我的代码非常庞大,我不想链接整个相关代码。最相关的是:

while items_amount > items_made: #if we've made 3-5 items, stop making them
                    new_item, count, quality, adj, piece, add, plus, stat, price, other_stat = make_item()
                    items_made += 1 #increase items made every time one is made
                    count += 1
                return (new_item, count, quality, adj, piece, add, plus, stat, price, other_stat)

我需要能够将它们作为数组而不是变量

返回

2 个答案:

答案 0 :(得分:2)

您可以将您要归还的内容视为一个tuple变量并将其附加到list

items = list()
while items_amount > items_made:  # if we've made 3-5 items, stop making them
    new_item_details = make_item() # assign to one tuple variable
    items.append(new_item_details) # append to list
    items_made += 1  # increase items made every time one is made
    count += 1
return items

如果您想访问单个item的每个细节,并且您希望它也很好,我建议您创建一个包含所需变量的类:

class Item(object):
    def __init__(self, item_details):
        self.item = item_details[0]
        self.count = item_details[1]
        self.quality = item_details[2]
        self.adj = item_details[3]

        ... # similarily other fields

        self.other_stat = item_details[9]

然后你可以创建这些项目:

items = list()
while items_amount > items_made:  # if we've made 3-5 items, stop making them
    new_item_details = make_item() # assign to one tuple variable
    items.append(Item(new_item_details)) # append to list
    items_made += 1  # increase items made every time one is made
    count += 1
return items

现在,如果您想访问第二项的adj

# 1st index would be the second item in the list 
items[1].adj # access using variable name on the instance

答案 1 :(得分:1)

将元组插入列表:

items = list()
while items_amount > items_made:  # if we've made 3-5 items, stop making them
    new_item, count, quality, adj, piece, add, plus, stat, price, other_stat = make_item()
    items_made += 1  # increase items made every time one is made
    count += 1
    items.append((new_item, count, quality, adj, piece, add, plus, stat, price, other_stat))

return items